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    /// The Extended PAN ID of the currently associated Thread network. This 8-byte unique
1219    /// identifier is used to distinguish different Thread networks.
1220    ///
1221    /// Only present on Thread networks.
1222    pub extended_pan_id: Option<u64>,
1223    #[doc(hidden)]
1224    pub __source_breaking: fidl::marker::SourceBreaking,
1225}
1226
1227impl fidl::Persistable for Telemetry {}
1228
1229/// Represents a group of TREL related counters in the platform layer.
1230///
1231/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1232#[derive(Clone, Debug, Default, PartialEq)]
1233pub struct TrelCounters {
1234    /// Sum of size of packets received through TREL.
1235    pub rx_bytes: Option<u64>,
1236    /// Number of packets received through TREL.
1237    pub rx_packets: Option<u64>,
1238    /// Sum of size of packets successfully transmitted through TREL.
1239    pub tx_bytes: Option<u64>,
1240    /// Number of packet transmission failures through TREL.
1241    pub tx_failure: Option<u64>,
1242    /// Number of packets successfully transmitted through TREL.
1243    pub tx_packets: Option<u64>,
1244    #[doc(hidden)]
1245    pub __source_breaking: fidl::marker::SourceBreaking,
1246}
1247
1248impl fidl::Persistable for TrelCounters {}
1249
1250/// Represents the TREL peer related info.
1251///
1252/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1253/// More fields may be added per request.
1254#[derive(Clone, Debug, Default, PartialEq)]
1255pub struct TrelPeersInfo {
1256    /// Number of TREL peers for this Thread Border Router.
1257    ///
1258    /// Required.
1259    pub num_trel_peers: Option<u16>,
1260    #[doc(hidden)]
1261    pub __source_breaking: fidl::marker::SourceBreaking,
1262}
1263
1264impl fidl::Persistable for TrelPeersInfo {}
1265
1266/// Represents the count of queries, responses, failures handled by upstream DNS server
1267///
1268/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1269#[derive(Clone, Debug, Default, PartialEq)]
1270pub struct UpstreamDnsCounters {
1271    /// The number of queries forwarded
1272    ///
1273    /// Required.
1274    pub queries: Option<u32>,
1275    /// The number of responses forwarded
1276    ///
1277    /// Required.
1278    pub responses: Option<u32>,
1279    /// The number of upstream DNS failures
1280    ///
1281    /// Required.
1282    pub failures: Option<u32>,
1283    #[doc(hidden)]
1284    pub __source_breaking: fidl::marker::SourceBreaking,
1285}
1286
1287impl fidl::Persistable for UpstreamDnsCounters {}
1288
1289/// Represents the Upstream DNS related info.
1290///
1291/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1292/// More fields may be added per request.
1293#[derive(Clone, Debug, Default, PartialEq)]
1294pub struct UpstreamDnsInfo {
1295    /// State of upstream DNS query.
1296    ///
1297    /// Required.
1298    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1299    #[doc(hidden)]
1300    pub __source_breaking: fidl::marker::SourceBreaking,
1301}
1302
1303impl fidl::Persistable for UpstreamDnsInfo {}
1304
1305/// Parameters for DeviceExtra::JoinNetwork command.
1306#[derive(Clone, Debug)]
1307pub enum JoinParams {
1308    /// Attempts to find and join a known pre-existing network.
1309    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1310    /// Attempts to find and join an unknown pre-existing network
1311    /// that is configured to accept and provision devices with
1312    /// the given shared secret, or PSKd. This allows new devices to
1313    /// join existing networks without knowing the credentials for
1314    /// the specific network.
1315    JoinerParameter(JoinerCommissioningParams),
1316    #[doc(hidden)]
1317    __SourceBreaking { unknown_ordinal: u64 },
1318}
1319
1320/// Pattern that matches an unknown `JoinParams` member.
1321#[macro_export]
1322macro_rules! JoinParamsUnknown {
1323    () => {
1324        _
1325    };
1326}
1327
1328// Custom PartialEq so that unknown variants are not equal to themselves.
1329impl PartialEq for JoinParams {
1330    fn eq(&self, other: &Self) -> bool {
1331        match (self, other) {
1332            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
1333            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
1334            _ => false,
1335        }
1336    }
1337}
1338
1339impl JoinParams {
1340    #[inline]
1341    pub fn ordinal(&self) -> u64 {
1342        match *self {
1343            Self::ProvisioningParameter(_) => 1,
1344            Self::JoinerParameter(_) => 2,
1345            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1346        }
1347    }
1348
1349    #[inline]
1350    pub fn unknown_variant_for_testing() -> Self {
1351        Self::__SourceBreaking { unknown_ordinal: 0 }
1352    }
1353
1354    #[inline]
1355    pub fn is_unknown(&self) -> bool {
1356        match self {
1357            Self::__SourceBreaking { .. } => true,
1358            _ => false,
1359        }
1360    }
1361}
1362
1363impl fidl::Persistable for JoinParams {}
1364
1365/// Indicates the current status of the form/join operation.
1366///
1367/// Returned by [`ProvisioningMonitor.WatchProgress`].
1368#[derive(Clone, Debug)]
1369pub enum ProvisioningProgress {
1370    /// Approximate percent complete indication for a user interface.
1371    Progress(f32),
1372    /// The final Identity when the operation has completed successfully.
1373    Identity(fidl_fuchsia_lowpan_device__common::Identity),
1374    #[doc(hidden)]
1375    __SourceBreaking { unknown_ordinal: u64 },
1376}
1377
1378/// Pattern that matches an unknown `ProvisioningProgress` member.
1379#[macro_export]
1380macro_rules! ProvisioningProgressUnknown {
1381    () => {
1382        _
1383    };
1384}
1385
1386// Custom PartialEq so that unknown variants are not equal to themselves.
1387impl PartialEq for ProvisioningProgress {
1388    fn eq(&self, other: &Self) -> bool {
1389        match (self, other) {
1390            (Self::Progress(x), Self::Progress(y)) => *x == *y,
1391            (Self::Identity(x), Self::Identity(y)) => *x == *y,
1392            _ => false,
1393        }
1394    }
1395}
1396
1397impl ProvisioningProgress {
1398    #[inline]
1399    pub fn ordinal(&self) -> u64 {
1400        match *self {
1401            Self::Progress(_) => 1,
1402            Self::Identity(_) => 2,
1403            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1404        }
1405    }
1406
1407    #[inline]
1408    pub fn unknown_variant_for_testing() -> Self {
1409        Self::__SourceBreaking { unknown_ordinal: 0 }
1410    }
1411
1412    #[inline]
1413    pub fn is_unknown(&self) -> bool {
1414        match self {
1415            Self::__SourceBreaking { .. } => true,
1416            _ => false,
1417        }
1418    }
1419}
1420
1421impl fidl::Persistable for ProvisioningProgress {}
1422
1423pub mod beacon_info_stream_ordinals {
1424    pub const NEXT: u64 = 0x367a557363a340b6;
1425}
1426
1427pub mod device_ordinals {
1428    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
1429}
1430
1431pub mod device_connector_ordinals {
1432    pub const CONNECT: u64 = 0x296896c9304836cd;
1433}
1434
1435pub mod device_extra_ordinals {
1436    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
1437    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
1438    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
1439}
1440
1441pub mod device_extra_connector_ordinals {
1442    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
1443}
1444
1445pub mod device_route_ordinals {
1446    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
1447    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
1448    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
1449    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
1450}
1451
1452pub mod device_route_connector_ordinals {
1453    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
1454}
1455
1456pub mod device_route_extra_ordinals {
1457    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
1458    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
1459}
1460
1461pub mod device_route_extra_connector_ordinals {
1462    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
1463}
1464
1465pub mod legacy_joining_ordinals {
1466    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
1467}
1468
1469pub mod legacy_joining_connector_ordinals {
1470    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
1471}
1472
1473pub mod provisioning_monitor_ordinals {
1474    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
1475}
1476
1477pub mod telemetry_provider_ordinals {
1478    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
1479}
1480
1481pub mod telemetry_provider_connector_ordinals {
1482    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
1483}
1484
1485mod internal {
1486    use super::*;
1487    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
1488        type Owned = Self;
1489
1490        #[inline(always)]
1491        fn inline_align(_context: fidl::encoding::Context) -> usize {
1492            std::mem::align_of::<u32>()
1493        }
1494
1495        #[inline(always)]
1496        fn inline_size(_context: fidl::encoding::Context) -> usize {
1497            std::mem::size_of::<u32>()
1498        }
1499
1500        #[inline(always)]
1501        fn encode_is_copy() -> bool {
1502            false
1503        }
1504
1505        #[inline(always)]
1506        fn decode_is_copy() -> bool {
1507            false
1508        }
1509    }
1510
1511    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
1512        type Borrowed<'a> = Self;
1513        #[inline(always)]
1514        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1515            *value
1516        }
1517    }
1518
1519    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
1520        #[inline]
1521        unsafe fn encode(
1522            self,
1523            encoder: &mut fidl::encoding::Encoder<'_, D>,
1524            offset: usize,
1525            _depth: fidl::encoding::Depth,
1526        ) -> fidl::Result<()> {
1527            encoder.debug_check_bounds::<Self>(offset);
1528            encoder.write_num(self.into_primitive(), offset);
1529            Ok(())
1530        }
1531    }
1532
1533    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
1534        #[inline(always)]
1535        fn new_empty() -> Self {
1536            Self::unknown()
1537        }
1538
1539        #[inline]
1540        unsafe fn decode(
1541            &mut self,
1542            decoder: &mut fidl::encoding::Decoder<'_, D>,
1543            offset: usize,
1544            _depth: fidl::encoding::Depth,
1545        ) -> fidl::Result<()> {
1546            decoder.debug_check_bounds::<Self>(offset);
1547            let prim = decoder.read_num::<u32>(offset);
1548
1549            *self = Self::from_primitive_allow_unknown(prim);
1550            Ok(())
1551        }
1552    }
1553    unsafe impl fidl::encoding::TypeMarker for Nat64State {
1554        type Owned = Self;
1555
1556        #[inline(always)]
1557        fn inline_align(_context: fidl::encoding::Context) -> usize {
1558            std::mem::align_of::<u32>()
1559        }
1560
1561        #[inline(always)]
1562        fn inline_size(_context: fidl::encoding::Context) -> usize {
1563            std::mem::size_of::<u32>()
1564        }
1565
1566        #[inline(always)]
1567        fn encode_is_copy() -> bool {
1568            false
1569        }
1570
1571        #[inline(always)]
1572        fn decode_is_copy() -> bool {
1573            false
1574        }
1575    }
1576
1577    impl fidl::encoding::ValueTypeMarker for Nat64State {
1578        type Borrowed<'a> = Self;
1579        #[inline(always)]
1580        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1581            *value
1582        }
1583    }
1584
1585    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
1586        #[inline]
1587        unsafe fn encode(
1588            self,
1589            encoder: &mut fidl::encoding::Encoder<'_, D>,
1590            offset: usize,
1591            _depth: fidl::encoding::Depth,
1592        ) -> fidl::Result<()> {
1593            encoder.debug_check_bounds::<Self>(offset);
1594            encoder.write_num(self.into_primitive(), offset);
1595            Ok(())
1596        }
1597    }
1598
1599    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
1600        #[inline(always)]
1601        fn new_empty() -> Self {
1602            Self::unknown()
1603        }
1604
1605        #[inline]
1606        unsafe fn decode(
1607            &mut self,
1608            decoder: &mut fidl::encoding::Decoder<'_, D>,
1609            offset: usize,
1610            _depth: fidl::encoding::Depth,
1611        ) -> fidl::Result<()> {
1612            decoder.debug_check_bounds::<Self>(offset);
1613            let prim = decoder.read_num::<u32>(offset);
1614
1615            *self = Self::from_primitive_allow_unknown(prim);
1616            Ok(())
1617        }
1618    }
1619    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
1620        type Owned = Self;
1621
1622        #[inline(always)]
1623        fn inline_align(_context: fidl::encoding::Context) -> usize {
1624            std::mem::align_of::<i32>()
1625        }
1626
1627        #[inline(always)]
1628        fn inline_size(_context: fidl::encoding::Context) -> usize {
1629            std::mem::size_of::<i32>()
1630        }
1631
1632        #[inline(always)]
1633        fn encode_is_copy() -> bool {
1634            false
1635        }
1636
1637        #[inline(always)]
1638        fn decode_is_copy() -> bool {
1639            false
1640        }
1641    }
1642
1643    impl fidl::encoding::ValueTypeMarker for ProvisionError {
1644        type Borrowed<'a> = Self;
1645        #[inline(always)]
1646        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1647            *value
1648        }
1649    }
1650
1651    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
1652        #[inline]
1653        unsafe fn encode(
1654            self,
1655            encoder: &mut fidl::encoding::Encoder<'_, D>,
1656            offset: usize,
1657            _depth: fidl::encoding::Depth,
1658        ) -> fidl::Result<()> {
1659            encoder.debug_check_bounds::<Self>(offset);
1660            encoder.write_num(self.into_primitive(), offset);
1661            Ok(())
1662        }
1663    }
1664
1665    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
1666        #[inline(always)]
1667        fn new_empty() -> Self {
1668            Self::unknown()
1669        }
1670
1671        #[inline]
1672        unsafe fn decode(
1673            &mut self,
1674            decoder: &mut fidl::encoding::Decoder<'_, D>,
1675            offset: usize,
1676            _depth: fidl::encoding::Depth,
1677        ) -> fidl::Result<()> {
1678            decoder.debug_check_bounds::<Self>(offset);
1679            let prim = decoder.read_num::<i32>(offset);
1680
1681            *self = Self::from_primitive_allow_unknown(prim);
1682            Ok(())
1683        }
1684    }
1685    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
1686        type Owned = Self;
1687
1688        #[inline(always)]
1689        fn inline_align(_context: fidl::encoding::Context) -> usize {
1690            std::mem::align_of::<i8>()
1691        }
1692
1693        #[inline(always)]
1694        fn inline_size(_context: fidl::encoding::Context) -> usize {
1695            std::mem::size_of::<i8>()
1696        }
1697
1698        #[inline(always)]
1699        fn encode_is_copy() -> bool {
1700            true
1701        }
1702
1703        #[inline(always)]
1704        fn decode_is_copy() -> bool {
1705            false
1706        }
1707    }
1708
1709    impl fidl::encoding::ValueTypeMarker for RoutePreference {
1710        type Borrowed<'a> = Self;
1711        #[inline(always)]
1712        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1713            *value
1714        }
1715    }
1716
1717    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1718        for RoutePreference
1719    {
1720        #[inline]
1721        unsafe fn encode(
1722            self,
1723            encoder: &mut fidl::encoding::Encoder<'_, D>,
1724            offset: usize,
1725            _depth: fidl::encoding::Depth,
1726        ) -> fidl::Result<()> {
1727            encoder.debug_check_bounds::<Self>(offset);
1728            encoder.write_num(self.into_primitive(), offset);
1729            Ok(())
1730        }
1731    }
1732
1733    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
1734        #[inline(always)]
1735        fn new_empty() -> Self {
1736            Self::Low
1737        }
1738
1739        #[inline]
1740        unsafe fn decode(
1741            &mut self,
1742            decoder: &mut fidl::encoding::Decoder<'_, D>,
1743            offset: usize,
1744            _depth: fidl::encoding::Depth,
1745        ) -> fidl::Result<()> {
1746            decoder.debug_check_bounds::<Self>(offset);
1747            let prim = decoder.read_num::<i8>(offset);
1748
1749            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1750            Ok(())
1751        }
1752    }
1753    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
1754        type Owned = Self;
1755
1756        #[inline(always)]
1757        fn inline_align(_context: fidl::encoding::Context) -> usize {
1758            std::mem::align_of::<u32>()
1759        }
1760
1761        #[inline(always)]
1762        fn inline_size(_context: fidl::encoding::Context) -> usize {
1763            std::mem::size_of::<u32>()
1764        }
1765
1766        #[inline(always)]
1767        fn encode_is_copy() -> bool {
1768            true
1769        }
1770
1771        #[inline(always)]
1772        fn decode_is_copy() -> bool {
1773            false
1774        }
1775    }
1776
1777    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
1778        type Borrowed<'a> = Self;
1779        #[inline(always)]
1780        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1781            *value
1782        }
1783    }
1784
1785    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1786        for SrpServerAddressMode
1787    {
1788        #[inline]
1789        unsafe fn encode(
1790            self,
1791            encoder: &mut fidl::encoding::Encoder<'_, D>,
1792            offset: usize,
1793            _depth: fidl::encoding::Depth,
1794        ) -> fidl::Result<()> {
1795            encoder.debug_check_bounds::<Self>(offset);
1796            encoder.write_num(self.into_primitive(), offset);
1797            Ok(())
1798        }
1799    }
1800
1801    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
1802        #[inline(always)]
1803        fn new_empty() -> Self {
1804            Self::Unicast
1805        }
1806
1807        #[inline]
1808        unsafe fn decode(
1809            &mut self,
1810            decoder: &mut fidl::encoding::Decoder<'_, D>,
1811            offset: usize,
1812            _depth: fidl::encoding::Depth,
1813        ) -> fidl::Result<()> {
1814            decoder.debug_check_bounds::<Self>(offset);
1815            let prim = decoder.read_num::<u32>(offset);
1816
1817            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1818            Ok(())
1819        }
1820    }
1821    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
1822        type Owned = Self;
1823
1824        #[inline(always)]
1825        fn inline_align(_context: fidl::encoding::Context) -> usize {
1826            std::mem::align_of::<u32>()
1827        }
1828
1829        #[inline(always)]
1830        fn inline_size(_context: fidl::encoding::Context) -> usize {
1831            std::mem::size_of::<u32>()
1832        }
1833
1834        #[inline(always)]
1835        fn encode_is_copy() -> bool {
1836            true
1837        }
1838
1839        #[inline(always)]
1840        fn decode_is_copy() -> bool {
1841            false
1842        }
1843    }
1844
1845    impl fidl::encoding::ValueTypeMarker for SrpServerState {
1846        type Borrowed<'a> = Self;
1847        #[inline(always)]
1848        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1849            *value
1850        }
1851    }
1852
1853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
1854        #[inline]
1855        unsafe fn encode(
1856            self,
1857            encoder: &mut fidl::encoding::Encoder<'_, D>,
1858            offset: usize,
1859            _depth: fidl::encoding::Depth,
1860        ) -> fidl::Result<()> {
1861            encoder.debug_check_bounds::<Self>(offset);
1862            encoder.write_num(self.into_primitive(), offset);
1863            Ok(())
1864        }
1865    }
1866
1867    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
1868        #[inline(always)]
1869        fn new_empty() -> Self {
1870            Self::Disabled
1871        }
1872
1873        #[inline]
1874        unsafe fn decode(
1875            &mut self,
1876            decoder: &mut fidl::encoding::Decoder<'_, D>,
1877            offset: usize,
1878            _depth: fidl::encoding::Depth,
1879        ) -> fidl::Result<()> {
1880            decoder.debug_check_bounds::<Self>(offset);
1881            let prim = decoder.read_num::<u32>(offset);
1882
1883            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1884            Ok(())
1885        }
1886    }
1887    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
1888        type Owned = Self;
1889
1890        #[inline(always)]
1891        fn inline_align(_context: fidl::encoding::Context) -> usize {
1892            std::mem::align_of::<u32>()
1893        }
1894
1895        #[inline(always)]
1896        fn inline_size(_context: fidl::encoding::Context) -> usize {
1897            std::mem::size_of::<u32>()
1898        }
1899
1900        #[inline(always)]
1901        fn encode_is_copy() -> bool {
1902            false
1903        }
1904
1905        #[inline(always)]
1906        fn decode_is_copy() -> bool {
1907            false
1908        }
1909    }
1910
1911    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
1912        type Borrowed<'a> = Self;
1913        #[inline(always)]
1914        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1915            *value
1916        }
1917    }
1918
1919    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1920        for UpstreamDnsQueryState
1921    {
1922        #[inline]
1923        unsafe fn encode(
1924            self,
1925            encoder: &mut fidl::encoding::Encoder<'_, D>,
1926            offset: usize,
1927            _depth: fidl::encoding::Depth,
1928        ) -> fidl::Result<()> {
1929            encoder.debug_check_bounds::<Self>(offset);
1930            encoder.write_num(self.into_primitive(), offset);
1931            Ok(())
1932        }
1933    }
1934
1935    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
1936        #[inline(always)]
1937        fn new_empty() -> Self {
1938            Self::unknown()
1939        }
1940
1941        #[inline]
1942        unsafe fn decode(
1943            &mut self,
1944            decoder: &mut fidl::encoding::Decoder<'_, D>,
1945            offset: usize,
1946            _depth: fidl::encoding::Depth,
1947        ) -> fidl::Result<()> {
1948            decoder.debug_check_bounds::<Self>(offset);
1949            let prim = decoder.read_num::<u32>(offset);
1950
1951            *self = Self::from_primitive_allow_unknown(prim);
1952            Ok(())
1953        }
1954    }
1955
1956    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
1957        type Borrowed<'a> = &'a Self;
1958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1959            value
1960        }
1961    }
1962
1963    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
1964        type Owned = Self;
1965
1966        #[inline(always)]
1967        fn inline_align(_context: fidl::encoding::Context) -> usize {
1968            8
1969        }
1970
1971        #[inline(always)]
1972        fn inline_size(_context: fidl::encoding::Context) -> usize {
1973            16
1974        }
1975    }
1976
1977    unsafe impl<D: fidl::encoding::ResourceDialect>
1978        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
1979    {
1980        #[inline]
1981        unsafe fn encode(
1982            self,
1983            encoder: &mut fidl::encoding::Encoder<'_, D>,
1984            offset: usize,
1985            _depth: fidl::encoding::Depth,
1986        ) -> fidl::Result<()> {
1987            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
1988            // Delegate to tuple encoding.
1989            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
1990                (
1991                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
1992                ),
1993                encoder, offset, _depth
1994            )
1995        }
1996    }
1997    unsafe impl<
1998        D: fidl::encoding::ResourceDialect,
1999        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
2000    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
2001    {
2002        #[inline]
2003        unsafe fn encode(
2004            self,
2005            encoder: &mut fidl::encoding::Encoder<'_, D>,
2006            offset: usize,
2007            depth: fidl::encoding::Depth,
2008        ) -> fidl::Result<()> {
2009            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2010            // Zero out padding regions. There's no need to apply masks
2011            // because the unmasked parts will be overwritten by fields.
2012            // Write the fields.
2013            self.0.encode(encoder, offset + 0, depth)?;
2014            Ok(())
2015        }
2016    }
2017
2018    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2019        for BeaconInfoStreamNextResponse
2020    {
2021        #[inline(always)]
2022        fn new_empty() -> Self {
2023            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2024        }
2025
2026        #[inline]
2027        unsafe fn decode(
2028            &mut self,
2029            decoder: &mut fidl::encoding::Decoder<'_, D>,
2030            offset: usize,
2031            _depth: fidl::encoding::Depth,
2032        ) -> fidl::Result<()> {
2033            decoder.debug_check_bounds::<Self>(offset);
2034            // Verify that padding bytes are zero.
2035            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2036            Ok(())
2037        }
2038    }
2039
2040    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2041        type Borrowed<'a> = &'a Self;
2042        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2043            value
2044        }
2045    }
2046
2047    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2048        type Owned = Self;
2049
2050        #[inline(always)]
2051        fn inline_align(_context: fidl::encoding::Context) -> usize {
2052            8
2053        }
2054
2055        #[inline(always)]
2056        fn inline_size(_context: fidl::encoding::Context) -> usize {
2057            16
2058        }
2059    }
2060
2061    unsafe impl<D: fidl::encoding::ResourceDialect>
2062        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2063        for &DeviceGetSupportedChannelsResponse
2064    {
2065        #[inline]
2066        unsafe fn encode(
2067            self,
2068            encoder: &mut fidl::encoding::Encoder<'_, D>,
2069            offset: usize,
2070            _depth: fidl::encoding::Depth,
2071        ) -> fidl::Result<()> {
2072            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2073            // Delegate to tuple encoding.
2074            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2075                (
2076                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2077                ),
2078                encoder, offset, _depth
2079            )
2080        }
2081    }
2082    unsafe impl<
2083        D: fidl::encoding::ResourceDialect,
2084        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2085    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2086    {
2087        #[inline]
2088        unsafe fn encode(
2089            self,
2090            encoder: &mut fidl::encoding::Encoder<'_, D>,
2091            offset: usize,
2092            depth: fidl::encoding::Depth,
2093        ) -> fidl::Result<()> {
2094            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2095            // Zero out padding regions. There's no need to apply masks
2096            // because the unmasked parts will be overwritten by fields.
2097            // Write the fields.
2098            self.0.encode(encoder, offset + 0, depth)?;
2099            Ok(())
2100        }
2101    }
2102
2103    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2104        for DeviceGetSupportedChannelsResponse
2105    {
2106        #[inline(always)]
2107        fn new_empty() -> Self {
2108            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2109        }
2110
2111        #[inline]
2112        unsafe fn decode(
2113            &mut self,
2114            decoder: &mut fidl::encoding::Decoder<'_, D>,
2115            offset: usize,
2116            _depth: fidl::encoding::Depth,
2117        ) -> fidl::Result<()> {
2118            decoder.debug_check_bounds::<Self>(offset);
2119            // Verify that padding bytes are zero.
2120            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2121            Ok(())
2122        }
2123    }
2124
2125    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2126        type Borrowed<'a> = &'a Self;
2127        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2128            value
2129        }
2130    }
2131
2132    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2133        type Owned = Self;
2134
2135        #[inline(always)]
2136        fn inline_align(_context: fidl::encoding::Context) -> usize {
2137            8
2138        }
2139
2140        #[inline(always)]
2141        fn inline_size(_context: fidl::encoding::Context) -> usize {
2142            16
2143        }
2144    }
2145
2146    unsafe impl<D: fidl::encoding::ResourceDialect>
2147        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2148        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2149    {
2150        #[inline]
2151        unsafe fn encode(
2152            self,
2153            encoder: &mut fidl::encoding::Encoder<'_, D>,
2154            offset: usize,
2155            _depth: fidl::encoding::Depth,
2156        ) -> fidl::Result<()> {
2157            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2158            // Delegate to tuple encoding.
2159            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2160                (
2161                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2162                ),
2163                encoder, offset, _depth
2164            )
2165        }
2166    }
2167    unsafe impl<
2168        D: fidl::encoding::ResourceDialect,
2169        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2170    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2171    {
2172        #[inline]
2173        unsafe fn encode(
2174            self,
2175            encoder: &mut fidl::encoding::Encoder<'_, D>,
2176            offset: usize,
2177            depth: fidl::encoding::Depth,
2178        ) -> fidl::Result<()> {
2179            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2180            // Zero out padding regions. There's no need to apply masks
2181            // because the unmasked parts will be overwritten by fields.
2182            // Write the fields.
2183            self.0.encode(encoder, offset + 0, depth)?;
2184            Ok(())
2185        }
2186    }
2187
2188    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2189        for DeviceRouteExtraGetLocalExternalRoutesResponse
2190    {
2191        #[inline(always)]
2192        fn new_empty() -> Self {
2193            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2194        }
2195
2196        #[inline]
2197        unsafe fn decode(
2198            &mut self,
2199            decoder: &mut fidl::encoding::Decoder<'_, D>,
2200            offset: usize,
2201            _depth: fidl::encoding::Depth,
2202        ) -> fidl::Result<()> {
2203            decoder.debug_check_bounds::<Self>(offset);
2204            // Verify that padding bytes are zero.
2205            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2206            Ok(())
2207        }
2208    }
2209
2210    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2211        type Borrowed<'a> = &'a Self;
2212        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2213            value
2214        }
2215    }
2216
2217    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2218        type Owned = Self;
2219
2220        #[inline(always)]
2221        fn inline_align(_context: fidl::encoding::Context) -> usize {
2222            8
2223        }
2224
2225        #[inline(always)]
2226        fn inline_size(_context: fidl::encoding::Context) -> usize {
2227            16
2228        }
2229    }
2230
2231    unsafe impl<D: fidl::encoding::ResourceDialect>
2232        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2233        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2234    {
2235        #[inline]
2236        unsafe fn encode(
2237            self,
2238            encoder: &mut fidl::encoding::Encoder<'_, D>,
2239            offset: usize,
2240            _depth: fidl::encoding::Depth,
2241        ) -> fidl::Result<()> {
2242            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2243            // Delegate to tuple encoding.
2244            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2245                (
2246                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2247                ),
2248                encoder, offset, _depth
2249            )
2250        }
2251    }
2252    unsafe impl<
2253        D: fidl::encoding::ResourceDialect,
2254        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2255    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2256    {
2257        #[inline]
2258        unsafe fn encode(
2259            self,
2260            encoder: &mut fidl::encoding::Encoder<'_, D>,
2261            offset: usize,
2262            depth: fidl::encoding::Depth,
2263        ) -> fidl::Result<()> {
2264            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2265            // Zero out padding regions. There's no need to apply masks
2266            // because the unmasked parts will be overwritten by fields.
2267            // Write the fields.
2268            self.0.encode(encoder, offset + 0, depth)?;
2269            Ok(())
2270        }
2271    }
2272
2273    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2274        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2275    {
2276        #[inline(always)]
2277        fn new_empty() -> Self {
2278            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2279        }
2280
2281        #[inline]
2282        unsafe fn decode(
2283            &mut self,
2284            decoder: &mut fidl::encoding::Decoder<'_, D>,
2285            offset: usize,
2286            _depth: fidl::encoding::Depth,
2287        ) -> fidl::Result<()> {
2288            decoder.debug_check_bounds::<Self>(offset);
2289            // Verify that padding bytes are zero.
2290            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2291            Ok(())
2292        }
2293    }
2294
2295    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2296        type Borrowed<'a> = &'a Self;
2297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2298            value
2299        }
2300    }
2301
2302    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2303        type Owned = Self;
2304
2305        #[inline(always)]
2306        fn inline_align(_context: fidl::encoding::Context) -> usize {
2307            8
2308        }
2309
2310        #[inline(always)]
2311        fn inline_size(_context: fidl::encoding::Context) -> usize {
2312            16
2313        }
2314    }
2315
2316    unsafe impl<D: fidl::encoding::ResourceDialect>
2317        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2318        for &DeviceRouteRegisterExternalRouteRequest
2319    {
2320        #[inline]
2321        unsafe fn encode(
2322            self,
2323            encoder: &mut fidl::encoding::Encoder<'_, D>,
2324            offset: usize,
2325            _depth: fidl::encoding::Depth,
2326        ) -> fidl::Result<()> {
2327            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2328            // Delegate to tuple encoding.
2329            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
2330                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
2331                encoder,
2332                offset,
2333                _depth,
2334            )
2335        }
2336    }
2337    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
2338        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
2339    {
2340        #[inline]
2341        unsafe fn encode(
2342            self,
2343            encoder: &mut fidl::encoding::Encoder<'_, D>,
2344            offset: usize,
2345            depth: fidl::encoding::Depth,
2346        ) -> fidl::Result<()> {
2347            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2348            // Zero out padding regions. There's no need to apply masks
2349            // because the unmasked parts will be overwritten by fields.
2350            // Write the fields.
2351            self.0.encode(encoder, offset + 0, depth)?;
2352            Ok(())
2353        }
2354    }
2355
2356    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2357        for DeviceRouteRegisterExternalRouteRequest
2358    {
2359        #[inline(always)]
2360        fn new_empty() -> Self {
2361            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
2362        }
2363
2364        #[inline]
2365        unsafe fn decode(
2366            &mut self,
2367            decoder: &mut fidl::encoding::Decoder<'_, D>,
2368            offset: usize,
2369            _depth: fidl::encoding::Depth,
2370        ) -> fidl::Result<()> {
2371            decoder.debug_check_bounds::<Self>(offset);
2372            // Verify that padding bytes are zero.
2373            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
2374            Ok(())
2375        }
2376    }
2377
2378    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2379        type Borrowed<'a> = &'a Self;
2380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2381            value
2382        }
2383    }
2384
2385    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2386        type Owned = Self;
2387
2388        #[inline(always)]
2389        fn inline_align(_context: fidl::encoding::Context) -> usize {
2390            8
2391        }
2392
2393        #[inline(always)]
2394        fn inline_size(_context: fidl::encoding::Context) -> usize {
2395            16
2396        }
2397    }
2398
2399    unsafe impl<D: fidl::encoding::ResourceDialect>
2400        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
2401        for &DeviceRouteRegisterOnMeshPrefixRequest
2402    {
2403        #[inline]
2404        unsafe fn encode(
2405            self,
2406            encoder: &mut fidl::encoding::Encoder<'_, D>,
2407            offset: usize,
2408            _depth: fidl::encoding::Depth,
2409        ) -> fidl::Result<()> {
2410            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2411            // Delegate to tuple encoding.
2412            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
2413                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
2414                encoder,
2415                offset,
2416                _depth,
2417            )
2418        }
2419    }
2420    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
2421        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
2422    {
2423        #[inline]
2424        unsafe fn encode(
2425            self,
2426            encoder: &mut fidl::encoding::Encoder<'_, D>,
2427            offset: usize,
2428            depth: fidl::encoding::Depth,
2429        ) -> fidl::Result<()> {
2430            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2431            // Zero out padding regions. There's no need to apply masks
2432            // because the unmasked parts will be overwritten by fields.
2433            // Write the fields.
2434            self.0.encode(encoder, offset + 0, depth)?;
2435            Ok(())
2436        }
2437    }
2438
2439    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2440        for DeviceRouteRegisterOnMeshPrefixRequest
2441    {
2442        #[inline(always)]
2443        fn new_empty() -> Self {
2444            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
2445        }
2446
2447        #[inline]
2448        unsafe fn decode(
2449            &mut self,
2450            decoder: &mut fidl::encoding::Decoder<'_, D>,
2451            offset: usize,
2452            _depth: fidl::encoding::Depth,
2453        ) -> fidl::Result<()> {
2454            decoder.debug_check_bounds::<Self>(offset);
2455            // Verify that padding bytes are zero.
2456            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
2457            Ok(())
2458        }
2459    }
2460
2461    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2462        type Borrowed<'a> = &'a Self;
2463        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2464            value
2465        }
2466    }
2467
2468    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2469        type Owned = Self;
2470
2471        #[inline(always)]
2472        fn inline_align(_context: fidl::encoding::Context) -> usize {
2473            1
2474        }
2475
2476        #[inline(always)]
2477        fn inline_size(_context: fidl::encoding::Context) -> usize {
2478            17
2479        }
2480    }
2481
2482    unsafe impl<D: fidl::encoding::ResourceDialect>
2483        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
2484        for &DeviceRouteUnregisterExternalRouteRequest
2485    {
2486        #[inline]
2487        unsafe fn encode(
2488            self,
2489            encoder: &mut fidl::encoding::Encoder<'_, D>,
2490            offset: usize,
2491            _depth: fidl::encoding::Depth,
2492        ) -> fidl::Result<()> {
2493            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2494            // Delegate to tuple encoding.
2495            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
2496                (
2497                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2498                ),
2499                encoder, offset, _depth
2500            )
2501        }
2502    }
2503    unsafe impl<
2504        D: fidl::encoding::ResourceDialect,
2505        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2506    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
2507    {
2508        #[inline]
2509        unsafe fn encode(
2510            self,
2511            encoder: &mut fidl::encoding::Encoder<'_, D>,
2512            offset: usize,
2513            depth: fidl::encoding::Depth,
2514        ) -> fidl::Result<()> {
2515            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2516            // Zero out padding regions. There's no need to apply masks
2517            // because the unmasked parts will be overwritten by fields.
2518            // Write the fields.
2519            self.0.encode(encoder, offset + 0, depth)?;
2520            Ok(())
2521        }
2522    }
2523
2524    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2525        for DeviceRouteUnregisterExternalRouteRequest
2526    {
2527        #[inline(always)]
2528        fn new_empty() -> Self {
2529            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2530        }
2531
2532        #[inline]
2533        unsafe fn decode(
2534            &mut self,
2535            decoder: &mut fidl::encoding::Decoder<'_, D>,
2536            offset: usize,
2537            _depth: fidl::encoding::Depth,
2538        ) -> fidl::Result<()> {
2539            decoder.debug_check_bounds::<Self>(offset);
2540            // Verify that padding bytes are zero.
2541            fidl::decode!(
2542                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2543                D,
2544                &mut self.subnet,
2545                decoder,
2546                offset + 0,
2547                _depth
2548            )?;
2549            Ok(())
2550        }
2551    }
2552
2553    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2554        type Borrowed<'a> = &'a Self;
2555        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2556            value
2557        }
2558    }
2559
2560    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2561        type Owned = Self;
2562
2563        #[inline(always)]
2564        fn inline_align(_context: fidl::encoding::Context) -> usize {
2565            1
2566        }
2567
2568        #[inline(always)]
2569        fn inline_size(_context: fidl::encoding::Context) -> usize {
2570            17
2571        }
2572    }
2573
2574    unsafe impl<D: fidl::encoding::ResourceDialect>
2575        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
2576        for &DeviceRouteUnregisterOnMeshPrefixRequest
2577    {
2578        #[inline]
2579        unsafe fn encode(
2580            self,
2581            encoder: &mut fidl::encoding::Encoder<'_, D>,
2582            offset: usize,
2583            _depth: fidl::encoding::Depth,
2584        ) -> fidl::Result<()> {
2585            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2586            // Delegate to tuple encoding.
2587            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
2588                (
2589                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2590                ),
2591                encoder, offset, _depth
2592            )
2593        }
2594    }
2595    unsafe impl<
2596        D: fidl::encoding::ResourceDialect,
2597        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2598    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
2599    {
2600        #[inline]
2601        unsafe fn encode(
2602            self,
2603            encoder: &mut fidl::encoding::Encoder<'_, D>,
2604            offset: usize,
2605            depth: fidl::encoding::Depth,
2606        ) -> fidl::Result<()> {
2607            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2608            // Zero out padding regions. There's no need to apply masks
2609            // because the unmasked parts will be overwritten by fields.
2610            // Write the fields.
2611            self.0.encode(encoder, offset + 0, depth)?;
2612            Ok(())
2613        }
2614    }
2615
2616    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2617        for DeviceRouteUnregisterOnMeshPrefixRequest
2618    {
2619        #[inline(always)]
2620        fn new_empty() -> Self {
2621            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2622        }
2623
2624        #[inline]
2625        unsafe fn decode(
2626            &mut self,
2627            decoder: &mut fidl::encoding::Decoder<'_, D>,
2628            offset: usize,
2629            _depth: fidl::encoding::Depth,
2630        ) -> fidl::Result<()> {
2631            decoder.debug_check_bounds::<Self>(offset);
2632            // Verify that padding bytes are zero.
2633            fidl::decode!(
2634                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2635                D,
2636                &mut self.subnet,
2637                decoder,
2638                offset + 0,
2639                _depth
2640            )?;
2641            Ok(())
2642        }
2643    }
2644
2645    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
2646        type Borrowed<'a> = &'a Self;
2647        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2648            value
2649        }
2650    }
2651
2652    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
2653        type Owned = Self;
2654
2655        #[inline(always)]
2656        fn inline_align(_context: fidl::encoding::Context) -> usize {
2657            8
2658        }
2659
2660        #[inline(always)]
2661        fn inline_size(_context: fidl::encoding::Context) -> usize {
2662            16
2663        }
2664    }
2665
2666    unsafe impl<D: fidl::encoding::ResourceDialect>
2667        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
2668        for &LegacyJoiningMakeJoinableRequest
2669    {
2670        #[inline]
2671        unsafe fn encode(
2672            self,
2673            encoder: &mut fidl::encoding::Encoder<'_, D>,
2674            offset: usize,
2675            _depth: fidl::encoding::Depth,
2676        ) -> fidl::Result<()> {
2677            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2678            unsafe {
2679                // Copy the object into the buffer.
2680                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2681                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
2682                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
2683                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2684                // done second because the memcpy will write garbage to these bytes.
2685                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2686                let padding_mask = 0xffffffffffff0000u64;
2687                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2688            }
2689            Ok(())
2690        }
2691    }
2692    unsafe impl<
2693        D: fidl::encoding::ResourceDialect,
2694        T0: fidl::encoding::Encode<i64, D>,
2695        T1: fidl::encoding::Encode<u16, D>,
2696    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
2697    {
2698        #[inline]
2699        unsafe fn encode(
2700            self,
2701            encoder: &mut fidl::encoding::Encoder<'_, D>,
2702            offset: usize,
2703            depth: fidl::encoding::Depth,
2704        ) -> fidl::Result<()> {
2705            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2706            // Zero out padding regions. There's no need to apply masks
2707            // because the unmasked parts will be overwritten by fields.
2708            unsafe {
2709                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2710                (ptr as *mut u64).write_unaligned(0);
2711            }
2712            // Write the fields.
2713            self.0.encode(encoder, offset + 0, depth)?;
2714            self.1.encode(encoder, offset + 8, depth)?;
2715            Ok(())
2716        }
2717    }
2718
2719    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2720        for LegacyJoiningMakeJoinableRequest
2721    {
2722        #[inline(always)]
2723        fn new_empty() -> Self {
2724            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
2725        }
2726
2727        #[inline]
2728        unsafe fn decode(
2729            &mut self,
2730            decoder: &mut fidl::encoding::Decoder<'_, D>,
2731            offset: usize,
2732            _depth: fidl::encoding::Depth,
2733        ) -> fidl::Result<()> {
2734            decoder.debug_check_bounds::<Self>(offset);
2735            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2736            // Verify that padding bytes are zero.
2737            let ptr = unsafe { buf_ptr.offset(8) };
2738            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2739            let mask = 0xffffffffffff0000u64;
2740            let maskedval = padval & mask;
2741            if maskedval != 0 {
2742                return Err(fidl::Error::NonZeroPadding {
2743                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2744                });
2745            }
2746            // Copy from the buffer into the object.
2747            unsafe {
2748                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2749            }
2750            Ok(())
2751        }
2752    }
2753
2754    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
2755        type Borrowed<'a> = &'a Self;
2756        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2757            value
2758        }
2759    }
2760
2761    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
2762        type Owned = Self;
2763
2764        #[inline(always)]
2765        fn inline_align(_context: fidl::encoding::Context) -> usize {
2766            8
2767        }
2768
2769        #[inline(always)]
2770        fn inline_size(_context: fidl::encoding::Context) -> usize {
2771            16
2772        }
2773    }
2774
2775    unsafe impl<D: fidl::encoding::ResourceDialect>
2776        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
2777        for &ProvisioningMonitorWatchProgressResponse
2778    {
2779        #[inline]
2780        unsafe fn encode(
2781            self,
2782            encoder: &mut fidl::encoding::Encoder<'_, D>,
2783            offset: usize,
2784            _depth: fidl::encoding::Depth,
2785        ) -> fidl::Result<()> {
2786            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2787            // Delegate to tuple encoding.
2788            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
2789                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
2790                encoder,
2791                offset,
2792                _depth,
2793            )
2794        }
2795    }
2796    unsafe impl<
2797        D: fidl::encoding::ResourceDialect,
2798        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
2799    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
2800    {
2801        #[inline]
2802        unsafe fn encode(
2803            self,
2804            encoder: &mut fidl::encoding::Encoder<'_, D>,
2805            offset: usize,
2806            depth: fidl::encoding::Depth,
2807        ) -> fidl::Result<()> {
2808            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2809            // Zero out padding regions. There's no need to apply masks
2810            // because the unmasked parts will be overwritten by fields.
2811            // Write the fields.
2812            self.0.encode(encoder, offset + 0, depth)?;
2813            Ok(())
2814        }
2815    }
2816
2817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2818        for ProvisioningMonitorWatchProgressResponse
2819    {
2820        #[inline(always)]
2821        fn new_empty() -> Self {
2822            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
2823        }
2824
2825        #[inline]
2826        unsafe fn decode(
2827            &mut self,
2828            decoder: &mut fidl::encoding::Decoder<'_, D>,
2829            offset: usize,
2830            _depth: fidl::encoding::Depth,
2831        ) -> fidl::Result<()> {
2832            decoder.debug_check_bounds::<Self>(offset);
2833            // Verify that padding bytes are zero.
2834            fidl::decode!(
2835                ProvisioningProgress,
2836                D,
2837                &mut self.progress,
2838                decoder,
2839                offset + 0,
2840                _depth
2841            )?;
2842            Ok(())
2843        }
2844    }
2845
2846    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
2847        type Borrowed<'a> = &'a Self;
2848        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2849            value
2850        }
2851    }
2852
2853    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
2854        type Owned = Self;
2855
2856        #[inline(always)]
2857        fn inline_align(_context: fidl::encoding::Context) -> usize {
2858            8
2859        }
2860
2861        #[inline(always)]
2862        fn inline_size(_context: fidl::encoding::Context) -> usize {
2863            16
2864        }
2865    }
2866
2867    unsafe impl<D: fidl::encoding::ResourceDialect>
2868        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
2869        for &TelemetryProviderGetTelemetryResponse
2870    {
2871        #[inline]
2872        unsafe fn encode(
2873            self,
2874            encoder: &mut fidl::encoding::Encoder<'_, D>,
2875            offset: usize,
2876            _depth: fidl::encoding::Depth,
2877        ) -> fidl::Result<()> {
2878            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2879            // Delegate to tuple encoding.
2880            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
2881                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
2882                encoder,
2883                offset,
2884                _depth,
2885            )
2886        }
2887    }
2888    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
2889        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
2890    {
2891        #[inline]
2892        unsafe fn encode(
2893            self,
2894            encoder: &mut fidl::encoding::Encoder<'_, D>,
2895            offset: usize,
2896            depth: fidl::encoding::Depth,
2897        ) -> fidl::Result<()> {
2898            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2899            // Zero out padding regions. There's no need to apply masks
2900            // because the unmasked parts will be overwritten by fields.
2901            // Write the fields.
2902            self.0.encode(encoder, offset + 0, depth)?;
2903            Ok(())
2904        }
2905    }
2906
2907    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2908        for TelemetryProviderGetTelemetryResponse
2909    {
2910        #[inline(always)]
2911        fn new_empty() -> Self {
2912            Self { telemetry: fidl::new_empty!(Telemetry, D) }
2913        }
2914
2915        #[inline]
2916        unsafe fn decode(
2917            &mut self,
2918            decoder: &mut fidl::encoding::Decoder<'_, D>,
2919            offset: usize,
2920            _depth: fidl::encoding::Depth,
2921        ) -> fidl::Result<()> {
2922            decoder.debug_check_bounds::<Self>(offset);
2923            // Verify that padding bytes are zero.
2924            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
2925            Ok(())
2926        }
2927    }
2928
2929    impl BeaconInfo {
2930        #[inline(always)]
2931        fn max_ordinal_present(&self) -> u64 {
2932            if let Some(_) = self.lqi {
2933                return 4;
2934            }
2935            if let Some(_) = self.rssi {
2936                return 3;
2937            }
2938            if let Some(_) = self.identity {
2939                return 2;
2940            }
2941            if let Some(_) = self.address {
2942                return 1;
2943            }
2944            0
2945        }
2946    }
2947
2948    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
2949        type Borrowed<'a> = &'a Self;
2950        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2951            value
2952        }
2953    }
2954
2955    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
2956        type Owned = Self;
2957
2958        #[inline(always)]
2959        fn inline_align(_context: fidl::encoding::Context) -> usize {
2960            8
2961        }
2962
2963        #[inline(always)]
2964        fn inline_size(_context: fidl::encoding::Context) -> usize {
2965            16
2966        }
2967    }
2968
2969    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
2970        for &BeaconInfo
2971    {
2972        unsafe fn encode(
2973            self,
2974            encoder: &mut fidl::encoding::Encoder<'_, D>,
2975            offset: usize,
2976            mut depth: fidl::encoding::Depth,
2977        ) -> fidl::Result<()> {
2978            encoder.debug_check_bounds::<BeaconInfo>(offset);
2979            // Vector header
2980            let max_ordinal: u64 = self.max_ordinal_present();
2981            encoder.write_num(max_ordinal, offset);
2982            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2983            // Calling encoder.out_of_line_offset(0) is not allowed.
2984            if max_ordinal == 0 {
2985                return Ok(());
2986            }
2987            depth.increment()?;
2988            let envelope_size = 8;
2989            let bytes_len = max_ordinal as usize * envelope_size;
2990            #[allow(unused_variables)]
2991            let offset = encoder.out_of_line_offset(bytes_len);
2992            let mut _prev_end_offset: usize = 0;
2993            if 1 > max_ordinal {
2994                return Ok(());
2995            }
2996
2997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2998            // are envelope_size bytes.
2999            let cur_offset: usize = (1 - 1) * envelope_size;
3000
3001            // Zero reserved fields.
3002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3003
3004            // Safety:
3005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3007            //   envelope_size bytes, there is always sufficient room.
3008            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3009            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3010            encoder, offset + cur_offset, depth
3011        )?;
3012
3013            _prev_end_offset = cur_offset + envelope_size;
3014            if 2 > max_ordinal {
3015                return Ok(());
3016            }
3017
3018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3019            // are envelope_size bytes.
3020            let cur_offset: usize = (2 - 1) * envelope_size;
3021
3022            // Zero reserved fields.
3023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3024
3025            // Safety:
3026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3028            //   envelope_size bytes, there is always sufficient room.
3029            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3030            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3031            encoder, offset + cur_offset, depth
3032        )?;
3033
3034            _prev_end_offset = cur_offset + envelope_size;
3035            if 3 > max_ordinal {
3036                return Ok(());
3037            }
3038
3039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3040            // are envelope_size bytes.
3041            let cur_offset: usize = (3 - 1) * envelope_size;
3042
3043            // Zero reserved fields.
3044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3045
3046            // Safety:
3047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3049            //   envelope_size bytes, there is always sufficient room.
3050            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3051                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3052                encoder,
3053                offset + cur_offset,
3054                depth,
3055            )?;
3056
3057            _prev_end_offset = cur_offset + envelope_size;
3058            if 4 > max_ordinal {
3059                return Ok(());
3060            }
3061
3062            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3063            // are envelope_size bytes.
3064            let cur_offset: usize = (4 - 1) * envelope_size;
3065
3066            // Zero reserved fields.
3067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3068
3069            // Safety:
3070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3072            //   envelope_size bytes, there is always sufficient room.
3073            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3074                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3075                encoder,
3076                offset + cur_offset,
3077                depth,
3078            )?;
3079
3080            _prev_end_offset = cur_offset + envelope_size;
3081
3082            Ok(())
3083        }
3084    }
3085
3086    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3087        #[inline(always)]
3088        fn new_empty() -> Self {
3089            Self::default()
3090        }
3091
3092        unsafe fn decode(
3093            &mut self,
3094            decoder: &mut fidl::encoding::Decoder<'_, D>,
3095            offset: usize,
3096            mut depth: fidl::encoding::Depth,
3097        ) -> fidl::Result<()> {
3098            decoder.debug_check_bounds::<Self>(offset);
3099            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3100                None => return Err(fidl::Error::NotNullable),
3101                Some(len) => len,
3102            };
3103            // Calling decoder.out_of_line_offset(0) is not allowed.
3104            if len == 0 {
3105                return Ok(());
3106            };
3107            depth.increment()?;
3108            let envelope_size = 8;
3109            let bytes_len = len * envelope_size;
3110            let offset = decoder.out_of_line_offset(bytes_len)?;
3111            // Decode the envelope for each type.
3112            let mut _next_ordinal_to_read = 0;
3113            let mut next_offset = offset;
3114            let end_offset = offset + bytes_len;
3115            _next_ordinal_to_read += 1;
3116            if next_offset >= end_offset {
3117                return Ok(());
3118            }
3119
3120            // Decode unknown envelopes for gaps in ordinals.
3121            while _next_ordinal_to_read < 1 {
3122                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3123                _next_ordinal_to_read += 1;
3124                next_offset += envelope_size;
3125            }
3126
3127            let next_out_of_line = decoder.next_out_of_line();
3128            let handles_before = decoder.remaining_handles();
3129            if let Some((inlined, num_bytes, num_handles)) =
3130                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3131            {
3132                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3133                if inlined != (member_inline_size <= 4) {
3134                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3135                }
3136                let inner_offset;
3137                let mut inner_depth = depth.clone();
3138                if inlined {
3139                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3140                    inner_offset = next_offset;
3141                } else {
3142                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3143                    inner_depth.increment()?;
3144                }
3145                let val_ref = self.address.get_or_insert_with(|| {
3146                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3147                });
3148                fidl::decode!(
3149                    fidl_fuchsia_lowpan__common::MacAddress,
3150                    D,
3151                    val_ref,
3152                    decoder,
3153                    inner_offset,
3154                    inner_depth
3155                )?;
3156                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3157                {
3158                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3159                }
3160                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3161                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3162                }
3163            }
3164
3165            next_offset += envelope_size;
3166            _next_ordinal_to_read += 1;
3167            if next_offset >= end_offset {
3168                return Ok(());
3169            }
3170
3171            // Decode unknown envelopes for gaps in ordinals.
3172            while _next_ordinal_to_read < 2 {
3173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3174                _next_ordinal_to_read += 1;
3175                next_offset += envelope_size;
3176            }
3177
3178            let next_out_of_line = decoder.next_out_of_line();
3179            let handles_before = decoder.remaining_handles();
3180            if let Some((inlined, num_bytes, num_handles)) =
3181                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3182            {
3183                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3184                if inlined != (member_inline_size <= 4) {
3185                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3186                }
3187                let inner_offset;
3188                let mut inner_depth = depth.clone();
3189                if inlined {
3190                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3191                    inner_offset = next_offset;
3192                } else {
3193                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3194                    inner_depth.increment()?;
3195                }
3196                let val_ref = self.identity.get_or_insert_with(|| {
3197                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3198                });
3199                fidl::decode!(
3200                    fidl_fuchsia_lowpan_device__common::Identity,
3201                    D,
3202                    val_ref,
3203                    decoder,
3204                    inner_offset,
3205                    inner_depth
3206                )?;
3207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3208                {
3209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3210                }
3211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3213                }
3214            }
3215
3216            next_offset += envelope_size;
3217            _next_ordinal_to_read += 1;
3218            if next_offset >= end_offset {
3219                return Ok(());
3220            }
3221
3222            // Decode unknown envelopes for gaps in ordinals.
3223            while _next_ordinal_to_read < 3 {
3224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3225                _next_ordinal_to_read += 1;
3226                next_offset += envelope_size;
3227            }
3228
3229            let next_out_of_line = decoder.next_out_of_line();
3230            let handles_before = decoder.remaining_handles();
3231            if let Some((inlined, num_bytes, num_handles)) =
3232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3233            {
3234                let member_inline_size =
3235                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3236                if inlined != (member_inline_size <= 4) {
3237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3238                }
3239                let inner_offset;
3240                let mut inner_depth = depth.clone();
3241                if inlined {
3242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3243                    inner_offset = next_offset;
3244                } else {
3245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3246                    inner_depth.increment()?;
3247                }
3248                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3249                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3250                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3251                {
3252                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3253                }
3254                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3255                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3256                }
3257            }
3258
3259            next_offset += envelope_size;
3260            _next_ordinal_to_read += 1;
3261            if next_offset >= end_offset {
3262                return Ok(());
3263            }
3264
3265            // Decode unknown envelopes for gaps in ordinals.
3266            while _next_ordinal_to_read < 4 {
3267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3268                _next_ordinal_to_read += 1;
3269                next_offset += envelope_size;
3270            }
3271
3272            let next_out_of_line = decoder.next_out_of_line();
3273            let handles_before = decoder.remaining_handles();
3274            if let Some((inlined, num_bytes, num_handles)) =
3275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3276            {
3277                let member_inline_size =
3278                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3279                if inlined != (member_inline_size <= 4) {
3280                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3281                }
3282                let inner_offset;
3283                let mut inner_depth = depth.clone();
3284                if inlined {
3285                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3286                    inner_offset = next_offset;
3287                } else {
3288                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3289                    inner_depth.increment()?;
3290                }
3291                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3292                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3293                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3294                {
3295                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3296                }
3297                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3298                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3299                }
3300            }
3301
3302            next_offset += envelope_size;
3303
3304            // Decode the remaining unknown envelopes.
3305            while next_offset < end_offset {
3306                _next_ordinal_to_read += 1;
3307                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3308                next_offset += envelope_size;
3309            }
3310
3311            Ok(())
3312        }
3313    }
3314
3315    impl BorderRoutingCounters {
3316        #[inline(always)]
3317        fn max_ordinal_present(&self) -> u64 {
3318            if let Some(_) = self.outbound_internet_bytes {
3319                return 18;
3320            }
3321            if let Some(_) = self.outbound_internet_packets {
3322                return 17;
3323            }
3324            if let Some(_) = self.inbound_internet_bytes {
3325                return 16;
3326            }
3327            if let Some(_) = self.inbound_internet_packets {
3328                return 15;
3329            }
3330            if let Some(_) = self.rs_tx_failure {
3331                return 14;
3332            }
3333            if let Some(_) = self.rs_tx_success {
3334                return 13;
3335            }
3336            if let Some(_) = self.rs_rx {
3337                return 12;
3338            }
3339            if let Some(_) = self.ra_tx_failure {
3340                return 11;
3341            }
3342            if let Some(_) = self.ra_tx_success {
3343                return 10;
3344            }
3345            if let Some(_) = self.ra_rx {
3346                return 9;
3347            }
3348            if let Some(_) = self.outbound_multicast_bytes {
3349                return 8;
3350            }
3351            if let Some(_) = self.outbound_multicast_packets {
3352                return 7;
3353            }
3354            if let Some(_) = self.outbound_unicast_bytes {
3355                return 6;
3356            }
3357            if let Some(_) = self.outbound_unicast_packets {
3358                return 5;
3359            }
3360            if let Some(_) = self.inbound_multicast_bytes {
3361                return 4;
3362            }
3363            if let Some(_) = self.inbound_multicast_packets {
3364                return 3;
3365            }
3366            if let Some(_) = self.inbound_unicast_bytes {
3367                return 2;
3368            }
3369            if let Some(_) = self.inbound_unicast_packets {
3370                return 1;
3371            }
3372            0
3373        }
3374    }
3375
3376    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
3377        type Borrowed<'a> = &'a Self;
3378        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3379            value
3380        }
3381    }
3382
3383    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
3384        type Owned = Self;
3385
3386        #[inline(always)]
3387        fn inline_align(_context: fidl::encoding::Context) -> usize {
3388            8
3389        }
3390
3391        #[inline(always)]
3392        fn inline_size(_context: fidl::encoding::Context) -> usize {
3393            16
3394        }
3395    }
3396
3397    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
3398        for &BorderRoutingCounters
3399    {
3400        unsafe fn encode(
3401            self,
3402            encoder: &mut fidl::encoding::Encoder<'_, D>,
3403            offset: usize,
3404            mut depth: fidl::encoding::Depth,
3405        ) -> fidl::Result<()> {
3406            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
3407            // Vector header
3408            let max_ordinal: u64 = self.max_ordinal_present();
3409            encoder.write_num(max_ordinal, offset);
3410            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3411            // Calling encoder.out_of_line_offset(0) is not allowed.
3412            if max_ordinal == 0 {
3413                return Ok(());
3414            }
3415            depth.increment()?;
3416            let envelope_size = 8;
3417            let bytes_len = max_ordinal as usize * envelope_size;
3418            #[allow(unused_variables)]
3419            let offset = encoder.out_of_line_offset(bytes_len);
3420            let mut _prev_end_offset: usize = 0;
3421            if 1 > max_ordinal {
3422                return Ok(());
3423            }
3424
3425            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3426            // are envelope_size bytes.
3427            let cur_offset: usize = (1 - 1) * envelope_size;
3428
3429            // Zero reserved fields.
3430            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3431
3432            // Safety:
3433            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3434            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3435            //   envelope_size bytes, there is always sufficient room.
3436            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3437                self.inbound_unicast_packets
3438                    .as_ref()
3439                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3440                encoder,
3441                offset + cur_offset,
3442                depth,
3443            )?;
3444
3445            _prev_end_offset = cur_offset + envelope_size;
3446            if 2 > max_ordinal {
3447                return Ok(());
3448            }
3449
3450            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3451            // are envelope_size bytes.
3452            let cur_offset: usize = (2 - 1) * envelope_size;
3453
3454            // Zero reserved fields.
3455            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3456
3457            // Safety:
3458            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3459            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3460            //   envelope_size bytes, there is always sufficient room.
3461            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3462                self.inbound_unicast_bytes
3463                    .as_ref()
3464                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3465                encoder,
3466                offset + cur_offset,
3467                depth,
3468            )?;
3469
3470            _prev_end_offset = cur_offset + envelope_size;
3471            if 3 > max_ordinal {
3472                return Ok(());
3473            }
3474
3475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3476            // are envelope_size bytes.
3477            let cur_offset: usize = (3 - 1) * envelope_size;
3478
3479            // Zero reserved fields.
3480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3481
3482            // Safety:
3483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3485            //   envelope_size bytes, there is always sufficient room.
3486            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3487                self.inbound_multicast_packets
3488                    .as_ref()
3489                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3490                encoder,
3491                offset + cur_offset,
3492                depth,
3493            )?;
3494
3495            _prev_end_offset = cur_offset + envelope_size;
3496            if 4 > max_ordinal {
3497                return Ok(());
3498            }
3499
3500            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3501            // are envelope_size bytes.
3502            let cur_offset: usize = (4 - 1) * envelope_size;
3503
3504            // Zero reserved fields.
3505            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3506
3507            // Safety:
3508            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3509            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3510            //   envelope_size bytes, there is always sufficient room.
3511            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3512                self.inbound_multicast_bytes
3513                    .as_ref()
3514                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3515                encoder,
3516                offset + cur_offset,
3517                depth,
3518            )?;
3519
3520            _prev_end_offset = cur_offset + envelope_size;
3521            if 5 > max_ordinal {
3522                return Ok(());
3523            }
3524
3525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3526            // are envelope_size bytes.
3527            let cur_offset: usize = (5 - 1) * envelope_size;
3528
3529            // Zero reserved fields.
3530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3531
3532            // Safety:
3533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3535            //   envelope_size bytes, there is always sufficient room.
3536            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3537                self.outbound_unicast_packets
3538                    .as_ref()
3539                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3540                encoder,
3541                offset + cur_offset,
3542                depth,
3543            )?;
3544
3545            _prev_end_offset = cur_offset + envelope_size;
3546            if 6 > max_ordinal {
3547                return Ok(());
3548            }
3549
3550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3551            // are envelope_size bytes.
3552            let cur_offset: usize = (6 - 1) * envelope_size;
3553
3554            // Zero reserved fields.
3555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3556
3557            // Safety:
3558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3560            //   envelope_size bytes, there is always sufficient room.
3561            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3562                self.outbound_unicast_bytes
3563                    .as_ref()
3564                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3565                encoder,
3566                offset + cur_offset,
3567                depth,
3568            )?;
3569
3570            _prev_end_offset = cur_offset + envelope_size;
3571            if 7 > max_ordinal {
3572                return Ok(());
3573            }
3574
3575            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3576            // are envelope_size bytes.
3577            let cur_offset: usize = (7 - 1) * envelope_size;
3578
3579            // Zero reserved fields.
3580            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3581
3582            // Safety:
3583            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3584            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3585            //   envelope_size bytes, there is always sufficient room.
3586            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3587                self.outbound_multicast_packets
3588                    .as_ref()
3589                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3590                encoder,
3591                offset + cur_offset,
3592                depth,
3593            )?;
3594
3595            _prev_end_offset = cur_offset + envelope_size;
3596            if 8 > max_ordinal {
3597                return Ok(());
3598            }
3599
3600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3601            // are envelope_size bytes.
3602            let cur_offset: usize = (8 - 1) * envelope_size;
3603
3604            // Zero reserved fields.
3605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3606
3607            // Safety:
3608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3610            //   envelope_size bytes, there is always sufficient room.
3611            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3612                self.outbound_multicast_bytes
3613                    .as_ref()
3614                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3615                encoder,
3616                offset + cur_offset,
3617                depth,
3618            )?;
3619
3620            _prev_end_offset = cur_offset + envelope_size;
3621            if 9 > max_ordinal {
3622                return Ok(());
3623            }
3624
3625            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3626            // are envelope_size bytes.
3627            let cur_offset: usize = (9 - 1) * envelope_size;
3628
3629            // Zero reserved fields.
3630            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3631
3632            // Safety:
3633            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3634            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3635            //   envelope_size bytes, there is always sufficient room.
3636            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3637                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3638                encoder,
3639                offset + cur_offset,
3640                depth,
3641            )?;
3642
3643            _prev_end_offset = cur_offset + envelope_size;
3644            if 10 > max_ordinal {
3645                return Ok(());
3646            }
3647
3648            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3649            // are envelope_size bytes.
3650            let cur_offset: usize = (10 - 1) * envelope_size;
3651
3652            // Zero reserved fields.
3653            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3654
3655            // Safety:
3656            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3657            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3658            //   envelope_size bytes, there is always sufficient room.
3659            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3660                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3661                encoder,
3662                offset + cur_offset,
3663                depth,
3664            )?;
3665
3666            _prev_end_offset = cur_offset + envelope_size;
3667            if 11 > max_ordinal {
3668                return Ok(());
3669            }
3670
3671            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3672            // are envelope_size bytes.
3673            let cur_offset: usize = (11 - 1) * envelope_size;
3674
3675            // Zero reserved fields.
3676            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3677
3678            // Safety:
3679            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3680            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3681            //   envelope_size bytes, there is always sufficient room.
3682            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3683                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3684                encoder,
3685                offset + cur_offset,
3686                depth,
3687            )?;
3688
3689            _prev_end_offset = cur_offset + envelope_size;
3690            if 12 > max_ordinal {
3691                return Ok(());
3692            }
3693
3694            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3695            // are envelope_size bytes.
3696            let cur_offset: usize = (12 - 1) * envelope_size;
3697
3698            // Zero reserved fields.
3699            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3700
3701            // Safety:
3702            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3703            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3704            //   envelope_size bytes, there is always sufficient room.
3705            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3706                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3707                encoder,
3708                offset + cur_offset,
3709                depth,
3710            )?;
3711
3712            _prev_end_offset = cur_offset + envelope_size;
3713            if 13 > max_ordinal {
3714                return Ok(());
3715            }
3716
3717            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3718            // are envelope_size bytes.
3719            let cur_offset: usize = (13 - 1) * envelope_size;
3720
3721            // Zero reserved fields.
3722            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3723
3724            // Safety:
3725            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3726            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3727            //   envelope_size bytes, there is always sufficient room.
3728            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3729                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3730                encoder,
3731                offset + cur_offset,
3732                depth,
3733            )?;
3734
3735            _prev_end_offset = cur_offset + envelope_size;
3736            if 14 > max_ordinal {
3737                return Ok(());
3738            }
3739
3740            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3741            // are envelope_size bytes.
3742            let cur_offset: usize = (14 - 1) * envelope_size;
3743
3744            // Zero reserved fields.
3745            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3746
3747            // Safety:
3748            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3749            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3750            //   envelope_size bytes, there is always sufficient room.
3751            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3752                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3753                encoder,
3754                offset + cur_offset,
3755                depth,
3756            )?;
3757
3758            _prev_end_offset = cur_offset + envelope_size;
3759            if 15 > max_ordinal {
3760                return Ok(());
3761            }
3762
3763            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3764            // are envelope_size bytes.
3765            let cur_offset: usize = (15 - 1) * envelope_size;
3766
3767            // Zero reserved fields.
3768            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3769
3770            // Safety:
3771            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3772            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3773            //   envelope_size bytes, there is always sufficient room.
3774            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3775                self.inbound_internet_packets
3776                    .as_ref()
3777                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3778                encoder,
3779                offset + cur_offset,
3780                depth,
3781            )?;
3782
3783            _prev_end_offset = cur_offset + envelope_size;
3784            if 16 > max_ordinal {
3785                return Ok(());
3786            }
3787
3788            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3789            // are envelope_size bytes.
3790            let cur_offset: usize = (16 - 1) * envelope_size;
3791
3792            // Zero reserved fields.
3793            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3794
3795            // Safety:
3796            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3797            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3798            //   envelope_size bytes, there is always sufficient room.
3799            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3800                self.inbound_internet_bytes
3801                    .as_ref()
3802                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3803                encoder,
3804                offset + cur_offset,
3805                depth,
3806            )?;
3807
3808            _prev_end_offset = cur_offset + envelope_size;
3809            if 17 > max_ordinal {
3810                return Ok(());
3811            }
3812
3813            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3814            // are envelope_size bytes.
3815            let cur_offset: usize = (17 - 1) * envelope_size;
3816
3817            // Zero reserved fields.
3818            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3819
3820            // Safety:
3821            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3822            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3823            //   envelope_size bytes, there is always sufficient room.
3824            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3825                self.outbound_internet_packets
3826                    .as_ref()
3827                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3828                encoder,
3829                offset + cur_offset,
3830                depth,
3831            )?;
3832
3833            _prev_end_offset = cur_offset + envelope_size;
3834            if 18 > max_ordinal {
3835                return Ok(());
3836            }
3837
3838            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3839            // are envelope_size bytes.
3840            let cur_offset: usize = (18 - 1) * envelope_size;
3841
3842            // Zero reserved fields.
3843            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3844
3845            // Safety:
3846            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3847            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3848            //   envelope_size bytes, there is always sufficient room.
3849            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3850                self.outbound_internet_bytes
3851                    .as_ref()
3852                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3853                encoder,
3854                offset + cur_offset,
3855                depth,
3856            )?;
3857
3858            _prev_end_offset = cur_offset + envelope_size;
3859
3860            Ok(())
3861        }
3862    }
3863
3864    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
3865        #[inline(always)]
3866        fn new_empty() -> Self {
3867            Self::default()
3868        }
3869
3870        unsafe fn decode(
3871            &mut self,
3872            decoder: &mut fidl::encoding::Decoder<'_, D>,
3873            offset: usize,
3874            mut depth: fidl::encoding::Depth,
3875        ) -> fidl::Result<()> {
3876            decoder.debug_check_bounds::<Self>(offset);
3877            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3878                None => return Err(fidl::Error::NotNullable),
3879                Some(len) => len,
3880            };
3881            // Calling decoder.out_of_line_offset(0) is not allowed.
3882            if len == 0 {
3883                return Ok(());
3884            };
3885            depth.increment()?;
3886            let envelope_size = 8;
3887            let bytes_len = len * envelope_size;
3888            let offset = decoder.out_of_line_offset(bytes_len)?;
3889            // Decode the envelope for each type.
3890            let mut _next_ordinal_to_read = 0;
3891            let mut next_offset = offset;
3892            let end_offset = offset + bytes_len;
3893            _next_ordinal_to_read += 1;
3894            if next_offset >= end_offset {
3895                return Ok(());
3896            }
3897
3898            // Decode unknown envelopes for gaps in ordinals.
3899            while _next_ordinal_to_read < 1 {
3900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3901                _next_ordinal_to_read += 1;
3902                next_offset += envelope_size;
3903            }
3904
3905            let next_out_of_line = decoder.next_out_of_line();
3906            let handles_before = decoder.remaining_handles();
3907            if let Some((inlined, num_bytes, num_handles)) =
3908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3909            {
3910                let member_inline_size =
3911                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3912                if inlined != (member_inline_size <= 4) {
3913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3914                }
3915                let inner_offset;
3916                let mut inner_depth = depth.clone();
3917                if inlined {
3918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3919                    inner_offset = next_offset;
3920                } else {
3921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3922                    inner_depth.increment()?;
3923                }
3924                let val_ref =
3925                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
3926                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3928                {
3929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3930                }
3931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3933                }
3934            }
3935
3936            next_offset += envelope_size;
3937            _next_ordinal_to_read += 1;
3938            if next_offset >= end_offset {
3939                return Ok(());
3940            }
3941
3942            // Decode unknown envelopes for gaps in ordinals.
3943            while _next_ordinal_to_read < 2 {
3944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3945                _next_ordinal_to_read += 1;
3946                next_offset += envelope_size;
3947            }
3948
3949            let next_out_of_line = decoder.next_out_of_line();
3950            let handles_before = decoder.remaining_handles();
3951            if let Some((inlined, num_bytes, num_handles)) =
3952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3953            {
3954                let member_inline_size =
3955                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3956                if inlined != (member_inline_size <= 4) {
3957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3958                }
3959                let inner_offset;
3960                let mut inner_depth = depth.clone();
3961                if inlined {
3962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3963                    inner_offset = next_offset;
3964                } else {
3965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3966                    inner_depth.increment()?;
3967                }
3968                let val_ref =
3969                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
3970                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3971                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3972                {
3973                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3974                }
3975                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3976                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3977                }
3978            }
3979
3980            next_offset += envelope_size;
3981            _next_ordinal_to_read += 1;
3982            if next_offset >= end_offset {
3983                return Ok(());
3984            }
3985
3986            // Decode unknown envelopes for gaps in ordinals.
3987            while _next_ordinal_to_read < 3 {
3988                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3989                _next_ordinal_to_read += 1;
3990                next_offset += envelope_size;
3991            }
3992
3993            let next_out_of_line = decoder.next_out_of_line();
3994            let handles_before = decoder.remaining_handles();
3995            if let Some((inlined, num_bytes, num_handles)) =
3996                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3997            {
3998                let member_inline_size =
3999                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4000                if inlined != (member_inline_size <= 4) {
4001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4002                }
4003                let inner_offset;
4004                let mut inner_depth = depth.clone();
4005                if inlined {
4006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4007                    inner_offset = next_offset;
4008                } else {
4009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4010                    inner_depth.increment()?;
4011                }
4012                let val_ref =
4013                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4014                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4015                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4016                {
4017                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4018                }
4019                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4020                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4021                }
4022            }
4023
4024            next_offset += envelope_size;
4025            _next_ordinal_to_read += 1;
4026            if next_offset >= end_offset {
4027                return Ok(());
4028            }
4029
4030            // Decode unknown envelopes for gaps in ordinals.
4031            while _next_ordinal_to_read < 4 {
4032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4033                _next_ordinal_to_read += 1;
4034                next_offset += envelope_size;
4035            }
4036
4037            let next_out_of_line = decoder.next_out_of_line();
4038            let handles_before = decoder.remaining_handles();
4039            if let Some((inlined, num_bytes, num_handles)) =
4040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4041            {
4042                let member_inline_size =
4043                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4044                if inlined != (member_inline_size <= 4) {
4045                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4046                }
4047                let inner_offset;
4048                let mut inner_depth = depth.clone();
4049                if inlined {
4050                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4051                    inner_offset = next_offset;
4052                } else {
4053                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4054                    inner_depth.increment()?;
4055                }
4056                let val_ref =
4057                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4058                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4059                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4060                {
4061                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4062                }
4063                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4064                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4065                }
4066            }
4067
4068            next_offset += envelope_size;
4069            _next_ordinal_to_read += 1;
4070            if next_offset >= end_offset {
4071                return Ok(());
4072            }
4073
4074            // Decode unknown envelopes for gaps in ordinals.
4075            while _next_ordinal_to_read < 5 {
4076                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4077                _next_ordinal_to_read += 1;
4078                next_offset += envelope_size;
4079            }
4080
4081            let next_out_of_line = decoder.next_out_of_line();
4082            let handles_before = decoder.remaining_handles();
4083            if let Some((inlined, num_bytes, num_handles)) =
4084                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4085            {
4086                let member_inline_size =
4087                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4088                if inlined != (member_inline_size <= 4) {
4089                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4090                }
4091                let inner_offset;
4092                let mut inner_depth = depth.clone();
4093                if inlined {
4094                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4095                    inner_offset = next_offset;
4096                } else {
4097                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4098                    inner_depth.increment()?;
4099                }
4100                let val_ref =
4101                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4102                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4103                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4104                {
4105                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4106                }
4107                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4108                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4109                }
4110            }
4111
4112            next_offset += envelope_size;
4113            _next_ordinal_to_read += 1;
4114            if next_offset >= end_offset {
4115                return Ok(());
4116            }
4117
4118            // Decode unknown envelopes for gaps in ordinals.
4119            while _next_ordinal_to_read < 6 {
4120                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4121                _next_ordinal_to_read += 1;
4122                next_offset += envelope_size;
4123            }
4124
4125            let next_out_of_line = decoder.next_out_of_line();
4126            let handles_before = decoder.remaining_handles();
4127            if let Some((inlined, num_bytes, num_handles)) =
4128                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4129            {
4130                let member_inline_size =
4131                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4132                if inlined != (member_inline_size <= 4) {
4133                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4134                }
4135                let inner_offset;
4136                let mut inner_depth = depth.clone();
4137                if inlined {
4138                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4139                    inner_offset = next_offset;
4140                } else {
4141                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4142                    inner_depth.increment()?;
4143                }
4144                let val_ref =
4145                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4146                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4147                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4148                {
4149                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4150                }
4151                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4152                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4153                }
4154            }
4155
4156            next_offset += envelope_size;
4157            _next_ordinal_to_read += 1;
4158            if next_offset >= end_offset {
4159                return Ok(());
4160            }
4161
4162            // Decode unknown envelopes for gaps in ordinals.
4163            while _next_ordinal_to_read < 7 {
4164                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4165                _next_ordinal_to_read += 1;
4166                next_offset += envelope_size;
4167            }
4168
4169            let next_out_of_line = decoder.next_out_of_line();
4170            let handles_before = decoder.remaining_handles();
4171            if let Some((inlined, num_bytes, num_handles)) =
4172                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4173            {
4174                let member_inline_size =
4175                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4176                if inlined != (member_inline_size <= 4) {
4177                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4178                }
4179                let inner_offset;
4180                let mut inner_depth = depth.clone();
4181                if inlined {
4182                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4183                    inner_offset = next_offset;
4184                } else {
4185                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4186                    inner_depth.increment()?;
4187                }
4188                let val_ref =
4189                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4190                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4191                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4192                {
4193                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4194                }
4195                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4196                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4197                }
4198            }
4199
4200            next_offset += envelope_size;
4201            _next_ordinal_to_read += 1;
4202            if next_offset >= end_offset {
4203                return Ok(());
4204            }
4205
4206            // Decode unknown envelopes for gaps in ordinals.
4207            while _next_ordinal_to_read < 8 {
4208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4209                _next_ordinal_to_read += 1;
4210                next_offset += envelope_size;
4211            }
4212
4213            let next_out_of_line = decoder.next_out_of_line();
4214            let handles_before = decoder.remaining_handles();
4215            if let Some((inlined, num_bytes, num_handles)) =
4216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4217            {
4218                let member_inline_size =
4219                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4220                if inlined != (member_inline_size <= 4) {
4221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4222                }
4223                let inner_offset;
4224                let mut inner_depth = depth.clone();
4225                if inlined {
4226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4227                    inner_offset = next_offset;
4228                } else {
4229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4230                    inner_depth.increment()?;
4231                }
4232                let val_ref =
4233                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4234                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4236                {
4237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4238                }
4239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4241                }
4242            }
4243
4244            next_offset += envelope_size;
4245            _next_ordinal_to_read += 1;
4246            if next_offset >= end_offset {
4247                return Ok(());
4248            }
4249
4250            // Decode unknown envelopes for gaps in ordinals.
4251            while _next_ordinal_to_read < 9 {
4252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4253                _next_ordinal_to_read += 1;
4254                next_offset += envelope_size;
4255            }
4256
4257            let next_out_of_line = decoder.next_out_of_line();
4258            let handles_before = decoder.remaining_handles();
4259            if let Some((inlined, num_bytes, num_handles)) =
4260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4261            {
4262                let member_inline_size =
4263                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4264                if inlined != (member_inline_size <= 4) {
4265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4266                }
4267                let inner_offset;
4268                let mut inner_depth = depth.clone();
4269                if inlined {
4270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4271                    inner_offset = next_offset;
4272                } else {
4273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4274                    inner_depth.increment()?;
4275                }
4276                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4277                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4278                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4279                {
4280                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4281                }
4282                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4283                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4284                }
4285            }
4286
4287            next_offset += envelope_size;
4288            _next_ordinal_to_read += 1;
4289            if next_offset >= end_offset {
4290                return Ok(());
4291            }
4292
4293            // Decode unknown envelopes for gaps in ordinals.
4294            while _next_ordinal_to_read < 10 {
4295                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4296                _next_ordinal_to_read += 1;
4297                next_offset += envelope_size;
4298            }
4299
4300            let next_out_of_line = decoder.next_out_of_line();
4301            let handles_before = decoder.remaining_handles();
4302            if let Some((inlined, num_bytes, num_handles)) =
4303                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4304            {
4305                let member_inline_size =
4306                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4307                if inlined != (member_inline_size <= 4) {
4308                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4309                }
4310                let inner_offset;
4311                let mut inner_depth = depth.clone();
4312                if inlined {
4313                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4314                    inner_offset = next_offset;
4315                } else {
4316                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4317                    inner_depth.increment()?;
4318                }
4319                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4320                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4321                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4322                {
4323                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4324                }
4325                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4326                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4327                }
4328            }
4329
4330            next_offset += envelope_size;
4331            _next_ordinal_to_read += 1;
4332            if next_offset >= end_offset {
4333                return Ok(());
4334            }
4335
4336            // Decode unknown envelopes for gaps in ordinals.
4337            while _next_ordinal_to_read < 11 {
4338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4339                _next_ordinal_to_read += 1;
4340                next_offset += envelope_size;
4341            }
4342
4343            let next_out_of_line = decoder.next_out_of_line();
4344            let handles_before = decoder.remaining_handles();
4345            if let Some((inlined, num_bytes, num_handles)) =
4346                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4347            {
4348                let member_inline_size =
4349                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4350                if inlined != (member_inline_size <= 4) {
4351                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4352                }
4353                let inner_offset;
4354                let mut inner_depth = depth.clone();
4355                if inlined {
4356                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4357                    inner_offset = next_offset;
4358                } else {
4359                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4360                    inner_depth.increment()?;
4361                }
4362                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4363                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4365                {
4366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4367                }
4368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4370                }
4371            }
4372
4373            next_offset += envelope_size;
4374            _next_ordinal_to_read += 1;
4375            if next_offset >= end_offset {
4376                return Ok(());
4377            }
4378
4379            // Decode unknown envelopes for gaps in ordinals.
4380            while _next_ordinal_to_read < 12 {
4381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4382                _next_ordinal_to_read += 1;
4383                next_offset += envelope_size;
4384            }
4385
4386            let next_out_of_line = decoder.next_out_of_line();
4387            let handles_before = decoder.remaining_handles();
4388            if let Some((inlined, num_bytes, num_handles)) =
4389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4390            {
4391                let member_inline_size =
4392                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4393                if inlined != (member_inline_size <= 4) {
4394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4395                }
4396                let inner_offset;
4397                let mut inner_depth = depth.clone();
4398                if inlined {
4399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4400                    inner_offset = next_offset;
4401                } else {
4402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4403                    inner_depth.increment()?;
4404                }
4405                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4406                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4407                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4408                {
4409                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4410                }
4411                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4412                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4413                }
4414            }
4415
4416            next_offset += envelope_size;
4417            _next_ordinal_to_read += 1;
4418            if next_offset >= end_offset {
4419                return Ok(());
4420            }
4421
4422            // Decode unknown envelopes for gaps in ordinals.
4423            while _next_ordinal_to_read < 13 {
4424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4425                _next_ordinal_to_read += 1;
4426                next_offset += envelope_size;
4427            }
4428
4429            let next_out_of_line = decoder.next_out_of_line();
4430            let handles_before = decoder.remaining_handles();
4431            if let Some((inlined, num_bytes, num_handles)) =
4432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4433            {
4434                let member_inline_size =
4435                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4436                if inlined != (member_inline_size <= 4) {
4437                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4438                }
4439                let inner_offset;
4440                let mut inner_depth = depth.clone();
4441                if inlined {
4442                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4443                    inner_offset = next_offset;
4444                } else {
4445                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4446                    inner_depth.increment()?;
4447                }
4448                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4449                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4450                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4451                {
4452                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4453                }
4454                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4455                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4456                }
4457            }
4458
4459            next_offset += envelope_size;
4460            _next_ordinal_to_read += 1;
4461            if next_offset >= end_offset {
4462                return Ok(());
4463            }
4464
4465            // Decode unknown envelopes for gaps in ordinals.
4466            while _next_ordinal_to_read < 14 {
4467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4468                _next_ordinal_to_read += 1;
4469                next_offset += envelope_size;
4470            }
4471
4472            let next_out_of_line = decoder.next_out_of_line();
4473            let handles_before = decoder.remaining_handles();
4474            if let Some((inlined, num_bytes, num_handles)) =
4475                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4476            {
4477                let member_inline_size =
4478                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4479                if inlined != (member_inline_size <= 4) {
4480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4481                }
4482                let inner_offset;
4483                let mut inner_depth = depth.clone();
4484                if inlined {
4485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4486                    inner_offset = next_offset;
4487                } else {
4488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4489                    inner_depth.increment()?;
4490                }
4491                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4492                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4494                {
4495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4496                }
4497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4499                }
4500            }
4501
4502            next_offset += envelope_size;
4503            _next_ordinal_to_read += 1;
4504            if next_offset >= end_offset {
4505                return Ok(());
4506            }
4507
4508            // Decode unknown envelopes for gaps in ordinals.
4509            while _next_ordinal_to_read < 15 {
4510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4511                _next_ordinal_to_read += 1;
4512                next_offset += envelope_size;
4513            }
4514
4515            let next_out_of_line = decoder.next_out_of_line();
4516            let handles_before = decoder.remaining_handles();
4517            if let Some((inlined, num_bytes, num_handles)) =
4518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4519            {
4520                let member_inline_size =
4521                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4522                if inlined != (member_inline_size <= 4) {
4523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4524                }
4525                let inner_offset;
4526                let mut inner_depth = depth.clone();
4527                if inlined {
4528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4529                    inner_offset = next_offset;
4530                } else {
4531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4532                    inner_depth.increment()?;
4533                }
4534                let val_ref =
4535                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4536                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4538                {
4539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4540                }
4541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4543                }
4544            }
4545
4546            next_offset += envelope_size;
4547            _next_ordinal_to_read += 1;
4548            if next_offset >= end_offset {
4549                return Ok(());
4550            }
4551
4552            // Decode unknown envelopes for gaps in ordinals.
4553            while _next_ordinal_to_read < 16 {
4554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4555                _next_ordinal_to_read += 1;
4556                next_offset += envelope_size;
4557            }
4558
4559            let next_out_of_line = decoder.next_out_of_line();
4560            let handles_before = decoder.remaining_handles();
4561            if let Some((inlined, num_bytes, num_handles)) =
4562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4563            {
4564                let member_inline_size =
4565                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4566                if inlined != (member_inline_size <= 4) {
4567                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4568                }
4569                let inner_offset;
4570                let mut inner_depth = depth.clone();
4571                if inlined {
4572                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4573                    inner_offset = next_offset;
4574                } else {
4575                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4576                    inner_depth.increment()?;
4577                }
4578                let val_ref =
4579                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4580                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4582                {
4583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4584                }
4585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4587                }
4588            }
4589
4590            next_offset += envelope_size;
4591            _next_ordinal_to_read += 1;
4592            if next_offset >= end_offset {
4593                return Ok(());
4594            }
4595
4596            // Decode unknown envelopes for gaps in ordinals.
4597            while _next_ordinal_to_read < 17 {
4598                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4599                _next_ordinal_to_read += 1;
4600                next_offset += envelope_size;
4601            }
4602
4603            let next_out_of_line = decoder.next_out_of_line();
4604            let handles_before = decoder.remaining_handles();
4605            if let Some((inlined, num_bytes, num_handles)) =
4606                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4607            {
4608                let member_inline_size =
4609                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4610                if inlined != (member_inline_size <= 4) {
4611                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4612                }
4613                let inner_offset;
4614                let mut inner_depth = depth.clone();
4615                if inlined {
4616                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4617                    inner_offset = next_offset;
4618                } else {
4619                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4620                    inner_depth.increment()?;
4621                }
4622                let val_ref =
4623                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4624                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4626                {
4627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4628                }
4629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4631                }
4632            }
4633
4634            next_offset += envelope_size;
4635            _next_ordinal_to_read += 1;
4636            if next_offset >= end_offset {
4637                return Ok(());
4638            }
4639
4640            // Decode unknown envelopes for gaps in ordinals.
4641            while _next_ordinal_to_read < 18 {
4642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4643                _next_ordinal_to_read += 1;
4644                next_offset += envelope_size;
4645            }
4646
4647            let next_out_of_line = decoder.next_out_of_line();
4648            let handles_before = decoder.remaining_handles();
4649            if let Some((inlined, num_bytes, num_handles)) =
4650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4651            {
4652                let member_inline_size =
4653                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4654                if inlined != (member_inline_size <= 4) {
4655                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4656                }
4657                let inner_offset;
4658                let mut inner_depth = depth.clone();
4659                if inlined {
4660                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4661                    inner_offset = next_offset;
4662                } else {
4663                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4664                    inner_depth.increment()?;
4665                }
4666                let val_ref =
4667                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4668                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4669                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4670                {
4671                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4672                }
4673                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4674                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4675                }
4676            }
4677
4678            next_offset += envelope_size;
4679
4680            // Decode the remaining unknown envelopes.
4681            while next_offset < end_offset {
4682                _next_ordinal_to_read += 1;
4683                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4684                next_offset += envelope_size;
4685            }
4686
4687            Ok(())
4688        }
4689    }
4690
4691    impl BorderRoutingNat64State {
4692        #[inline(always)]
4693        fn max_ordinal_present(&self) -> u64 {
4694            if let Some(_) = self.translator_state {
4695                return 2;
4696            }
4697            if let Some(_) = self.prefix_manager_state {
4698                return 1;
4699            }
4700            0
4701        }
4702    }
4703
4704    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
4705        type Borrowed<'a> = &'a Self;
4706        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4707            value
4708        }
4709    }
4710
4711    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
4712        type Owned = Self;
4713
4714        #[inline(always)]
4715        fn inline_align(_context: fidl::encoding::Context) -> usize {
4716            8
4717        }
4718
4719        #[inline(always)]
4720        fn inline_size(_context: fidl::encoding::Context) -> usize {
4721            16
4722        }
4723    }
4724
4725    unsafe impl<D: fidl::encoding::ResourceDialect>
4726        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
4727    {
4728        unsafe fn encode(
4729            self,
4730            encoder: &mut fidl::encoding::Encoder<'_, D>,
4731            offset: usize,
4732            mut depth: fidl::encoding::Depth,
4733        ) -> fidl::Result<()> {
4734            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
4735            // Vector header
4736            let max_ordinal: u64 = self.max_ordinal_present();
4737            encoder.write_num(max_ordinal, offset);
4738            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4739            // Calling encoder.out_of_line_offset(0) is not allowed.
4740            if max_ordinal == 0 {
4741                return Ok(());
4742            }
4743            depth.increment()?;
4744            let envelope_size = 8;
4745            let bytes_len = max_ordinal as usize * envelope_size;
4746            #[allow(unused_variables)]
4747            let offset = encoder.out_of_line_offset(bytes_len);
4748            let mut _prev_end_offset: usize = 0;
4749            if 1 > max_ordinal {
4750                return Ok(());
4751            }
4752
4753            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4754            // are envelope_size bytes.
4755            let cur_offset: usize = (1 - 1) * envelope_size;
4756
4757            // Zero reserved fields.
4758            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4759
4760            // Safety:
4761            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4762            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4763            //   envelope_size bytes, there is always sufficient room.
4764            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4765                self.prefix_manager_state
4766                    .as_ref()
4767                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4768                encoder,
4769                offset + cur_offset,
4770                depth,
4771            )?;
4772
4773            _prev_end_offset = cur_offset + envelope_size;
4774            if 2 > max_ordinal {
4775                return Ok(());
4776            }
4777
4778            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4779            // are envelope_size bytes.
4780            let cur_offset: usize = (2 - 1) * envelope_size;
4781
4782            // Zero reserved fields.
4783            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4784
4785            // Safety:
4786            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4787            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4788            //   envelope_size bytes, there is always sufficient room.
4789            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4790                self.translator_state
4791                    .as_ref()
4792                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4793                encoder,
4794                offset + cur_offset,
4795                depth,
4796            )?;
4797
4798            _prev_end_offset = cur_offset + envelope_size;
4799
4800            Ok(())
4801        }
4802    }
4803
4804    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4805        for BorderRoutingNat64State
4806    {
4807        #[inline(always)]
4808        fn new_empty() -> Self {
4809            Self::default()
4810        }
4811
4812        unsafe fn decode(
4813            &mut self,
4814            decoder: &mut fidl::encoding::Decoder<'_, D>,
4815            offset: usize,
4816            mut depth: fidl::encoding::Depth,
4817        ) -> fidl::Result<()> {
4818            decoder.debug_check_bounds::<Self>(offset);
4819            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4820                None => return Err(fidl::Error::NotNullable),
4821                Some(len) => len,
4822            };
4823            // Calling decoder.out_of_line_offset(0) is not allowed.
4824            if len == 0 {
4825                return Ok(());
4826            };
4827            depth.increment()?;
4828            let envelope_size = 8;
4829            let bytes_len = len * envelope_size;
4830            let offset = decoder.out_of_line_offset(bytes_len)?;
4831            // Decode the envelope for each type.
4832            let mut _next_ordinal_to_read = 0;
4833            let mut next_offset = offset;
4834            let end_offset = offset + bytes_len;
4835            _next_ordinal_to_read += 1;
4836            if next_offset >= end_offset {
4837                return Ok(());
4838            }
4839
4840            // Decode unknown envelopes for gaps in ordinals.
4841            while _next_ordinal_to_read < 1 {
4842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4843                _next_ordinal_to_read += 1;
4844                next_offset += envelope_size;
4845            }
4846
4847            let next_out_of_line = decoder.next_out_of_line();
4848            let handles_before = decoder.remaining_handles();
4849            if let Some((inlined, num_bytes, num_handles)) =
4850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4851            {
4852                let member_inline_size =
4853                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4854                if inlined != (member_inline_size <= 4) {
4855                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4856                }
4857                let inner_offset;
4858                let mut inner_depth = depth.clone();
4859                if inlined {
4860                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4861                    inner_offset = next_offset;
4862                } else {
4863                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4864                    inner_depth.increment()?;
4865                }
4866                let val_ref = self
4867                    .prefix_manager_state
4868                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4869                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4871                {
4872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4873                }
4874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4876                }
4877            }
4878
4879            next_offset += envelope_size;
4880            _next_ordinal_to_read += 1;
4881            if next_offset >= end_offset {
4882                return Ok(());
4883            }
4884
4885            // Decode unknown envelopes for gaps in ordinals.
4886            while _next_ordinal_to_read < 2 {
4887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4888                _next_ordinal_to_read += 1;
4889                next_offset += envelope_size;
4890            }
4891
4892            let next_out_of_line = decoder.next_out_of_line();
4893            let handles_before = decoder.remaining_handles();
4894            if let Some((inlined, num_bytes, num_handles)) =
4895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4896            {
4897                let member_inline_size =
4898                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4899                if inlined != (member_inline_size <= 4) {
4900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4901                }
4902                let inner_offset;
4903                let mut inner_depth = depth.clone();
4904                if inlined {
4905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4906                    inner_offset = next_offset;
4907                } else {
4908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4909                    inner_depth.increment()?;
4910                }
4911                let val_ref =
4912                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4913                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4915                {
4916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4917                }
4918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4920                }
4921            }
4922
4923            next_offset += envelope_size;
4924
4925            // Decode the remaining unknown envelopes.
4926            while next_offset < end_offset {
4927                _next_ordinal_to_read += 1;
4928                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4929                next_offset += envelope_size;
4930            }
4931
4932            Ok(())
4933        }
4934    }
4935
4936    impl ChannelInfo {
4937        #[inline(always)]
4938        fn max_ordinal_present(&self) -> u64 {
4939            if let Some(_) = self.masked_by_regulatory_domain {
4940                return 6;
4941            }
4942            if let Some(_) = self.spectrum_bandwidth_hz {
4943                return 5;
4944            }
4945            if let Some(_) = self.spectrum_center_frequency_hz {
4946                return 4;
4947            }
4948            if let Some(_) = self.max_transmit_power_dbm {
4949                return 3;
4950            }
4951            if let Some(_) = self.id {
4952                return 2;
4953            }
4954            if let Some(_) = self.index {
4955                return 1;
4956            }
4957            0
4958        }
4959    }
4960
4961    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
4962        type Borrowed<'a> = &'a Self;
4963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4964            value
4965        }
4966    }
4967
4968    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
4969        type Owned = Self;
4970
4971        #[inline(always)]
4972        fn inline_align(_context: fidl::encoding::Context) -> usize {
4973            8
4974        }
4975
4976        #[inline(always)]
4977        fn inline_size(_context: fidl::encoding::Context) -> usize {
4978            16
4979        }
4980    }
4981
4982    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
4983        for &ChannelInfo
4984    {
4985        unsafe fn encode(
4986            self,
4987            encoder: &mut fidl::encoding::Encoder<'_, D>,
4988            offset: usize,
4989            mut depth: fidl::encoding::Depth,
4990        ) -> fidl::Result<()> {
4991            encoder.debug_check_bounds::<ChannelInfo>(offset);
4992            // Vector header
4993            let max_ordinal: u64 = self.max_ordinal_present();
4994            encoder.write_num(max_ordinal, offset);
4995            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4996            // Calling encoder.out_of_line_offset(0) is not allowed.
4997            if max_ordinal == 0 {
4998                return Ok(());
4999            }
5000            depth.increment()?;
5001            let envelope_size = 8;
5002            let bytes_len = max_ordinal as usize * envelope_size;
5003            #[allow(unused_variables)]
5004            let offset = encoder.out_of_line_offset(bytes_len);
5005            let mut _prev_end_offset: usize = 0;
5006            if 1 > max_ordinal {
5007                return Ok(());
5008            }
5009
5010            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5011            // are envelope_size bytes.
5012            let cur_offset: usize = (1 - 1) * envelope_size;
5013
5014            // Zero reserved fields.
5015            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5016
5017            // Safety:
5018            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5019            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5020            //   envelope_size bytes, there is always sufficient room.
5021            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5022                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5023                encoder,
5024                offset + cur_offset,
5025                depth,
5026            )?;
5027
5028            _prev_end_offset = cur_offset + envelope_size;
5029            if 2 > max_ordinal {
5030                return Ok(());
5031            }
5032
5033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5034            // are envelope_size bytes.
5035            let cur_offset: usize = (2 - 1) * envelope_size;
5036
5037            // Zero reserved fields.
5038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5039
5040            // Safety:
5041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5043            //   envelope_size bytes, there is always sufficient room.
5044            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
5045                self.id.as_ref().map(
5046                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
5047                ),
5048                encoder,
5049                offset + cur_offset,
5050                depth,
5051            )?;
5052
5053            _prev_end_offset = cur_offset + envelope_size;
5054            if 3 > max_ordinal {
5055                return Ok(());
5056            }
5057
5058            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5059            // are envelope_size bytes.
5060            let cur_offset: usize = (3 - 1) * envelope_size;
5061
5062            // Zero reserved fields.
5063            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5064
5065            // Safety:
5066            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5067            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5068            //   envelope_size bytes, there is always sufficient room.
5069            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5070                self.max_transmit_power_dbm
5071                    .as_ref()
5072                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5073                encoder,
5074                offset + cur_offset,
5075                depth,
5076            )?;
5077
5078            _prev_end_offset = cur_offset + envelope_size;
5079            if 4 > max_ordinal {
5080                return Ok(());
5081            }
5082
5083            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5084            // are envelope_size bytes.
5085            let cur_offset: usize = (4 - 1) * envelope_size;
5086
5087            // Zero reserved fields.
5088            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5089
5090            // Safety:
5091            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5092            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5093            //   envelope_size bytes, there is always sufficient room.
5094            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5095                self.spectrum_center_frequency_hz
5096                    .as_ref()
5097                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5098                encoder,
5099                offset + cur_offset,
5100                depth,
5101            )?;
5102
5103            _prev_end_offset = cur_offset + envelope_size;
5104            if 5 > max_ordinal {
5105                return Ok(());
5106            }
5107
5108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5109            // are envelope_size bytes.
5110            let cur_offset: usize = (5 - 1) * envelope_size;
5111
5112            // Zero reserved fields.
5113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5114
5115            // Safety:
5116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5118            //   envelope_size bytes, there is always sufficient room.
5119            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5120                self.spectrum_bandwidth_hz
5121                    .as_ref()
5122                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5123                encoder,
5124                offset + cur_offset,
5125                depth,
5126            )?;
5127
5128            _prev_end_offset = cur_offset + envelope_size;
5129            if 6 > max_ordinal {
5130                return Ok(());
5131            }
5132
5133            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5134            // are envelope_size bytes.
5135            let cur_offset: usize = (6 - 1) * envelope_size;
5136
5137            // Zero reserved fields.
5138            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5139
5140            // Safety:
5141            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5142            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5143            //   envelope_size bytes, there is always sufficient room.
5144            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5145                self.masked_by_regulatory_domain
5146                    .as_ref()
5147                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5148                encoder,
5149                offset + cur_offset,
5150                depth,
5151            )?;
5152
5153            _prev_end_offset = cur_offset + envelope_size;
5154
5155            Ok(())
5156        }
5157    }
5158
5159    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
5160        #[inline(always)]
5161        fn new_empty() -> Self {
5162            Self::default()
5163        }
5164
5165        unsafe fn decode(
5166            &mut self,
5167            decoder: &mut fidl::encoding::Decoder<'_, D>,
5168            offset: usize,
5169            mut depth: fidl::encoding::Depth,
5170        ) -> fidl::Result<()> {
5171            decoder.debug_check_bounds::<Self>(offset);
5172            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5173                None => return Err(fidl::Error::NotNullable),
5174                Some(len) => len,
5175            };
5176            // Calling decoder.out_of_line_offset(0) is not allowed.
5177            if len == 0 {
5178                return Ok(());
5179            };
5180            depth.increment()?;
5181            let envelope_size = 8;
5182            let bytes_len = len * envelope_size;
5183            let offset = decoder.out_of_line_offset(bytes_len)?;
5184            // Decode the envelope for each type.
5185            let mut _next_ordinal_to_read = 0;
5186            let mut next_offset = offset;
5187            let end_offset = offset + bytes_len;
5188            _next_ordinal_to_read += 1;
5189            if next_offset >= end_offset {
5190                return Ok(());
5191            }
5192
5193            // Decode unknown envelopes for gaps in ordinals.
5194            while _next_ordinal_to_read < 1 {
5195                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5196                _next_ordinal_to_read += 1;
5197                next_offset += envelope_size;
5198            }
5199
5200            let next_out_of_line = decoder.next_out_of_line();
5201            let handles_before = decoder.remaining_handles();
5202            if let Some((inlined, num_bytes, num_handles)) =
5203                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5204            {
5205                let member_inline_size =
5206                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5207                if inlined != (member_inline_size <= 4) {
5208                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5209                }
5210                let inner_offset;
5211                let mut inner_depth = depth.clone();
5212                if inlined {
5213                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5214                    inner_offset = next_offset;
5215                } else {
5216                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5217                    inner_depth.increment()?;
5218                }
5219                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
5220                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5221                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5222                {
5223                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5224                }
5225                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5226                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5227                }
5228            }
5229
5230            next_offset += envelope_size;
5231            _next_ordinal_to_read += 1;
5232            if next_offset >= end_offset {
5233                return Ok(());
5234            }
5235
5236            // Decode unknown envelopes for gaps in ordinals.
5237            while _next_ordinal_to_read < 2 {
5238                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5239                _next_ordinal_to_read += 1;
5240                next_offset += envelope_size;
5241            }
5242
5243            let next_out_of_line = decoder.next_out_of_line();
5244            let handles_before = decoder.remaining_handles();
5245            if let Some((inlined, num_bytes, num_handles)) =
5246                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5247            {
5248                let member_inline_size =
5249                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
5250                        decoder.context,
5251                    );
5252                if inlined != (member_inline_size <= 4) {
5253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5254                }
5255                let inner_offset;
5256                let mut inner_depth = depth.clone();
5257                if inlined {
5258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5259                    inner_offset = next_offset;
5260                } else {
5261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5262                    inner_depth.increment()?;
5263                }
5264                let val_ref = self
5265                    .id
5266                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
5267                fidl::decode!(
5268                    fidl::encoding::BoundedString<16>,
5269                    D,
5270                    val_ref,
5271                    decoder,
5272                    inner_offset,
5273                    inner_depth
5274                )?;
5275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5276                {
5277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5278                }
5279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5281                }
5282            }
5283
5284            next_offset += envelope_size;
5285            _next_ordinal_to_read += 1;
5286            if next_offset >= end_offset {
5287                return Ok(());
5288            }
5289
5290            // Decode unknown envelopes for gaps in ordinals.
5291            while _next_ordinal_to_read < 3 {
5292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5293                _next_ordinal_to_read += 1;
5294                next_offset += envelope_size;
5295            }
5296
5297            let next_out_of_line = decoder.next_out_of_line();
5298            let handles_before = decoder.remaining_handles();
5299            if let Some((inlined, num_bytes, num_handles)) =
5300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5301            {
5302                let member_inline_size =
5303                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5304                if inlined != (member_inline_size <= 4) {
5305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5306                }
5307                let inner_offset;
5308                let mut inner_depth = depth.clone();
5309                if inlined {
5310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5311                    inner_offset = next_offset;
5312                } else {
5313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5314                    inner_depth.increment()?;
5315                }
5316                let val_ref =
5317                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
5318                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5319                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5320                {
5321                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5322                }
5323                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5324                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5325                }
5326            }
5327
5328            next_offset += envelope_size;
5329            _next_ordinal_to_read += 1;
5330            if next_offset >= end_offset {
5331                return Ok(());
5332            }
5333
5334            // Decode unknown envelopes for gaps in ordinals.
5335            while _next_ordinal_to_read < 4 {
5336                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5337                _next_ordinal_to_read += 1;
5338                next_offset += envelope_size;
5339            }
5340
5341            let next_out_of_line = decoder.next_out_of_line();
5342            let handles_before = decoder.remaining_handles();
5343            if let Some((inlined, num_bytes, num_handles)) =
5344                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5345            {
5346                let member_inline_size =
5347                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5348                if inlined != (member_inline_size <= 4) {
5349                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5350                }
5351                let inner_offset;
5352                let mut inner_depth = depth.clone();
5353                if inlined {
5354                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5355                    inner_offset = next_offset;
5356                } else {
5357                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5358                    inner_depth.increment()?;
5359                }
5360                let val_ref = self
5361                    .spectrum_center_frequency_hz
5362                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
5363                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5365                {
5366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5367                }
5368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5370                }
5371            }
5372
5373            next_offset += envelope_size;
5374            _next_ordinal_to_read += 1;
5375            if next_offset >= end_offset {
5376                return Ok(());
5377            }
5378
5379            // Decode unknown envelopes for gaps in ordinals.
5380            while _next_ordinal_to_read < 5 {
5381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5382                _next_ordinal_to_read += 1;
5383                next_offset += envelope_size;
5384            }
5385
5386            let next_out_of_line = decoder.next_out_of_line();
5387            let handles_before = decoder.remaining_handles();
5388            if let Some((inlined, num_bytes, num_handles)) =
5389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5390            {
5391                let member_inline_size =
5392                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5393                if inlined != (member_inline_size <= 4) {
5394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5395                }
5396                let inner_offset;
5397                let mut inner_depth = depth.clone();
5398                if inlined {
5399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5400                    inner_offset = next_offset;
5401                } else {
5402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5403                    inner_depth.increment()?;
5404                }
5405                let val_ref =
5406                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
5407                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5408                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5409                {
5410                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5411                }
5412                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5413                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5414                }
5415            }
5416
5417            next_offset += envelope_size;
5418            _next_ordinal_to_read += 1;
5419            if next_offset >= end_offset {
5420                return Ok(());
5421            }
5422
5423            // Decode unknown envelopes for gaps in ordinals.
5424            while _next_ordinal_to_read < 6 {
5425                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5426                _next_ordinal_to_read += 1;
5427                next_offset += envelope_size;
5428            }
5429
5430            let next_out_of_line = decoder.next_out_of_line();
5431            let handles_before = decoder.remaining_handles();
5432            if let Some((inlined, num_bytes, num_handles)) =
5433                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5434            {
5435                let member_inline_size =
5436                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5437                if inlined != (member_inline_size <= 4) {
5438                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5439                }
5440                let inner_offset;
5441                let mut inner_depth = depth.clone();
5442                if inlined {
5443                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5444                    inner_offset = next_offset;
5445                } else {
5446                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5447                    inner_depth.increment()?;
5448                }
5449                let val_ref = self
5450                    .masked_by_regulatory_domain
5451                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
5452                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5453                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5454                {
5455                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5456                }
5457                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5458                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5459                }
5460            }
5461
5462            next_offset += envelope_size;
5463
5464            // Decode the remaining unknown envelopes.
5465            while next_offset < end_offset {
5466                _next_ordinal_to_read += 1;
5467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5468                next_offset += envelope_size;
5469            }
5470
5471            Ok(())
5472        }
5473    }
5474
5475    impl Dhcp6PdInfo {
5476        #[inline(always)]
5477        fn max_ordinal_present(&self) -> u64 {
5478            if let Some(_) = self.hashed_pd_prefix {
5479                return 3;
5480            }
5481            if let Some(_) = self.pd_processed_ra_info {
5482                return 2;
5483            }
5484            if let Some(_) = self.dhcp6pd_state {
5485                return 1;
5486            }
5487            0
5488        }
5489    }
5490
5491    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
5492        type Borrowed<'a> = &'a Self;
5493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5494            value
5495        }
5496    }
5497
5498    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
5499        type Owned = Self;
5500
5501        #[inline(always)]
5502        fn inline_align(_context: fidl::encoding::Context) -> usize {
5503            8
5504        }
5505
5506        #[inline(always)]
5507        fn inline_size(_context: fidl::encoding::Context) -> usize {
5508            16
5509        }
5510    }
5511
5512    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
5513        for &Dhcp6PdInfo
5514    {
5515        unsafe fn encode(
5516            self,
5517            encoder: &mut fidl::encoding::Encoder<'_, D>,
5518            offset: usize,
5519            mut depth: fidl::encoding::Depth,
5520        ) -> fidl::Result<()> {
5521            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
5522            // Vector header
5523            let max_ordinal: u64 = self.max_ordinal_present();
5524            encoder.write_num(max_ordinal, offset);
5525            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5526            // Calling encoder.out_of_line_offset(0) is not allowed.
5527            if max_ordinal == 0 {
5528                return Ok(());
5529            }
5530            depth.increment()?;
5531            let envelope_size = 8;
5532            let bytes_len = max_ordinal as usize * envelope_size;
5533            #[allow(unused_variables)]
5534            let offset = encoder.out_of_line_offset(bytes_len);
5535            let mut _prev_end_offset: usize = 0;
5536            if 1 > max_ordinal {
5537                return Ok(());
5538            }
5539
5540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5541            // are envelope_size bytes.
5542            let cur_offset: usize = (1 - 1) * envelope_size;
5543
5544            // Zero reserved fields.
5545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5546
5547            // Safety:
5548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5550            //   envelope_size bytes, there is always sufficient room.
5551            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
5552                self.dhcp6pd_state
5553                    .as_ref()
5554                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
5555                encoder,
5556                offset + cur_offset,
5557                depth,
5558            )?;
5559
5560            _prev_end_offset = cur_offset + envelope_size;
5561            if 2 > max_ordinal {
5562                return Ok(());
5563            }
5564
5565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5566            // are envelope_size bytes.
5567            let cur_offset: usize = (2 - 1) * envelope_size;
5568
5569            // Zero reserved fields.
5570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5571
5572            // Safety:
5573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5575            //   envelope_size bytes, there is always sufficient room.
5576            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
5577                self.pd_processed_ra_info
5578                    .as_ref()
5579                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
5580                encoder,
5581                offset + cur_offset,
5582                depth,
5583            )?;
5584
5585            _prev_end_offset = cur_offset + envelope_size;
5586            if 3 > max_ordinal {
5587                return Ok(());
5588            }
5589
5590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5591            // are envelope_size bytes.
5592            let cur_offset: usize = (3 - 1) * envelope_size;
5593
5594            // Zero reserved fields.
5595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5596
5597            // Safety:
5598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5600            //   envelope_size bytes, there is always sufficient room.
5601            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
5602                self.hashed_pd_prefix.as_ref().map(
5603                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
5604                ),
5605                encoder,
5606                offset + cur_offset,
5607                depth,
5608            )?;
5609
5610            _prev_end_offset = cur_offset + envelope_size;
5611
5612            Ok(())
5613        }
5614    }
5615
5616    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
5617        #[inline(always)]
5618        fn new_empty() -> Self {
5619            Self::default()
5620        }
5621
5622        unsafe fn decode(
5623            &mut self,
5624            decoder: &mut fidl::encoding::Decoder<'_, D>,
5625            offset: usize,
5626            mut depth: fidl::encoding::Depth,
5627        ) -> fidl::Result<()> {
5628            decoder.debug_check_bounds::<Self>(offset);
5629            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5630                None => return Err(fidl::Error::NotNullable),
5631                Some(len) => len,
5632            };
5633            // Calling decoder.out_of_line_offset(0) is not allowed.
5634            if len == 0 {
5635                return Ok(());
5636            };
5637            depth.increment()?;
5638            let envelope_size = 8;
5639            let bytes_len = len * envelope_size;
5640            let offset = decoder.out_of_line_offset(bytes_len)?;
5641            // Decode the envelope for each type.
5642            let mut _next_ordinal_to_read = 0;
5643            let mut next_offset = offset;
5644            let end_offset = offset + bytes_len;
5645            _next_ordinal_to_read += 1;
5646            if next_offset >= end_offset {
5647                return Ok(());
5648            }
5649
5650            // Decode unknown envelopes for gaps in ordinals.
5651            while _next_ordinal_to_read < 1 {
5652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5653                _next_ordinal_to_read += 1;
5654                next_offset += envelope_size;
5655            }
5656
5657            let next_out_of_line = decoder.next_out_of_line();
5658            let handles_before = decoder.remaining_handles();
5659            if let Some((inlined, num_bytes, num_handles)) =
5660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5661            {
5662                let member_inline_size =
5663                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5664                if inlined != (member_inline_size <= 4) {
5665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5666                }
5667                let inner_offset;
5668                let mut inner_depth = depth.clone();
5669                if inlined {
5670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5671                    inner_offset = next_offset;
5672                } else {
5673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5674                    inner_depth.increment()?;
5675                }
5676                let val_ref =
5677                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
5678                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
5679                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5680                {
5681                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5682                }
5683                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5684                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5685                }
5686            }
5687
5688            next_offset += envelope_size;
5689            _next_ordinal_to_read += 1;
5690            if next_offset >= end_offset {
5691                return Ok(());
5692            }
5693
5694            // Decode unknown envelopes for gaps in ordinals.
5695            while _next_ordinal_to_read < 2 {
5696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5697                _next_ordinal_to_read += 1;
5698                next_offset += envelope_size;
5699            }
5700
5701            let next_out_of_line = decoder.next_out_of_line();
5702            let handles_before = decoder.remaining_handles();
5703            if let Some((inlined, num_bytes, num_handles)) =
5704                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5705            {
5706                let member_inline_size =
5707                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5708                if inlined != (member_inline_size <= 4) {
5709                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5710                }
5711                let inner_offset;
5712                let mut inner_depth = depth.clone();
5713                if inlined {
5714                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5715                    inner_offset = next_offset;
5716                } else {
5717                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5718                    inner_depth.increment()?;
5719                }
5720                let val_ref = self
5721                    .pd_processed_ra_info
5722                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
5723                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
5724                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5725                {
5726                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5727                }
5728                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5729                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5730                }
5731            }
5732
5733            next_offset += envelope_size;
5734            _next_ordinal_to_read += 1;
5735            if next_offset >= end_offset {
5736                return Ok(());
5737            }
5738
5739            // Decode unknown envelopes for gaps in ordinals.
5740            while _next_ordinal_to_read < 3 {
5741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5742                _next_ordinal_to_read += 1;
5743                next_offset += envelope_size;
5744            }
5745
5746            let next_out_of_line = decoder.next_out_of_line();
5747            let handles_before = decoder.remaining_handles();
5748            if let Some((inlined, num_bytes, num_handles)) =
5749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5750            {
5751                let member_inline_size =
5752                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
5753                        decoder.context,
5754                    );
5755                if inlined != (member_inline_size <= 4) {
5756                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5757                }
5758                let inner_offset;
5759                let mut inner_depth = depth.clone();
5760                if inlined {
5761                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5762                    inner_offset = next_offset;
5763                } else {
5764                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5765                    inner_depth.increment()?;
5766                }
5767                let val_ref = self
5768                    .hashed_pd_prefix
5769                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
5770                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
5771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5772                {
5773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5774                }
5775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5777                }
5778            }
5779
5780            next_offset += envelope_size;
5781
5782            // Decode the remaining unknown envelopes.
5783            while next_offset < end_offset {
5784                _next_ordinal_to_read += 1;
5785                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5786                next_offset += envelope_size;
5787            }
5788
5789            Ok(())
5790        }
5791    }
5792
5793    impl DnssdCounters {
5794        #[inline(always)]
5795        fn max_ordinal_present(&self) -> u64 {
5796            if let Some(_) = self.upstream_dns_counters {
5797                return 8;
5798            }
5799            if let Some(_) = self.resolved_by_srp {
5800                return 7;
5801            }
5802            if let Some(_) = self.other_response {
5803                return 6;
5804            }
5805            if let Some(_) = self.not_implemented_response {
5806                return 5;
5807            }
5808            if let Some(_) = self.name_error_response {
5809                return 4;
5810            }
5811            if let Some(_) = self.format_error_response {
5812                return 3;
5813            }
5814            if let Some(_) = self.server_failure_response {
5815                return 2;
5816            }
5817            if let Some(_) = self.success_response {
5818                return 1;
5819            }
5820            0
5821        }
5822    }
5823
5824    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
5825        type Borrowed<'a> = &'a Self;
5826        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5827            value
5828        }
5829    }
5830
5831    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
5832        type Owned = Self;
5833
5834        #[inline(always)]
5835        fn inline_align(_context: fidl::encoding::Context) -> usize {
5836            8
5837        }
5838
5839        #[inline(always)]
5840        fn inline_size(_context: fidl::encoding::Context) -> usize {
5841            16
5842        }
5843    }
5844
5845    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
5846        for &DnssdCounters
5847    {
5848        unsafe fn encode(
5849            self,
5850            encoder: &mut fidl::encoding::Encoder<'_, D>,
5851            offset: usize,
5852            mut depth: fidl::encoding::Depth,
5853        ) -> fidl::Result<()> {
5854            encoder.debug_check_bounds::<DnssdCounters>(offset);
5855            // Vector header
5856            let max_ordinal: u64 = self.max_ordinal_present();
5857            encoder.write_num(max_ordinal, offset);
5858            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5859            // Calling encoder.out_of_line_offset(0) is not allowed.
5860            if max_ordinal == 0 {
5861                return Ok(());
5862            }
5863            depth.increment()?;
5864            let envelope_size = 8;
5865            let bytes_len = max_ordinal as usize * envelope_size;
5866            #[allow(unused_variables)]
5867            let offset = encoder.out_of_line_offset(bytes_len);
5868            let mut _prev_end_offset: usize = 0;
5869            if 1 > max_ordinal {
5870                return Ok(());
5871            }
5872
5873            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5874            // are envelope_size bytes.
5875            let cur_offset: usize = (1 - 1) * envelope_size;
5876
5877            // Zero reserved fields.
5878            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5879
5880            // Safety:
5881            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5882            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5883            //   envelope_size bytes, there is always sufficient room.
5884            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5885                self.success_response
5886                    .as_ref()
5887                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5888                encoder,
5889                offset + cur_offset,
5890                depth,
5891            )?;
5892
5893            _prev_end_offset = cur_offset + envelope_size;
5894            if 2 > max_ordinal {
5895                return Ok(());
5896            }
5897
5898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5899            // are envelope_size bytes.
5900            let cur_offset: usize = (2 - 1) * envelope_size;
5901
5902            // Zero reserved fields.
5903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5904
5905            // Safety:
5906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5908            //   envelope_size bytes, there is always sufficient room.
5909            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5910                self.server_failure_response
5911                    .as_ref()
5912                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5913                encoder,
5914                offset + cur_offset,
5915                depth,
5916            )?;
5917
5918            _prev_end_offset = cur_offset + envelope_size;
5919            if 3 > max_ordinal {
5920                return Ok(());
5921            }
5922
5923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5924            // are envelope_size bytes.
5925            let cur_offset: usize = (3 - 1) * envelope_size;
5926
5927            // Zero reserved fields.
5928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5929
5930            // Safety:
5931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5933            //   envelope_size bytes, there is always sufficient room.
5934            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5935                self.format_error_response
5936                    .as_ref()
5937                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5938                encoder,
5939                offset + cur_offset,
5940                depth,
5941            )?;
5942
5943            _prev_end_offset = cur_offset + envelope_size;
5944            if 4 > max_ordinal {
5945                return Ok(());
5946            }
5947
5948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5949            // are envelope_size bytes.
5950            let cur_offset: usize = (4 - 1) * envelope_size;
5951
5952            // Zero reserved fields.
5953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5954
5955            // Safety:
5956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5958            //   envelope_size bytes, there is always sufficient room.
5959            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5960                self.name_error_response
5961                    .as_ref()
5962                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5963                encoder,
5964                offset + cur_offset,
5965                depth,
5966            )?;
5967
5968            _prev_end_offset = cur_offset + envelope_size;
5969            if 5 > max_ordinal {
5970                return Ok(());
5971            }
5972
5973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5974            // are envelope_size bytes.
5975            let cur_offset: usize = (5 - 1) * envelope_size;
5976
5977            // Zero reserved fields.
5978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5979
5980            // Safety:
5981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5983            //   envelope_size bytes, there is always sufficient room.
5984            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5985                self.not_implemented_response
5986                    .as_ref()
5987                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5988                encoder,
5989                offset + cur_offset,
5990                depth,
5991            )?;
5992
5993            _prev_end_offset = cur_offset + envelope_size;
5994            if 6 > max_ordinal {
5995                return Ok(());
5996            }
5997
5998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5999            // are envelope_size bytes.
6000            let cur_offset: usize = (6 - 1) * envelope_size;
6001
6002            // Zero reserved fields.
6003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6004
6005            // Safety:
6006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6008            //   envelope_size bytes, there is always sufficient room.
6009            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6010                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6011                encoder,
6012                offset + cur_offset,
6013                depth,
6014            )?;
6015
6016            _prev_end_offset = cur_offset + envelope_size;
6017            if 7 > max_ordinal {
6018                return Ok(());
6019            }
6020
6021            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6022            // are envelope_size bytes.
6023            let cur_offset: usize = (7 - 1) * envelope_size;
6024
6025            // Zero reserved fields.
6026            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6027
6028            // Safety:
6029            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6030            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6031            //   envelope_size bytes, there is always sufficient room.
6032            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6033                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6034                encoder,
6035                offset + cur_offset,
6036                depth,
6037            )?;
6038
6039            _prev_end_offset = cur_offset + envelope_size;
6040            if 8 > max_ordinal {
6041                return Ok(());
6042            }
6043
6044            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6045            // are envelope_size bytes.
6046            let cur_offset: usize = (8 - 1) * envelope_size;
6047
6048            // Zero reserved fields.
6049            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6050
6051            // Safety:
6052            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6053            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6054            //   envelope_size bytes, there is always sufficient room.
6055            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
6056                self.upstream_dns_counters
6057                    .as_ref()
6058                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
6059                encoder,
6060                offset + cur_offset,
6061                depth,
6062            )?;
6063
6064            _prev_end_offset = cur_offset + envelope_size;
6065
6066            Ok(())
6067        }
6068    }
6069
6070    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
6071        #[inline(always)]
6072        fn new_empty() -> Self {
6073            Self::default()
6074        }
6075
6076        unsafe fn decode(
6077            &mut self,
6078            decoder: &mut fidl::encoding::Decoder<'_, D>,
6079            offset: usize,
6080            mut depth: fidl::encoding::Depth,
6081        ) -> fidl::Result<()> {
6082            decoder.debug_check_bounds::<Self>(offset);
6083            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6084                None => return Err(fidl::Error::NotNullable),
6085                Some(len) => len,
6086            };
6087            // Calling decoder.out_of_line_offset(0) is not allowed.
6088            if len == 0 {
6089                return Ok(());
6090            };
6091            depth.increment()?;
6092            let envelope_size = 8;
6093            let bytes_len = len * envelope_size;
6094            let offset = decoder.out_of_line_offset(bytes_len)?;
6095            // Decode the envelope for each type.
6096            let mut _next_ordinal_to_read = 0;
6097            let mut next_offset = offset;
6098            let end_offset = offset + bytes_len;
6099            _next_ordinal_to_read += 1;
6100            if next_offset >= end_offset {
6101                return Ok(());
6102            }
6103
6104            // Decode unknown envelopes for gaps in ordinals.
6105            while _next_ordinal_to_read < 1 {
6106                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6107                _next_ordinal_to_read += 1;
6108                next_offset += envelope_size;
6109            }
6110
6111            let next_out_of_line = decoder.next_out_of_line();
6112            let handles_before = decoder.remaining_handles();
6113            if let Some((inlined, num_bytes, num_handles)) =
6114                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6115            {
6116                let member_inline_size =
6117                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6118                if inlined != (member_inline_size <= 4) {
6119                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6120                }
6121                let inner_offset;
6122                let mut inner_depth = depth.clone();
6123                if inlined {
6124                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6125                    inner_offset = next_offset;
6126                } else {
6127                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6128                    inner_depth.increment()?;
6129                }
6130                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6131                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6133                {
6134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6135                }
6136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6138                }
6139            }
6140
6141            next_offset += envelope_size;
6142            _next_ordinal_to_read += 1;
6143            if next_offset >= end_offset {
6144                return Ok(());
6145            }
6146
6147            // Decode unknown envelopes for gaps in ordinals.
6148            while _next_ordinal_to_read < 2 {
6149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6150                _next_ordinal_to_read += 1;
6151                next_offset += envelope_size;
6152            }
6153
6154            let next_out_of_line = decoder.next_out_of_line();
6155            let handles_before = decoder.remaining_handles();
6156            if let Some((inlined, num_bytes, num_handles)) =
6157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6158            {
6159                let member_inline_size =
6160                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6161                if inlined != (member_inline_size <= 4) {
6162                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6163                }
6164                let inner_offset;
6165                let mut inner_depth = depth.clone();
6166                if inlined {
6167                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6168                    inner_offset = next_offset;
6169                } else {
6170                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6171                    inner_depth.increment()?;
6172                }
6173                let val_ref =
6174                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6175                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6177                {
6178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6179                }
6180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6182                }
6183            }
6184
6185            next_offset += envelope_size;
6186            _next_ordinal_to_read += 1;
6187            if next_offset >= end_offset {
6188                return Ok(());
6189            }
6190
6191            // Decode unknown envelopes for gaps in ordinals.
6192            while _next_ordinal_to_read < 3 {
6193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6194                _next_ordinal_to_read += 1;
6195                next_offset += envelope_size;
6196            }
6197
6198            let next_out_of_line = decoder.next_out_of_line();
6199            let handles_before = decoder.remaining_handles();
6200            if let Some((inlined, num_bytes, num_handles)) =
6201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6202            {
6203                let member_inline_size =
6204                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6205                if inlined != (member_inline_size <= 4) {
6206                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6207                }
6208                let inner_offset;
6209                let mut inner_depth = depth.clone();
6210                if inlined {
6211                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6212                    inner_offset = next_offset;
6213                } else {
6214                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6215                    inner_depth.increment()?;
6216                }
6217                let val_ref =
6218                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6219                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6221                {
6222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6223                }
6224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6226                }
6227            }
6228
6229            next_offset += envelope_size;
6230            _next_ordinal_to_read += 1;
6231            if next_offset >= end_offset {
6232                return Ok(());
6233            }
6234
6235            // Decode unknown envelopes for gaps in ordinals.
6236            while _next_ordinal_to_read < 4 {
6237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6238                _next_ordinal_to_read += 1;
6239                next_offset += envelope_size;
6240            }
6241
6242            let next_out_of_line = decoder.next_out_of_line();
6243            let handles_before = decoder.remaining_handles();
6244            if let Some((inlined, num_bytes, num_handles)) =
6245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6246            {
6247                let member_inline_size =
6248                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6249                if inlined != (member_inline_size <= 4) {
6250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6251                }
6252                let inner_offset;
6253                let mut inner_depth = depth.clone();
6254                if inlined {
6255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6256                    inner_offset = next_offset;
6257                } else {
6258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6259                    inner_depth.increment()?;
6260                }
6261                let val_ref =
6262                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6263                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6265                {
6266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6267                }
6268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6270                }
6271            }
6272
6273            next_offset += envelope_size;
6274            _next_ordinal_to_read += 1;
6275            if next_offset >= end_offset {
6276                return Ok(());
6277            }
6278
6279            // Decode unknown envelopes for gaps in ordinals.
6280            while _next_ordinal_to_read < 5 {
6281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6282                _next_ordinal_to_read += 1;
6283                next_offset += envelope_size;
6284            }
6285
6286            let next_out_of_line = decoder.next_out_of_line();
6287            let handles_before = decoder.remaining_handles();
6288            if let Some((inlined, num_bytes, num_handles)) =
6289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6290            {
6291                let member_inline_size =
6292                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6293                if inlined != (member_inline_size <= 4) {
6294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6295                }
6296                let inner_offset;
6297                let mut inner_depth = depth.clone();
6298                if inlined {
6299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6300                    inner_offset = next_offset;
6301                } else {
6302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6303                    inner_depth.increment()?;
6304                }
6305                let val_ref =
6306                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6307                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6309                {
6310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6311                }
6312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6314                }
6315            }
6316
6317            next_offset += envelope_size;
6318            _next_ordinal_to_read += 1;
6319            if next_offset >= end_offset {
6320                return Ok(());
6321            }
6322
6323            // Decode unknown envelopes for gaps in ordinals.
6324            while _next_ordinal_to_read < 6 {
6325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6326                _next_ordinal_to_read += 1;
6327                next_offset += envelope_size;
6328            }
6329
6330            let next_out_of_line = decoder.next_out_of_line();
6331            let handles_before = decoder.remaining_handles();
6332            if let Some((inlined, num_bytes, num_handles)) =
6333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6334            {
6335                let member_inline_size =
6336                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6337                if inlined != (member_inline_size <= 4) {
6338                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6339                }
6340                let inner_offset;
6341                let mut inner_depth = depth.clone();
6342                if inlined {
6343                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6344                    inner_offset = next_offset;
6345                } else {
6346                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6347                    inner_depth.increment()?;
6348                }
6349                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6350                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6351                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6352                {
6353                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6354                }
6355                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6356                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6357                }
6358            }
6359
6360            next_offset += envelope_size;
6361            _next_ordinal_to_read += 1;
6362            if next_offset >= end_offset {
6363                return Ok(());
6364            }
6365
6366            // Decode unknown envelopes for gaps in ordinals.
6367            while _next_ordinal_to_read < 7 {
6368                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6369                _next_ordinal_to_read += 1;
6370                next_offset += envelope_size;
6371            }
6372
6373            let next_out_of_line = decoder.next_out_of_line();
6374            let handles_before = decoder.remaining_handles();
6375            if let Some((inlined, num_bytes, num_handles)) =
6376                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6377            {
6378                let member_inline_size =
6379                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6380                if inlined != (member_inline_size <= 4) {
6381                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6382                }
6383                let inner_offset;
6384                let mut inner_depth = depth.clone();
6385                if inlined {
6386                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6387                    inner_offset = next_offset;
6388                } else {
6389                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6390                    inner_depth.increment()?;
6391                }
6392                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
6393                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6394                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6395                {
6396                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6397                }
6398                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6399                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6400                }
6401            }
6402
6403            next_offset += envelope_size;
6404            _next_ordinal_to_read += 1;
6405            if next_offset >= end_offset {
6406                return Ok(());
6407            }
6408
6409            // Decode unknown envelopes for gaps in ordinals.
6410            while _next_ordinal_to_read < 8 {
6411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6412                _next_ordinal_to_read += 1;
6413                next_offset += envelope_size;
6414            }
6415
6416            let next_out_of_line = decoder.next_out_of_line();
6417            let handles_before = decoder.remaining_handles();
6418            if let Some((inlined, num_bytes, num_handles)) =
6419                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6420            {
6421                let member_inline_size =
6422                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
6423                        decoder.context,
6424                    );
6425                if inlined != (member_inline_size <= 4) {
6426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6427                }
6428                let inner_offset;
6429                let mut inner_depth = depth.clone();
6430                if inlined {
6431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6432                    inner_offset = next_offset;
6433                } else {
6434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6435                    inner_depth.increment()?;
6436                }
6437                let val_ref = self
6438                    .upstream_dns_counters
6439                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
6440                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
6441                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6442                {
6443                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6444                }
6445                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6446                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6447                }
6448            }
6449
6450            next_offset += envelope_size;
6451
6452            // Decode the remaining unknown envelopes.
6453            while next_offset < end_offset {
6454                _next_ordinal_to_read += 1;
6455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6456                next_offset += envelope_size;
6457            }
6458
6459            Ok(())
6460        }
6461    }
6462
6463    impl ExternalRoute {
6464        #[inline(always)]
6465        fn max_ordinal_present(&self) -> u64 {
6466            if let Some(_) = self.stable {
6467                return 3;
6468            }
6469            if let Some(_) = self.route_preference {
6470                return 2;
6471            }
6472            if let Some(_) = self.subnet {
6473                return 1;
6474            }
6475            0
6476        }
6477    }
6478
6479    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
6480        type Borrowed<'a> = &'a Self;
6481        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6482            value
6483        }
6484    }
6485
6486    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
6487        type Owned = Self;
6488
6489        #[inline(always)]
6490        fn inline_align(_context: fidl::encoding::Context) -> usize {
6491            8
6492        }
6493
6494        #[inline(always)]
6495        fn inline_size(_context: fidl::encoding::Context) -> usize {
6496            16
6497        }
6498    }
6499
6500    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
6501        for &ExternalRoute
6502    {
6503        unsafe fn encode(
6504            self,
6505            encoder: &mut fidl::encoding::Encoder<'_, D>,
6506            offset: usize,
6507            mut depth: fidl::encoding::Depth,
6508        ) -> fidl::Result<()> {
6509            encoder.debug_check_bounds::<ExternalRoute>(offset);
6510            // Vector header
6511            let max_ordinal: u64 = self.max_ordinal_present();
6512            encoder.write_num(max_ordinal, offset);
6513            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6514            // Calling encoder.out_of_line_offset(0) is not allowed.
6515            if max_ordinal == 0 {
6516                return Ok(());
6517            }
6518            depth.increment()?;
6519            let envelope_size = 8;
6520            let bytes_len = max_ordinal as usize * envelope_size;
6521            #[allow(unused_variables)]
6522            let offset = encoder.out_of_line_offset(bytes_len);
6523            let mut _prev_end_offset: usize = 0;
6524            if 1 > max_ordinal {
6525                return Ok(());
6526            }
6527
6528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6529            // are envelope_size bytes.
6530            let cur_offset: usize = (1 - 1) * envelope_size;
6531
6532            // Zero reserved fields.
6533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6534
6535            // Safety:
6536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6538            //   envelope_size bytes, there is always sufficient room.
6539            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
6540            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
6541            encoder, offset + cur_offset, depth
6542        )?;
6543
6544            _prev_end_offset = cur_offset + envelope_size;
6545            if 2 > max_ordinal {
6546                return Ok(());
6547            }
6548
6549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6550            // are envelope_size bytes.
6551            let cur_offset: usize = (2 - 1) * envelope_size;
6552
6553            // Zero reserved fields.
6554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6555
6556            // Safety:
6557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6559            //   envelope_size bytes, there is always sufficient room.
6560            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
6561                self.route_preference
6562                    .as_ref()
6563                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
6564                encoder,
6565                offset + cur_offset,
6566                depth,
6567            )?;
6568
6569            _prev_end_offset = cur_offset + envelope_size;
6570            if 3 > max_ordinal {
6571                return Ok(());
6572            }
6573
6574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6575            // are envelope_size bytes.
6576            let cur_offset: usize = (3 - 1) * envelope_size;
6577
6578            // Zero reserved fields.
6579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6580
6581            // Safety:
6582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6584            //   envelope_size bytes, there is always sufficient room.
6585            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6586                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6587                encoder,
6588                offset + cur_offset,
6589                depth,
6590            )?;
6591
6592            _prev_end_offset = cur_offset + envelope_size;
6593
6594            Ok(())
6595        }
6596    }
6597
6598    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
6599        #[inline(always)]
6600        fn new_empty() -> Self {
6601            Self::default()
6602        }
6603
6604        unsafe fn decode(
6605            &mut self,
6606            decoder: &mut fidl::encoding::Decoder<'_, D>,
6607            offset: usize,
6608            mut depth: fidl::encoding::Depth,
6609        ) -> fidl::Result<()> {
6610            decoder.debug_check_bounds::<Self>(offset);
6611            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6612                None => return Err(fidl::Error::NotNullable),
6613                Some(len) => len,
6614            };
6615            // Calling decoder.out_of_line_offset(0) is not allowed.
6616            if len == 0 {
6617                return Ok(());
6618            };
6619            depth.increment()?;
6620            let envelope_size = 8;
6621            let bytes_len = len * envelope_size;
6622            let offset = decoder.out_of_line_offset(bytes_len)?;
6623            // Decode the envelope for each type.
6624            let mut _next_ordinal_to_read = 0;
6625            let mut next_offset = offset;
6626            let end_offset = offset + bytes_len;
6627            _next_ordinal_to_read += 1;
6628            if next_offset >= end_offset {
6629                return Ok(());
6630            }
6631
6632            // Decode unknown envelopes for gaps in ordinals.
6633            while _next_ordinal_to_read < 1 {
6634                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6635                _next_ordinal_to_read += 1;
6636                next_offset += envelope_size;
6637            }
6638
6639            let next_out_of_line = decoder.next_out_of_line();
6640            let handles_before = decoder.remaining_handles();
6641            if let Some((inlined, num_bytes, num_handles)) =
6642                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6643            {
6644                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6645                if inlined != (member_inline_size <= 4) {
6646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6647                }
6648                let inner_offset;
6649                let mut inner_depth = depth.clone();
6650                if inlined {
6651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6652                    inner_offset = next_offset;
6653                } else {
6654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6655                    inner_depth.increment()?;
6656                }
6657                let val_ref = self.subnet.get_or_insert_with(|| {
6658                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
6659                });
6660                fidl::decode!(
6661                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
6662                    D,
6663                    val_ref,
6664                    decoder,
6665                    inner_offset,
6666                    inner_depth
6667                )?;
6668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6669                {
6670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6671                }
6672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6674                }
6675            }
6676
6677            next_offset += envelope_size;
6678            _next_ordinal_to_read += 1;
6679            if next_offset >= end_offset {
6680                return Ok(());
6681            }
6682
6683            // Decode unknown envelopes for gaps in ordinals.
6684            while _next_ordinal_to_read < 2 {
6685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6686                _next_ordinal_to_read += 1;
6687                next_offset += envelope_size;
6688            }
6689
6690            let next_out_of_line = decoder.next_out_of_line();
6691            let handles_before = decoder.remaining_handles();
6692            if let Some((inlined, num_bytes, num_handles)) =
6693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6694            {
6695                let member_inline_size =
6696                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6697                if inlined != (member_inline_size <= 4) {
6698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6699                }
6700                let inner_offset;
6701                let mut inner_depth = depth.clone();
6702                if inlined {
6703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6704                    inner_offset = next_offset;
6705                } else {
6706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6707                    inner_depth.increment()?;
6708                }
6709                let val_ref = self
6710                    .route_preference
6711                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
6712                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
6713                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6714                {
6715                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6716                }
6717                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6718                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6719                }
6720            }
6721
6722            next_offset += envelope_size;
6723            _next_ordinal_to_read += 1;
6724            if next_offset >= end_offset {
6725                return Ok(());
6726            }
6727
6728            // Decode unknown envelopes for gaps in ordinals.
6729            while _next_ordinal_to_read < 3 {
6730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6731                _next_ordinal_to_read += 1;
6732                next_offset += envelope_size;
6733            }
6734
6735            let next_out_of_line = decoder.next_out_of_line();
6736            let handles_before = decoder.remaining_handles();
6737            if let Some((inlined, num_bytes, num_handles)) =
6738                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6739            {
6740                let member_inline_size =
6741                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6742                if inlined != (member_inline_size <= 4) {
6743                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6744                }
6745                let inner_offset;
6746                let mut inner_depth = depth.clone();
6747                if inlined {
6748                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6749                    inner_offset = next_offset;
6750                } else {
6751                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6752                    inner_depth.increment()?;
6753                }
6754                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6755                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6756                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6757                {
6758                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6759                }
6760                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6761                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6762                }
6763            }
6764
6765            next_offset += envelope_size;
6766
6767            // Decode the remaining unknown envelopes.
6768            while next_offset < end_offset {
6769                _next_ordinal_to_read += 1;
6770                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6771                next_offset += envelope_size;
6772            }
6773
6774            Ok(())
6775        }
6776    }
6777
6778    impl JoinerCommissioningParams {
6779        #[inline(always)]
6780        fn max_ordinal_present(&self) -> u64 {
6781            if let Some(_) = self.vendor_data_string {
6782                return 6;
6783            }
6784            if let Some(_) = self.vendor_sw_version {
6785                return 5;
6786            }
6787            if let Some(_) = self.vendor_model {
6788                return 4;
6789            }
6790            if let Some(_) = self.vendor_name {
6791                return 3;
6792            }
6793            if let Some(_) = self.provisioning_url {
6794                return 2;
6795            }
6796            if let Some(_) = self.pskd {
6797                return 1;
6798            }
6799            0
6800        }
6801    }
6802
6803    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
6804        type Borrowed<'a> = &'a Self;
6805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6806            value
6807        }
6808    }
6809
6810    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
6811        type Owned = Self;
6812
6813        #[inline(always)]
6814        fn inline_align(_context: fidl::encoding::Context) -> usize {
6815            8
6816        }
6817
6818        #[inline(always)]
6819        fn inline_size(_context: fidl::encoding::Context) -> usize {
6820            16
6821        }
6822    }
6823
6824    unsafe impl<D: fidl::encoding::ResourceDialect>
6825        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
6826    {
6827        unsafe fn encode(
6828            self,
6829            encoder: &mut fidl::encoding::Encoder<'_, D>,
6830            offset: usize,
6831            mut depth: fidl::encoding::Depth,
6832        ) -> fidl::Result<()> {
6833            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
6834            // Vector header
6835            let max_ordinal: u64 = self.max_ordinal_present();
6836            encoder.write_num(max_ordinal, offset);
6837            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6838            // Calling encoder.out_of_line_offset(0) is not allowed.
6839            if max_ordinal == 0 {
6840                return Ok(());
6841            }
6842            depth.increment()?;
6843            let envelope_size = 8;
6844            let bytes_len = max_ordinal as usize * envelope_size;
6845            #[allow(unused_variables)]
6846            let offset = encoder.out_of_line_offset(bytes_len);
6847            let mut _prev_end_offset: usize = 0;
6848            if 1 > max_ordinal {
6849                return Ok(());
6850            }
6851
6852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6853            // are envelope_size bytes.
6854            let cur_offset: usize = (1 - 1) * envelope_size;
6855
6856            // Zero reserved fields.
6857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6858
6859            // Safety:
6860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6862            //   envelope_size bytes, there is always sufficient room.
6863            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6864                self.pskd.as_ref().map(
6865                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6866                ),
6867                encoder,
6868                offset + cur_offset,
6869                depth,
6870            )?;
6871
6872            _prev_end_offset = cur_offset + envelope_size;
6873            if 2 > max_ordinal {
6874                return Ok(());
6875            }
6876
6877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6878            // are envelope_size bytes.
6879            let cur_offset: usize = (2 - 1) * envelope_size;
6880
6881            // Zero reserved fields.
6882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6883
6884            // Safety:
6885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6887            //   envelope_size bytes, there is always sufficient room.
6888            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6889                self.provisioning_url.as_ref().map(
6890                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6891                ),
6892                encoder,
6893                offset + cur_offset,
6894                depth,
6895            )?;
6896
6897            _prev_end_offset = cur_offset + envelope_size;
6898            if 3 > max_ordinal {
6899                return Ok(());
6900            }
6901
6902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6903            // are envelope_size bytes.
6904            let cur_offset: usize = (3 - 1) * envelope_size;
6905
6906            // Zero reserved fields.
6907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6908
6909            // Safety:
6910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6912            //   envelope_size bytes, there is always sufficient room.
6913            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6914                self.vendor_name.as_ref().map(
6915                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6916                ),
6917                encoder,
6918                offset + cur_offset,
6919                depth,
6920            )?;
6921
6922            _prev_end_offset = cur_offset + envelope_size;
6923            if 4 > max_ordinal {
6924                return Ok(());
6925            }
6926
6927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6928            // are envelope_size bytes.
6929            let cur_offset: usize = (4 - 1) * envelope_size;
6930
6931            // Zero reserved fields.
6932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6933
6934            // Safety:
6935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6937            //   envelope_size bytes, there is always sufficient room.
6938            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6939                self.vendor_model.as_ref().map(
6940                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6941                ),
6942                encoder,
6943                offset + cur_offset,
6944                depth,
6945            )?;
6946
6947            _prev_end_offset = cur_offset + envelope_size;
6948            if 5 > max_ordinal {
6949                return Ok(());
6950            }
6951
6952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6953            // are envelope_size bytes.
6954            let cur_offset: usize = (5 - 1) * envelope_size;
6955
6956            // Zero reserved fields.
6957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6958
6959            // Safety:
6960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6962            //   envelope_size bytes, there is always sufficient room.
6963            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
6964                self.vendor_sw_version.as_ref().map(
6965                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
6966                ),
6967                encoder,
6968                offset + cur_offset,
6969                depth,
6970            )?;
6971
6972            _prev_end_offset = cur_offset + envelope_size;
6973            if 6 > max_ordinal {
6974                return Ok(());
6975            }
6976
6977            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6978            // are envelope_size bytes.
6979            let cur_offset: usize = (6 - 1) * envelope_size;
6980
6981            // Zero reserved fields.
6982            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6983
6984            // Safety:
6985            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6986            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6987            //   envelope_size bytes, there is always sufficient room.
6988            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6989                self.vendor_data_string.as_ref().map(
6990                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6991                ),
6992                encoder,
6993                offset + cur_offset,
6994                depth,
6995            )?;
6996
6997            _prev_end_offset = cur_offset + envelope_size;
6998
6999            Ok(())
7000        }
7001    }
7002
7003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7004        for JoinerCommissioningParams
7005    {
7006        #[inline(always)]
7007        fn new_empty() -> Self {
7008            Self::default()
7009        }
7010
7011        unsafe fn decode(
7012            &mut self,
7013            decoder: &mut fidl::encoding::Decoder<'_, D>,
7014            offset: usize,
7015            mut depth: fidl::encoding::Depth,
7016        ) -> fidl::Result<()> {
7017            decoder.debug_check_bounds::<Self>(offset);
7018            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7019                None => return Err(fidl::Error::NotNullable),
7020                Some(len) => len,
7021            };
7022            // Calling decoder.out_of_line_offset(0) is not allowed.
7023            if len == 0 {
7024                return Ok(());
7025            };
7026            depth.increment()?;
7027            let envelope_size = 8;
7028            let bytes_len = len * envelope_size;
7029            let offset = decoder.out_of_line_offset(bytes_len)?;
7030            // Decode the envelope for each type.
7031            let mut _next_ordinal_to_read = 0;
7032            let mut next_offset = offset;
7033            let end_offset = offset + bytes_len;
7034            _next_ordinal_to_read += 1;
7035            if next_offset >= end_offset {
7036                return Ok(());
7037            }
7038
7039            // Decode unknown envelopes for gaps in ordinals.
7040            while _next_ordinal_to_read < 1 {
7041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7042                _next_ordinal_to_read += 1;
7043                next_offset += envelope_size;
7044            }
7045
7046            let next_out_of_line = decoder.next_out_of_line();
7047            let handles_before = decoder.remaining_handles();
7048            if let Some((inlined, num_bytes, num_handles)) =
7049                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7050            {
7051                let member_inline_size =
7052                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7053                        decoder.context,
7054                    );
7055                if inlined != (member_inline_size <= 4) {
7056                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7057                }
7058                let inner_offset;
7059                let mut inner_depth = depth.clone();
7060                if inlined {
7061                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7062                    inner_offset = next_offset;
7063                } else {
7064                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7065                    inner_depth.increment()?;
7066                }
7067                let val_ref = self
7068                    .pskd
7069                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7070                fidl::decode!(
7071                    fidl::encoding::BoundedString<32>,
7072                    D,
7073                    val_ref,
7074                    decoder,
7075                    inner_offset,
7076                    inner_depth
7077                )?;
7078                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7079                {
7080                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7081                }
7082                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7083                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7084                }
7085            }
7086
7087            next_offset += envelope_size;
7088            _next_ordinal_to_read += 1;
7089            if next_offset >= end_offset {
7090                return Ok(());
7091            }
7092
7093            // Decode unknown envelopes for gaps in ordinals.
7094            while _next_ordinal_to_read < 2 {
7095                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7096                _next_ordinal_to_read += 1;
7097                next_offset += envelope_size;
7098            }
7099
7100            let next_out_of_line = decoder.next_out_of_line();
7101            let handles_before = decoder.remaining_handles();
7102            if let Some((inlined, num_bytes, num_handles)) =
7103                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7104            {
7105                let member_inline_size =
7106                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7107                        decoder.context,
7108                    );
7109                if inlined != (member_inline_size <= 4) {
7110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7111                }
7112                let inner_offset;
7113                let mut inner_depth = depth.clone();
7114                if inlined {
7115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7116                    inner_offset = next_offset;
7117                } else {
7118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7119                    inner_depth.increment()?;
7120                }
7121                let val_ref = self
7122                    .provisioning_url
7123                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7124                fidl::decode!(
7125                    fidl::encoding::BoundedString<64>,
7126                    D,
7127                    val_ref,
7128                    decoder,
7129                    inner_offset,
7130                    inner_depth
7131                )?;
7132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7133                {
7134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7135                }
7136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7138                }
7139            }
7140
7141            next_offset += envelope_size;
7142            _next_ordinal_to_read += 1;
7143            if next_offset >= end_offset {
7144                return Ok(());
7145            }
7146
7147            // Decode unknown envelopes for gaps in ordinals.
7148            while _next_ordinal_to_read < 3 {
7149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7150                _next_ordinal_to_read += 1;
7151                next_offset += envelope_size;
7152            }
7153
7154            let next_out_of_line = decoder.next_out_of_line();
7155            let handles_before = decoder.remaining_handles();
7156            if let Some((inlined, num_bytes, num_handles)) =
7157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7158            {
7159                let member_inline_size =
7160                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7161                        decoder.context,
7162                    );
7163                if inlined != (member_inline_size <= 4) {
7164                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7165                }
7166                let inner_offset;
7167                let mut inner_depth = depth.clone();
7168                if inlined {
7169                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7170                    inner_offset = next_offset;
7171                } else {
7172                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7173                    inner_depth.increment()?;
7174                }
7175                let val_ref = self
7176                    .vendor_name
7177                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7178                fidl::decode!(
7179                    fidl::encoding::BoundedString<32>,
7180                    D,
7181                    val_ref,
7182                    decoder,
7183                    inner_offset,
7184                    inner_depth
7185                )?;
7186                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7187                {
7188                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7189                }
7190                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7191                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7192                }
7193            }
7194
7195            next_offset += envelope_size;
7196            _next_ordinal_to_read += 1;
7197            if next_offset >= end_offset {
7198                return Ok(());
7199            }
7200
7201            // Decode unknown envelopes for gaps in ordinals.
7202            while _next_ordinal_to_read < 4 {
7203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7204                _next_ordinal_to_read += 1;
7205                next_offset += envelope_size;
7206            }
7207
7208            let next_out_of_line = decoder.next_out_of_line();
7209            let handles_before = decoder.remaining_handles();
7210            if let Some((inlined, num_bytes, num_handles)) =
7211                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7212            {
7213                let member_inline_size =
7214                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7215                        decoder.context,
7216                    );
7217                if inlined != (member_inline_size <= 4) {
7218                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7219                }
7220                let inner_offset;
7221                let mut inner_depth = depth.clone();
7222                if inlined {
7223                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7224                    inner_offset = next_offset;
7225                } else {
7226                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7227                    inner_depth.increment()?;
7228                }
7229                let val_ref = self
7230                    .vendor_model
7231                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7232                fidl::decode!(
7233                    fidl::encoding::BoundedString<32>,
7234                    D,
7235                    val_ref,
7236                    decoder,
7237                    inner_offset,
7238                    inner_depth
7239                )?;
7240                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7241                {
7242                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7243                }
7244                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7245                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7246                }
7247            }
7248
7249            next_offset += envelope_size;
7250            _next_ordinal_to_read += 1;
7251            if next_offset >= end_offset {
7252                return Ok(());
7253            }
7254
7255            // Decode unknown envelopes for gaps in ordinals.
7256            while _next_ordinal_to_read < 5 {
7257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7258                _next_ordinal_to_read += 1;
7259                next_offset += envelope_size;
7260            }
7261
7262            let next_out_of_line = decoder.next_out_of_line();
7263            let handles_before = decoder.remaining_handles();
7264            if let Some((inlined, num_bytes, num_handles)) =
7265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7266            {
7267                let member_inline_size =
7268                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
7269                        decoder.context,
7270                    );
7271                if inlined != (member_inline_size <= 4) {
7272                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7273                }
7274                let inner_offset;
7275                let mut inner_depth = depth.clone();
7276                if inlined {
7277                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7278                    inner_offset = next_offset;
7279                } else {
7280                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7281                    inner_depth.increment()?;
7282                }
7283                let val_ref = self
7284                    .vendor_sw_version
7285                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
7286                fidl::decode!(
7287                    fidl::encoding::BoundedString<16>,
7288                    D,
7289                    val_ref,
7290                    decoder,
7291                    inner_offset,
7292                    inner_depth
7293                )?;
7294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7295                {
7296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7297                }
7298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7300                }
7301            }
7302
7303            next_offset += envelope_size;
7304            _next_ordinal_to_read += 1;
7305            if next_offset >= end_offset {
7306                return Ok(());
7307            }
7308
7309            // Decode unknown envelopes for gaps in ordinals.
7310            while _next_ordinal_to_read < 6 {
7311                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7312                _next_ordinal_to_read += 1;
7313                next_offset += envelope_size;
7314            }
7315
7316            let next_out_of_line = decoder.next_out_of_line();
7317            let handles_before = decoder.remaining_handles();
7318            if let Some((inlined, num_bytes, num_handles)) =
7319                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7320            {
7321                let member_inline_size =
7322                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7323                        decoder.context,
7324                    );
7325                if inlined != (member_inline_size <= 4) {
7326                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7327                }
7328                let inner_offset;
7329                let mut inner_depth = depth.clone();
7330                if inlined {
7331                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7332                    inner_offset = next_offset;
7333                } else {
7334                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7335                    inner_depth.increment()?;
7336                }
7337                let val_ref = self
7338                    .vendor_data_string
7339                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7340                fidl::decode!(
7341                    fidl::encoding::BoundedString<64>,
7342                    D,
7343                    val_ref,
7344                    decoder,
7345                    inner_offset,
7346                    inner_depth
7347                )?;
7348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7349                {
7350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7351                }
7352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7354                }
7355            }
7356
7357            next_offset += envelope_size;
7358
7359            // Decode the remaining unknown envelopes.
7360            while next_offset < end_offset {
7361                _next_ordinal_to_read += 1;
7362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7363                next_offset += envelope_size;
7364            }
7365
7366            Ok(())
7367        }
7368    }
7369
7370    impl LeaderData {
7371        #[inline(always)]
7372        fn max_ordinal_present(&self) -> u64 {
7373            if let Some(_) = self.router_id {
7374                return 5;
7375            }
7376            if let Some(_) = self.stable_network_data_version {
7377                return 4;
7378            }
7379            if let Some(_) = self.network_data_version {
7380                return 3;
7381            }
7382            if let Some(_) = self.weight {
7383                return 2;
7384            }
7385            if let Some(_) = self.partition_id {
7386                return 1;
7387            }
7388            0
7389        }
7390    }
7391
7392    impl fidl::encoding::ValueTypeMarker for LeaderData {
7393        type Borrowed<'a> = &'a Self;
7394        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7395            value
7396        }
7397    }
7398
7399    unsafe impl fidl::encoding::TypeMarker for LeaderData {
7400        type Owned = Self;
7401
7402        #[inline(always)]
7403        fn inline_align(_context: fidl::encoding::Context) -> usize {
7404            8
7405        }
7406
7407        #[inline(always)]
7408        fn inline_size(_context: fidl::encoding::Context) -> usize {
7409            16
7410        }
7411    }
7412
7413    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
7414        for &LeaderData
7415    {
7416        unsafe fn encode(
7417            self,
7418            encoder: &mut fidl::encoding::Encoder<'_, D>,
7419            offset: usize,
7420            mut depth: fidl::encoding::Depth,
7421        ) -> fidl::Result<()> {
7422            encoder.debug_check_bounds::<LeaderData>(offset);
7423            // Vector header
7424            let max_ordinal: u64 = self.max_ordinal_present();
7425            encoder.write_num(max_ordinal, offset);
7426            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7427            // Calling encoder.out_of_line_offset(0) is not allowed.
7428            if max_ordinal == 0 {
7429                return Ok(());
7430            }
7431            depth.increment()?;
7432            let envelope_size = 8;
7433            let bytes_len = max_ordinal as usize * envelope_size;
7434            #[allow(unused_variables)]
7435            let offset = encoder.out_of_line_offset(bytes_len);
7436            let mut _prev_end_offset: usize = 0;
7437            if 1 > max_ordinal {
7438                return Ok(());
7439            }
7440
7441            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7442            // are envelope_size bytes.
7443            let cur_offset: usize = (1 - 1) * envelope_size;
7444
7445            // Zero reserved fields.
7446            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7447
7448            // Safety:
7449            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7450            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7451            //   envelope_size bytes, there is always sufficient room.
7452            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7453                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7454                encoder,
7455                offset + cur_offset,
7456                depth,
7457            )?;
7458
7459            _prev_end_offset = cur_offset + envelope_size;
7460            if 2 > max_ordinal {
7461                return Ok(());
7462            }
7463
7464            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7465            // are envelope_size bytes.
7466            let cur_offset: usize = (2 - 1) * envelope_size;
7467
7468            // Zero reserved fields.
7469            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7470
7471            // Safety:
7472            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7473            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7474            //   envelope_size bytes, there is always sufficient room.
7475            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7476                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7477                encoder,
7478                offset + cur_offset,
7479                depth,
7480            )?;
7481
7482            _prev_end_offset = cur_offset + envelope_size;
7483            if 3 > max_ordinal {
7484                return Ok(());
7485            }
7486
7487            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7488            // are envelope_size bytes.
7489            let cur_offset: usize = (3 - 1) * envelope_size;
7490
7491            // Zero reserved fields.
7492            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7493
7494            // Safety:
7495            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7496            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7497            //   envelope_size bytes, there is always sufficient room.
7498            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7499                self.network_data_version
7500                    .as_ref()
7501                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7502                encoder,
7503                offset + cur_offset,
7504                depth,
7505            )?;
7506
7507            _prev_end_offset = cur_offset + envelope_size;
7508            if 4 > max_ordinal {
7509                return Ok(());
7510            }
7511
7512            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7513            // are envelope_size bytes.
7514            let cur_offset: usize = (4 - 1) * envelope_size;
7515
7516            // Zero reserved fields.
7517            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7518
7519            // Safety:
7520            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7521            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7522            //   envelope_size bytes, there is always sufficient room.
7523            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7524                self.stable_network_data_version
7525                    .as_ref()
7526                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7527                encoder,
7528                offset + cur_offset,
7529                depth,
7530            )?;
7531
7532            _prev_end_offset = cur_offset + envelope_size;
7533            if 5 > max_ordinal {
7534                return Ok(());
7535            }
7536
7537            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7538            // are envelope_size bytes.
7539            let cur_offset: usize = (5 - 1) * envelope_size;
7540
7541            // Zero reserved fields.
7542            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7543
7544            // Safety:
7545            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7546            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7547            //   envelope_size bytes, there is always sufficient room.
7548            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7549                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7550                encoder,
7551                offset + cur_offset,
7552                depth,
7553            )?;
7554
7555            _prev_end_offset = cur_offset + envelope_size;
7556
7557            Ok(())
7558        }
7559    }
7560
7561    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
7562        #[inline(always)]
7563        fn new_empty() -> Self {
7564            Self::default()
7565        }
7566
7567        unsafe fn decode(
7568            &mut self,
7569            decoder: &mut fidl::encoding::Decoder<'_, D>,
7570            offset: usize,
7571            mut depth: fidl::encoding::Depth,
7572        ) -> fidl::Result<()> {
7573            decoder.debug_check_bounds::<Self>(offset);
7574            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7575                None => return Err(fidl::Error::NotNullable),
7576                Some(len) => len,
7577            };
7578            // Calling decoder.out_of_line_offset(0) is not allowed.
7579            if len == 0 {
7580                return Ok(());
7581            };
7582            depth.increment()?;
7583            let envelope_size = 8;
7584            let bytes_len = len * envelope_size;
7585            let offset = decoder.out_of_line_offset(bytes_len)?;
7586            // Decode the envelope for each type.
7587            let mut _next_ordinal_to_read = 0;
7588            let mut next_offset = offset;
7589            let end_offset = offset + bytes_len;
7590            _next_ordinal_to_read += 1;
7591            if next_offset >= end_offset {
7592                return Ok(());
7593            }
7594
7595            // Decode unknown envelopes for gaps in ordinals.
7596            while _next_ordinal_to_read < 1 {
7597                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7598                _next_ordinal_to_read += 1;
7599                next_offset += envelope_size;
7600            }
7601
7602            let next_out_of_line = decoder.next_out_of_line();
7603            let handles_before = decoder.remaining_handles();
7604            if let Some((inlined, num_bytes, num_handles)) =
7605                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7606            {
7607                let member_inline_size =
7608                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7609                if inlined != (member_inline_size <= 4) {
7610                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7611                }
7612                let inner_offset;
7613                let mut inner_depth = depth.clone();
7614                if inlined {
7615                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7616                    inner_offset = next_offset;
7617                } else {
7618                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7619                    inner_depth.increment()?;
7620                }
7621                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
7622                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7624                {
7625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7626                }
7627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7629                }
7630            }
7631
7632            next_offset += envelope_size;
7633            _next_ordinal_to_read += 1;
7634            if next_offset >= end_offset {
7635                return Ok(());
7636            }
7637
7638            // Decode unknown envelopes for gaps in ordinals.
7639            while _next_ordinal_to_read < 2 {
7640                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7641                _next_ordinal_to_read += 1;
7642                next_offset += envelope_size;
7643            }
7644
7645            let next_out_of_line = decoder.next_out_of_line();
7646            let handles_before = decoder.remaining_handles();
7647            if let Some((inlined, num_bytes, num_handles)) =
7648                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7649            {
7650                let member_inline_size =
7651                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7652                if inlined != (member_inline_size <= 4) {
7653                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7654                }
7655                let inner_offset;
7656                let mut inner_depth = depth.clone();
7657                if inlined {
7658                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7659                    inner_offset = next_offset;
7660                } else {
7661                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7662                    inner_depth.increment()?;
7663                }
7664                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
7665                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7666                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7667                {
7668                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7669                }
7670                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7671                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7672                }
7673            }
7674
7675            next_offset += envelope_size;
7676            _next_ordinal_to_read += 1;
7677            if next_offset >= end_offset {
7678                return Ok(());
7679            }
7680
7681            // Decode unknown envelopes for gaps in ordinals.
7682            while _next_ordinal_to_read < 3 {
7683                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7684                _next_ordinal_to_read += 1;
7685                next_offset += envelope_size;
7686            }
7687
7688            let next_out_of_line = decoder.next_out_of_line();
7689            let handles_before = decoder.remaining_handles();
7690            if let Some((inlined, num_bytes, num_handles)) =
7691                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7692            {
7693                let member_inline_size =
7694                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7695                if inlined != (member_inline_size <= 4) {
7696                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7697                }
7698                let inner_offset;
7699                let mut inner_depth = depth.clone();
7700                if inlined {
7701                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7702                    inner_offset = next_offset;
7703                } else {
7704                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7705                    inner_depth.increment()?;
7706                }
7707                let val_ref =
7708                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7709                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7710                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7711                {
7712                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7713                }
7714                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7715                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7716                }
7717            }
7718
7719            next_offset += envelope_size;
7720            _next_ordinal_to_read += 1;
7721            if next_offset >= end_offset {
7722                return Ok(());
7723            }
7724
7725            // Decode unknown envelopes for gaps in ordinals.
7726            while _next_ordinal_to_read < 4 {
7727                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7728                _next_ordinal_to_read += 1;
7729                next_offset += envelope_size;
7730            }
7731
7732            let next_out_of_line = decoder.next_out_of_line();
7733            let handles_before = decoder.remaining_handles();
7734            if let Some((inlined, num_bytes, num_handles)) =
7735                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7736            {
7737                let member_inline_size =
7738                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7739                if inlined != (member_inline_size <= 4) {
7740                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7741                }
7742                let inner_offset;
7743                let mut inner_depth = depth.clone();
7744                if inlined {
7745                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7746                    inner_offset = next_offset;
7747                } else {
7748                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7749                    inner_depth.increment()?;
7750                }
7751                let val_ref =
7752                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7753                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7754                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7755                {
7756                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7757                }
7758                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7759                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7760                }
7761            }
7762
7763            next_offset += envelope_size;
7764            _next_ordinal_to_read += 1;
7765            if next_offset >= end_offset {
7766                return Ok(());
7767            }
7768
7769            // Decode unknown envelopes for gaps in ordinals.
7770            while _next_ordinal_to_read < 5 {
7771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7772                _next_ordinal_to_read += 1;
7773                next_offset += envelope_size;
7774            }
7775
7776            let next_out_of_line = decoder.next_out_of_line();
7777            let handles_before = decoder.remaining_handles();
7778            if let Some((inlined, num_bytes, num_handles)) =
7779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7780            {
7781                let member_inline_size =
7782                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7783                if inlined != (member_inline_size <= 4) {
7784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7785                }
7786                let inner_offset;
7787                let mut inner_depth = depth.clone();
7788                if inlined {
7789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7790                    inner_offset = next_offset;
7791                } else {
7792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7793                    inner_depth.increment()?;
7794                }
7795                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
7796                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7798                {
7799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7800                }
7801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7803                }
7804            }
7805
7806            next_offset += envelope_size;
7807
7808            // Decode the remaining unknown envelopes.
7809            while next_offset < end_offset {
7810                _next_ordinal_to_read += 1;
7811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7812                next_offset += envelope_size;
7813            }
7814
7815            Ok(())
7816        }
7817    }
7818
7819    impl LinkMetricsEntry {
7820        #[inline(always)]
7821        fn max_ordinal_present(&self) -> u64 {
7822            if let Some(_) = self.rssi {
7823                return 2;
7824            }
7825            if let Some(_) = self.link_margin {
7826                return 1;
7827            }
7828            0
7829        }
7830    }
7831
7832    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
7833        type Borrowed<'a> = &'a Self;
7834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7835            value
7836        }
7837    }
7838
7839    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
7840        type Owned = Self;
7841
7842        #[inline(always)]
7843        fn inline_align(_context: fidl::encoding::Context) -> usize {
7844            8
7845        }
7846
7847        #[inline(always)]
7848        fn inline_size(_context: fidl::encoding::Context) -> usize {
7849            16
7850        }
7851    }
7852
7853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
7854        for &LinkMetricsEntry
7855    {
7856        unsafe fn encode(
7857            self,
7858            encoder: &mut fidl::encoding::Encoder<'_, D>,
7859            offset: usize,
7860            mut depth: fidl::encoding::Depth,
7861        ) -> fidl::Result<()> {
7862            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
7863            // Vector header
7864            let max_ordinal: u64 = self.max_ordinal_present();
7865            encoder.write_num(max_ordinal, offset);
7866            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7867            // Calling encoder.out_of_line_offset(0) is not allowed.
7868            if max_ordinal == 0 {
7869                return Ok(());
7870            }
7871            depth.increment()?;
7872            let envelope_size = 8;
7873            let bytes_len = max_ordinal as usize * envelope_size;
7874            #[allow(unused_variables)]
7875            let offset = encoder.out_of_line_offset(bytes_len);
7876            let mut _prev_end_offset: usize = 0;
7877            if 1 > max_ordinal {
7878                return Ok(());
7879            }
7880
7881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7882            // are envelope_size bytes.
7883            let cur_offset: usize = (1 - 1) * envelope_size;
7884
7885            // Zero reserved fields.
7886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7887
7888            // Safety:
7889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7891            //   envelope_size bytes, there is always sufficient room.
7892            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7893                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7894                encoder,
7895                offset + cur_offset,
7896                depth,
7897            )?;
7898
7899            _prev_end_offset = cur_offset + envelope_size;
7900            if 2 > max_ordinal {
7901                return Ok(());
7902            }
7903
7904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7905            // are envelope_size bytes.
7906            let cur_offset: usize = (2 - 1) * envelope_size;
7907
7908            // Zero reserved fields.
7909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7910
7911            // Safety:
7912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7914            //   envelope_size bytes, there is always sufficient room.
7915            fidl::encoding::encode_in_envelope_optional::<i8, D>(
7916                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
7917                encoder,
7918                offset + cur_offset,
7919                depth,
7920            )?;
7921
7922            _prev_end_offset = cur_offset + envelope_size;
7923
7924            Ok(())
7925        }
7926    }
7927
7928    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
7929        #[inline(always)]
7930        fn new_empty() -> Self {
7931            Self::default()
7932        }
7933
7934        unsafe fn decode(
7935            &mut self,
7936            decoder: &mut fidl::encoding::Decoder<'_, D>,
7937            offset: usize,
7938            mut depth: fidl::encoding::Depth,
7939        ) -> fidl::Result<()> {
7940            decoder.debug_check_bounds::<Self>(offset);
7941            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7942                None => return Err(fidl::Error::NotNullable),
7943                Some(len) => len,
7944            };
7945            // Calling decoder.out_of_line_offset(0) is not allowed.
7946            if len == 0 {
7947                return Ok(());
7948            };
7949            depth.increment()?;
7950            let envelope_size = 8;
7951            let bytes_len = len * envelope_size;
7952            let offset = decoder.out_of_line_offset(bytes_len)?;
7953            // Decode the envelope for each type.
7954            let mut _next_ordinal_to_read = 0;
7955            let mut next_offset = offset;
7956            let end_offset = offset + bytes_len;
7957            _next_ordinal_to_read += 1;
7958            if next_offset >= end_offset {
7959                return Ok(());
7960            }
7961
7962            // Decode unknown envelopes for gaps in ordinals.
7963            while _next_ordinal_to_read < 1 {
7964                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7965                _next_ordinal_to_read += 1;
7966                next_offset += envelope_size;
7967            }
7968
7969            let next_out_of_line = decoder.next_out_of_line();
7970            let handles_before = decoder.remaining_handles();
7971            if let Some((inlined, num_bytes, num_handles)) =
7972                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7973            {
7974                let member_inline_size =
7975                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7976                if inlined != (member_inline_size <= 4) {
7977                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7978                }
7979                let inner_offset;
7980                let mut inner_depth = depth.clone();
7981                if inlined {
7982                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7983                    inner_offset = next_offset;
7984                } else {
7985                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7986                    inner_depth.increment()?;
7987                }
7988                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
7989                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7991                {
7992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7993                }
7994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7996                }
7997            }
7998
7999            next_offset += envelope_size;
8000            _next_ordinal_to_read += 1;
8001            if next_offset >= end_offset {
8002                return Ok(());
8003            }
8004
8005            // Decode unknown envelopes for gaps in ordinals.
8006            while _next_ordinal_to_read < 2 {
8007                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8008                _next_ordinal_to_read += 1;
8009                next_offset += envelope_size;
8010            }
8011
8012            let next_out_of_line = decoder.next_out_of_line();
8013            let handles_before = decoder.remaining_handles();
8014            if let Some((inlined, num_bytes, num_handles)) =
8015                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8016            {
8017                let member_inline_size =
8018                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8019                if inlined != (member_inline_size <= 4) {
8020                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8021                }
8022                let inner_offset;
8023                let mut inner_depth = depth.clone();
8024                if inlined {
8025                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8026                    inner_offset = next_offset;
8027                } else {
8028                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8029                    inner_depth.increment()?;
8030                }
8031                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
8032                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
8033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8034                {
8035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8036                }
8037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8039                }
8040            }
8041
8042            next_offset += envelope_size;
8043
8044            // Decode the remaining unknown envelopes.
8045            while next_offset < end_offset {
8046                _next_ordinal_to_read += 1;
8047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8048                next_offset += envelope_size;
8049            }
8050
8051            Ok(())
8052        }
8053    }
8054
8055    impl Nat64ErrorCounters {
8056        #[inline(always)]
8057        fn max_ordinal_present(&self) -> u64 {
8058            if let Some(_) = self.no_mapping {
8059                return 4;
8060            }
8061            if let Some(_) = self.unsupported_protocol {
8062                return 3;
8063            }
8064            if let Some(_) = self.illegal_packet {
8065                return 2;
8066            }
8067            if let Some(_) = self.unknown {
8068                return 1;
8069            }
8070            0
8071        }
8072    }
8073
8074    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
8075        type Borrowed<'a> = &'a Self;
8076        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8077            value
8078        }
8079    }
8080
8081    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
8082        type Owned = Self;
8083
8084        #[inline(always)]
8085        fn inline_align(_context: fidl::encoding::Context) -> usize {
8086            8
8087        }
8088
8089        #[inline(always)]
8090        fn inline_size(_context: fidl::encoding::Context) -> usize {
8091            16
8092        }
8093    }
8094
8095    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
8096        for &Nat64ErrorCounters
8097    {
8098        unsafe fn encode(
8099            self,
8100            encoder: &mut fidl::encoding::Encoder<'_, D>,
8101            offset: usize,
8102            mut depth: fidl::encoding::Depth,
8103        ) -> fidl::Result<()> {
8104            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
8105            // Vector header
8106            let max_ordinal: u64 = self.max_ordinal_present();
8107            encoder.write_num(max_ordinal, offset);
8108            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8109            // Calling encoder.out_of_line_offset(0) is not allowed.
8110            if max_ordinal == 0 {
8111                return Ok(());
8112            }
8113            depth.increment()?;
8114            let envelope_size = 8;
8115            let bytes_len = max_ordinal as usize * envelope_size;
8116            #[allow(unused_variables)]
8117            let offset = encoder.out_of_line_offset(bytes_len);
8118            let mut _prev_end_offset: usize = 0;
8119            if 1 > max_ordinal {
8120                return Ok(());
8121            }
8122
8123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8124            // are envelope_size bytes.
8125            let cur_offset: usize = (1 - 1) * envelope_size;
8126
8127            // Zero reserved fields.
8128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8129
8130            // Safety:
8131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8133            //   envelope_size bytes, there is always sufficient room.
8134            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8135                self.unknown
8136                    .as_ref()
8137                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8138                encoder,
8139                offset + cur_offset,
8140                depth,
8141            )?;
8142
8143            _prev_end_offset = cur_offset + envelope_size;
8144            if 2 > max_ordinal {
8145                return Ok(());
8146            }
8147
8148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8149            // are envelope_size bytes.
8150            let cur_offset: usize = (2 - 1) * envelope_size;
8151
8152            // Zero reserved fields.
8153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8154
8155            // Safety:
8156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8158            //   envelope_size bytes, there is always sufficient room.
8159            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8160                self.illegal_packet
8161                    .as_ref()
8162                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8163                encoder,
8164                offset + cur_offset,
8165                depth,
8166            )?;
8167
8168            _prev_end_offset = cur_offset + envelope_size;
8169            if 3 > max_ordinal {
8170                return Ok(());
8171            }
8172
8173            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8174            // are envelope_size bytes.
8175            let cur_offset: usize = (3 - 1) * envelope_size;
8176
8177            // Zero reserved fields.
8178            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8179
8180            // Safety:
8181            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8182            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8183            //   envelope_size bytes, there is always sufficient room.
8184            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8185                self.unsupported_protocol
8186                    .as_ref()
8187                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8188                encoder,
8189                offset + cur_offset,
8190                depth,
8191            )?;
8192
8193            _prev_end_offset = cur_offset + envelope_size;
8194            if 4 > max_ordinal {
8195                return Ok(());
8196            }
8197
8198            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8199            // are envelope_size bytes.
8200            let cur_offset: usize = (4 - 1) * envelope_size;
8201
8202            // Zero reserved fields.
8203            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8204
8205            // Safety:
8206            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8207            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8208            //   envelope_size bytes, there is always sufficient room.
8209            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8210                self.no_mapping
8211                    .as_ref()
8212                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8213                encoder,
8214                offset + cur_offset,
8215                depth,
8216            )?;
8217
8218            _prev_end_offset = cur_offset + envelope_size;
8219
8220            Ok(())
8221        }
8222    }
8223
8224    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
8225        #[inline(always)]
8226        fn new_empty() -> Self {
8227            Self::default()
8228        }
8229
8230        unsafe fn decode(
8231            &mut self,
8232            decoder: &mut fidl::encoding::Decoder<'_, D>,
8233            offset: usize,
8234            mut depth: fidl::encoding::Depth,
8235        ) -> fidl::Result<()> {
8236            decoder.debug_check_bounds::<Self>(offset);
8237            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8238                None => return Err(fidl::Error::NotNullable),
8239                Some(len) => len,
8240            };
8241            // Calling decoder.out_of_line_offset(0) is not allowed.
8242            if len == 0 {
8243                return Ok(());
8244            };
8245            depth.increment()?;
8246            let envelope_size = 8;
8247            let bytes_len = len * envelope_size;
8248            let offset = decoder.out_of_line_offset(bytes_len)?;
8249            // Decode the envelope for each type.
8250            let mut _next_ordinal_to_read = 0;
8251            let mut next_offset = offset;
8252            let end_offset = offset + bytes_len;
8253            _next_ordinal_to_read += 1;
8254            if next_offset >= end_offset {
8255                return Ok(());
8256            }
8257
8258            // Decode unknown envelopes for gaps in ordinals.
8259            while _next_ordinal_to_read < 1 {
8260                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8261                _next_ordinal_to_read += 1;
8262                next_offset += envelope_size;
8263            }
8264
8265            let next_out_of_line = decoder.next_out_of_line();
8266            let handles_before = decoder.remaining_handles();
8267            if let Some((inlined, num_bytes, num_handles)) =
8268                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8269            {
8270                let member_inline_size =
8271                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8272                        decoder.context,
8273                    );
8274                if inlined != (member_inline_size <= 4) {
8275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8276                }
8277                let inner_offset;
8278                let mut inner_depth = depth.clone();
8279                if inlined {
8280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8281                    inner_offset = next_offset;
8282                } else {
8283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8284                    inner_depth.increment()?;
8285                }
8286                let val_ref =
8287                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8288                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8290                {
8291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8292                }
8293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8295                }
8296            }
8297
8298            next_offset += envelope_size;
8299            _next_ordinal_to_read += 1;
8300            if next_offset >= end_offset {
8301                return Ok(());
8302            }
8303
8304            // Decode unknown envelopes for gaps in ordinals.
8305            while _next_ordinal_to_read < 2 {
8306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8307                _next_ordinal_to_read += 1;
8308                next_offset += envelope_size;
8309            }
8310
8311            let next_out_of_line = decoder.next_out_of_line();
8312            let handles_before = decoder.remaining_handles();
8313            if let Some((inlined, num_bytes, num_handles)) =
8314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8315            {
8316                let member_inline_size =
8317                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8318                        decoder.context,
8319                    );
8320                if inlined != (member_inline_size <= 4) {
8321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8322                }
8323                let inner_offset;
8324                let mut inner_depth = depth.clone();
8325                if inlined {
8326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8327                    inner_offset = next_offset;
8328                } else {
8329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8330                    inner_depth.increment()?;
8331                }
8332                let val_ref = self
8333                    .illegal_packet
8334                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8335                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8336                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8337                {
8338                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8339                }
8340                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8341                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8342                }
8343            }
8344
8345            next_offset += envelope_size;
8346            _next_ordinal_to_read += 1;
8347            if next_offset >= end_offset {
8348                return Ok(());
8349            }
8350
8351            // Decode unknown envelopes for gaps in ordinals.
8352            while _next_ordinal_to_read < 3 {
8353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8354                _next_ordinal_to_read += 1;
8355                next_offset += envelope_size;
8356            }
8357
8358            let next_out_of_line = decoder.next_out_of_line();
8359            let handles_before = decoder.remaining_handles();
8360            if let Some((inlined, num_bytes, num_handles)) =
8361                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8362            {
8363                let member_inline_size =
8364                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8365                        decoder.context,
8366                    );
8367                if inlined != (member_inline_size <= 4) {
8368                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8369                }
8370                let inner_offset;
8371                let mut inner_depth = depth.clone();
8372                if inlined {
8373                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8374                    inner_offset = next_offset;
8375                } else {
8376                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8377                    inner_depth.increment()?;
8378                }
8379                let val_ref = self
8380                    .unsupported_protocol
8381                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8382                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8384                {
8385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8386                }
8387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8389                }
8390            }
8391
8392            next_offset += envelope_size;
8393            _next_ordinal_to_read += 1;
8394            if next_offset >= end_offset {
8395                return Ok(());
8396            }
8397
8398            // Decode unknown envelopes for gaps in ordinals.
8399            while _next_ordinal_to_read < 4 {
8400                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8401                _next_ordinal_to_read += 1;
8402                next_offset += envelope_size;
8403            }
8404
8405            let next_out_of_line = decoder.next_out_of_line();
8406            let handles_before = decoder.remaining_handles();
8407            if let Some((inlined, num_bytes, num_handles)) =
8408                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8409            {
8410                let member_inline_size =
8411                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8412                        decoder.context,
8413                    );
8414                if inlined != (member_inline_size <= 4) {
8415                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8416                }
8417                let inner_offset;
8418                let mut inner_depth = depth.clone();
8419                if inlined {
8420                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8421                    inner_offset = next_offset;
8422                } else {
8423                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8424                    inner_depth.increment()?;
8425                }
8426                let val_ref =
8427                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8428                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8429                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8430                {
8431                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8432                }
8433                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8434                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8435                }
8436            }
8437
8438            next_offset += envelope_size;
8439
8440            // Decode the remaining unknown envelopes.
8441            while next_offset < end_offset {
8442                _next_ordinal_to_read += 1;
8443                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8444                next_offset += envelope_size;
8445            }
8446
8447            Ok(())
8448        }
8449    }
8450
8451    impl Nat64Info {
8452        #[inline(always)]
8453        fn max_ordinal_present(&self) -> u64 {
8454            if let Some(_) = self.nat64_protocol_counters {
8455                return 4;
8456            }
8457            if let Some(_) = self.nat64_error_counters {
8458                return 3;
8459            }
8460            if let Some(_) = self.nat64_mappings {
8461                return 2;
8462            }
8463            if let Some(_) = self.nat64_state {
8464                return 1;
8465            }
8466            0
8467        }
8468    }
8469
8470    impl fidl::encoding::ValueTypeMarker for Nat64Info {
8471        type Borrowed<'a> = &'a Self;
8472        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8473            value
8474        }
8475    }
8476
8477    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
8478        type Owned = Self;
8479
8480        #[inline(always)]
8481        fn inline_align(_context: fidl::encoding::Context) -> usize {
8482            8
8483        }
8484
8485        #[inline(always)]
8486        fn inline_size(_context: fidl::encoding::Context) -> usize {
8487            16
8488        }
8489    }
8490
8491    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
8492        for &Nat64Info
8493    {
8494        unsafe fn encode(
8495            self,
8496            encoder: &mut fidl::encoding::Encoder<'_, D>,
8497            offset: usize,
8498            mut depth: fidl::encoding::Depth,
8499        ) -> fidl::Result<()> {
8500            encoder.debug_check_bounds::<Nat64Info>(offset);
8501            // Vector header
8502            let max_ordinal: u64 = self.max_ordinal_present();
8503            encoder.write_num(max_ordinal, offset);
8504            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8505            // Calling encoder.out_of_line_offset(0) is not allowed.
8506            if max_ordinal == 0 {
8507                return Ok(());
8508            }
8509            depth.increment()?;
8510            let envelope_size = 8;
8511            let bytes_len = max_ordinal as usize * envelope_size;
8512            #[allow(unused_variables)]
8513            let offset = encoder.out_of_line_offset(bytes_len);
8514            let mut _prev_end_offset: usize = 0;
8515            if 1 > max_ordinal {
8516                return Ok(());
8517            }
8518
8519            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8520            // are envelope_size bytes.
8521            let cur_offset: usize = (1 - 1) * envelope_size;
8522
8523            // Zero reserved fields.
8524            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8525
8526            // Safety:
8527            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8528            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8529            //   envelope_size bytes, there is always sufficient room.
8530            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
8531                self.nat64_state
8532                    .as_ref()
8533                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
8534                encoder,
8535                offset + cur_offset,
8536                depth,
8537            )?;
8538
8539            _prev_end_offset = cur_offset + envelope_size;
8540            if 2 > max_ordinal {
8541                return Ok(());
8542            }
8543
8544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8545            // are envelope_size bytes.
8546            let cur_offset: usize = (2 - 1) * envelope_size;
8547
8548            // Zero reserved fields.
8549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8550
8551            // Safety:
8552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8554            //   envelope_size bytes, there is always sufficient room.
8555            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
8556            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
8557            encoder, offset + cur_offset, depth
8558        )?;
8559
8560            _prev_end_offset = cur_offset + envelope_size;
8561            if 3 > max_ordinal {
8562                return Ok(());
8563            }
8564
8565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8566            // are envelope_size bytes.
8567            let cur_offset: usize = (3 - 1) * envelope_size;
8568
8569            // Zero reserved fields.
8570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8571
8572            // Safety:
8573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8575            //   envelope_size bytes, there is always sufficient room.
8576            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
8577                self.nat64_error_counters
8578                    .as_ref()
8579                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
8580                encoder,
8581                offset + cur_offset,
8582                depth,
8583            )?;
8584
8585            _prev_end_offset = cur_offset + envelope_size;
8586            if 4 > max_ordinal {
8587                return Ok(());
8588            }
8589
8590            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8591            // are envelope_size bytes.
8592            let cur_offset: usize = (4 - 1) * envelope_size;
8593
8594            // Zero reserved fields.
8595            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8596
8597            // Safety:
8598            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8599            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8600            //   envelope_size bytes, there is always sufficient room.
8601            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
8602                self.nat64_protocol_counters
8603                    .as_ref()
8604                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
8605                encoder,
8606                offset + cur_offset,
8607                depth,
8608            )?;
8609
8610            _prev_end_offset = cur_offset + envelope_size;
8611
8612            Ok(())
8613        }
8614    }
8615
8616    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
8617        #[inline(always)]
8618        fn new_empty() -> Self {
8619            Self::default()
8620        }
8621
8622        unsafe fn decode(
8623            &mut self,
8624            decoder: &mut fidl::encoding::Decoder<'_, D>,
8625            offset: usize,
8626            mut depth: fidl::encoding::Depth,
8627        ) -> fidl::Result<()> {
8628            decoder.debug_check_bounds::<Self>(offset);
8629            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8630                None => return Err(fidl::Error::NotNullable),
8631                Some(len) => len,
8632            };
8633            // Calling decoder.out_of_line_offset(0) is not allowed.
8634            if len == 0 {
8635                return Ok(());
8636            };
8637            depth.increment()?;
8638            let envelope_size = 8;
8639            let bytes_len = len * envelope_size;
8640            let offset = decoder.out_of_line_offset(bytes_len)?;
8641            // Decode the envelope for each type.
8642            let mut _next_ordinal_to_read = 0;
8643            let mut next_offset = offset;
8644            let end_offset = offset + bytes_len;
8645            _next_ordinal_to_read += 1;
8646            if next_offset >= end_offset {
8647                return Ok(());
8648            }
8649
8650            // Decode unknown envelopes for gaps in ordinals.
8651            while _next_ordinal_to_read < 1 {
8652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8653                _next_ordinal_to_read += 1;
8654                next_offset += envelope_size;
8655            }
8656
8657            let next_out_of_line = decoder.next_out_of_line();
8658            let handles_before = decoder.remaining_handles();
8659            if let Some((inlined, num_bytes, num_handles)) =
8660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8661            {
8662                let member_inline_size =
8663                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
8664                        decoder.context,
8665                    );
8666                if inlined != (member_inline_size <= 4) {
8667                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8668                }
8669                let inner_offset;
8670                let mut inner_depth = depth.clone();
8671                if inlined {
8672                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8673                    inner_offset = next_offset;
8674                } else {
8675                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8676                    inner_depth.increment()?;
8677                }
8678                let val_ref = self
8679                    .nat64_state
8680                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
8681                fidl::decode!(
8682                    BorderRoutingNat64State,
8683                    D,
8684                    val_ref,
8685                    decoder,
8686                    inner_offset,
8687                    inner_depth
8688                )?;
8689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8690                {
8691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8692                }
8693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8695                }
8696            }
8697
8698            next_offset += envelope_size;
8699            _next_ordinal_to_read += 1;
8700            if next_offset >= end_offset {
8701                return Ok(());
8702            }
8703
8704            // Decode unknown envelopes for gaps in ordinals.
8705            while _next_ordinal_to_read < 2 {
8706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8707                _next_ordinal_to_read += 1;
8708                next_offset += envelope_size;
8709            }
8710
8711            let next_out_of_line = decoder.next_out_of_line();
8712            let handles_before = decoder.remaining_handles();
8713            if let Some((inlined, num_bytes, num_handles)) =
8714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8715            {
8716                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8717                if inlined != (member_inline_size <= 4) {
8718                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8719                }
8720                let inner_offset;
8721                let mut inner_depth = depth.clone();
8722                if inlined {
8723                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8724                    inner_offset = next_offset;
8725                } else {
8726                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8727                    inner_depth.increment()?;
8728                }
8729                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
8730                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
8731                });
8732                fidl::decode!(
8733                    fidl::encoding::UnboundedVector<Nat64Mapping>,
8734                    D,
8735                    val_ref,
8736                    decoder,
8737                    inner_offset,
8738                    inner_depth
8739                )?;
8740                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8741                {
8742                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8743                }
8744                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8745                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8746                }
8747            }
8748
8749            next_offset += envelope_size;
8750            _next_ordinal_to_read += 1;
8751            if next_offset >= end_offset {
8752                return Ok(());
8753            }
8754
8755            // Decode unknown envelopes for gaps in ordinals.
8756            while _next_ordinal_to_read < 3 {
8757                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8758                _next_ordinal_to_read += 1;
8759                next_offset += envelope_size;
8760            }
8761
8762            let next_out_of_line = decoder.next_out_of_line();
8763            let handles_before = decoder.remaining_handles();
8764            if let Some((inlined, num_bytes, num_handles)) =
8765                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8766            {
8767                let member_inline_size =
8768                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
8769                        decoder.context,
8770                    );
8771                if inlined != (member_inline_size <= 4) {
8772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8773                }
8774                let inner_offset;
8775                let mut inner_depth = depth.clone();
8776                if inlined {
8777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8778                    inner_offset = next_offset;
8779                } else {
8780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8781                    inner_depth.increment()?;
8782                }
8783                let val_ref = self
8784                    .nat64_error_counters
8785                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
8786                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8787                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8788                {
8789                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8790                }
8791                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8792                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8793                }
8794            }
8795
8796            next_offset += envelope_size;
8797            _next_ordinal_to_read += 1;
8798            if next_offset >= end_offset {
8799                return Ok(());
8800            }
8801
8802            // Decode unknown envelopes for gaps in ordinals.
8803            while _next_ordinal_to_read < 4 {
8804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8805                _next_ordinal_to_read += 1;
8806                next_offset += envelope_size;
8807            }
8808
8809            let next_out_of_line = decoder.next_out_of_line();
8810            let handles_before = decoder.remaining_handles();
8811            if let Some((inlined, num_bytes, num_handles)) =
8812                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8813            {
8814                let member_inline_size =
8815                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
8816                        decoder.context,
8817                    );
8818                if inlined != (member_inline_size <= 4) {
8819                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8820                }
8821                let inner_offset;
8822                let mut inner_depth = depth.clone();
8823                if inlined {
8824                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8825                    inner_offset = next_offset;
8826                } else {
8827                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8828                    inner_depth.increment()?;
8829                }
8830                let val_ref = self
8831                    .nat64_protocol_counters
8832                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
8833                fidl::decode!(
8834                    Nat64ProtocolCounters,
8835                    D,
8836                    val_ref,
8837                    decoder,
8838                    inner_offset,
8839                    inner_depth
8840                )?;
8841                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8842                {
8843                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8844                }
8845                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8846                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8847                }
8848            }
8849
8850            next_offset += envelope_size;
8851
8852            // Decode the remaining unknown envelopes.
8853            while next_offset < end_offset {
8854                _next_ordinal_to_read += 1;
8855                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8856                next_offset += envelope_size;
8857            }
8858
8859            Ok(())
8860        }
8861    }
8862
8863    impl Nat64Mapping {
8864        #[inline(always)]
8865        fn max_ordinal_present(&self) -> u64 {
8866            if let Some(_) = self.counters {
8867                return 5;
8868            }
8869            if let Some(_) = self.remaining_time_ms {
8870                return 4;
8871            }
8872            if let Some(_) = self.ip6_addr {
8873                return 3;
8874            }
8875            if let Some(_) = self.ip4_addr {
8876                return 2;
8877            }
8878            if let Some(_) = self.mapping_id {
8879                return 1;
8880            }
8881            0
8882        }
8883    }
8884
8885    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
8886        type Borrowed<'a> = &'a Self;
8887        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8888            value
8889        }
8890    }
8891
8892    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
8893        type Owned = Self;
8894
8895        #[inline(always)]
8896        fn inline_align(_context: fidl::encoding::Context) -> usize {
8897            8
8898        }
8899
8900        #[inline(always)]
8901        fn inline_size(_context: fidl::encoding::Context) -> usize {
8902            16
8903        }
8904    }
8905
8906    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
8907        for &Nat64Mapping
8908    {
8909        unsafe fn encode(
8910            self,
8911            encoder: &mut fidl::encoding::Encoder<'_, D>,
8912            offset: usize,
8913            mut depth: fidl::encoding::Depth,
8914        ) -> fidl::Result<()> {
8915            encoder.debug_check_bounds::<Nat64Mapping>(offset);
8916            // Vector header
8917            let max_ordinal: u64 = self.max_ordinal_present();
8918            encoder.write_num(max_ordinal, offset);
8919            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8920            // Calling encoder.out_of_line_offset(0) is not allowed.
8921            if max_ordinal == 0 {
8922                return Ok(());
8923            }
8924            depth.increment()?;
8925            let envelope_size = 8;
8926            let bytes_len = max_ordinal as usize * envelope_size;
8927            #[allow(unused_variables)]
8928            let offset = encoder.out_of_line_offset(bytes_len);
8929            let mut _prev_end_offset: usize = 0;
8930            if 1 > max_ordinal {
8931                return Ok(());
8932            }
8933
8934            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8935            // are envelope_size bytes.
8936            let cur_offset: usize = (1 - 1) * envelope_size;
8937
8938            // Zero reserved fields.
8939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8940
8941            // Safety:
8942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8944            //   envelope_size bytes, there is always sufficient room.
8945            fidl::encoding::encode_in_envelope_optional::<u64, D>(
8946                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
8947                encoder,
8948                offset + cur_offset,
8949                depth,
8950            )?;
8951
8952            _prev_end_offset = cur_offset + envelope_size;
8953            if 2 > max_ordinal {
8954                return Ok(());
8955            }
8956
8957            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8958            // are envelope_size bytes.
8959            let cur_offset: usize = (2 - 1) * envelope_size;
8960
8961            // Zero reserved fields.
8962            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8963
8964            // Safety:
8965            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8966            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8967            //   envelope_size bytes, there is always sufficient room.
8968            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8969            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8970            encoder, offset + cur_offset, depth
8971        )?;
8972
8973            _prev_end_offset = cur_offset + envelope_size;
8974            if 3 > max_ordinal {
8975                return Ok(());
8976            }
8977
8978            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8979            // are envelope_size bytes.
8980            let cur_offset: usize = (3 - 1) * envelope_size;
8981
8982            // Zero reserved fields.
8983            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8984
8985            // Safety:
8986            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8987            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8988            //   envelope_size bytes, there is always sufficient room.
8989            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8990            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8991            encoder, offset + cur_offset, depth
8992        )?;
8993
8994            _prev_end_offset = cur_offset + envelope_size;
8995            if 4 > max_ordinal {
8996                return Ok(());
8997            }
8998
8999            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9000            // are envelope_size bytes.
9001            let cur_offset: usize = (4 - 1) * envelope_size;
9002
9003            // Zero reserved fields.
9004            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9005
9006            // Safety:
9007            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9008            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9009            //   envelope_size bytes, there is always sufficient room.
9010            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9011                self.remaining_time_ms
9012                    .as_ref()
9013                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9014                encoder,
9015                offset + cur_offset,
9016                depth,
9017            )?;
9018
9019            _prev_end_offset = cur_offset + envelope_size;
9020            if 5 > max_ordinal {
9021                return Ok(());
9022            }
9023
9024            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9025            // are envelope_size bytes.
9026            let cur_offset: usize = (5 - 1) * envelope_size;
9027
9028            // Zero reserved fields.
9029            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9030
9031            // Safety:
9032            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9033            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9034            //   envelope_size bytes, there is always sufficient room.
9035            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
9036                self.counters
9037                    .as_ref()
9038                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
9039                encoder,
9040                offset + cur_offset,
9041                depth,
9042            )?;
9043
9044            _prev_end_offset = cur_offset + envelope_size;
9045
9046            Ok(())
9047        }
9048    }
9049
9050    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
9051        #[inline(always)]
9052        fn new_empty() -> Self {
9053            Self::default()
9054        }
9055
9056        unsafe fn decode(
9057            &mut self,
9058            decoder: &mut fidl::encoding::Decoder<'_, D>,
9059            offset: usize,
9060            mut depth: fidl::encoding::Depth,
9061        ) -> fidl::Result<()> {
9062            decoder.debug_check_bounds::<Self>(offset);
9063            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9064                None => return Err(fidl::Error::NotNullable),
9065                Some(len) => len,
9066            };
9067            // Calling decoder.out_of_line_offset(0) is not allowed.
9068            if len == 0 {
9069                return Ok(());
9070            };
9071            depth.increment()?;
9072            let envelope_size = 8;
9073            let bytes_len = len * envelope_size;
9074            let offset = decoder.out_of_line_offset(bytes_len)?;
9075            // Decode the envelope for each type.
9076            let mut _next_ordinal_to_read = 0;
9077            let mut next_offset = offset;
9078            let end_offset = offset + bytes_len;
9079            _next_ordinal_to_read += 1;
9080            if next_offset >= end_offset {
9081                return Ok(());
9082            }
9083
9084            // Decode unknown envelopes for gaps in ordinals.
9085            while _next_ordinal_to_read < 1 {
9086                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9087                _next_ordinal_to_read += 1;
9088                next_offset += envelope_size;
9089            }
9090
9091            let next_out_of_line = decoder.next_out_of_line();
9092            let handles_before = decoder.remaining_handles();
9093            if let Some((inlined, num_bytes, num_handles)) =
9094                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9095            {
9096                let member_inline_size =
9097                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9098                if inlined != (member_inline_size <= 4) {
9099                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9100                }
9101                let inner_offset;
9102                let mut inner_depth = depth.clone();
9103                if inlined {
9104                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9105                    inner_offset = next_offset;
9106                } else {
9107                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9108                    inner_depth.increment()?;
9109                }
9110                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
9111                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9112                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9113                {
9114                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9115                }
9116                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9117                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9118                }
9119            }
9120
9121            next_offset += envelope_size;
9122            _next_ordinal_to_read += 1;
9123            if next_offset >= end_offset {
9124                return Ok(());
9125            }
9126
9127            // Decode unknown envelopes for gaps in ordinals.
9128            while _next_ordinal_to_read < 2 {
9129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9130                _next_ordinal_to_read += 1;
9131                next_offset += envelope_size;
9132            }
9133
9134            let next_out_of_line = decoder.next_out_of_line();
9135            let handles_before = decoder.remaining_handles();
9136            if let Some((inlined, num_bytes, num_handles)) =
9137                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9138            {
9139                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9140                if inlined != (member_inline_size <= 4) {
9141                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9142                }
9143                let inner_offset;
9144                let mut inner_depth = depth.clone();
9145                if inlined {
9146                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9147                    inner_offset = next_offset;
9148                } else {
9149                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9150                    inner_depth.increment()?;
9151                }
9152                let val_ref = self.ip4_addr.get_or_insert_with(|| {
9153                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9154                });
9155                fidl::decode!(
9156                    fidl::encoding::UnboundedVector<u8>,
9157                    D,
9158                    val_ref,
9159                    decoder,
9160                    inner_offset,
9161                    inner_depth
9162                )?;
9163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9164                {
9165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9166                }
9167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9169                }
9170            }
9171
9172            next_offset += envelope_size;
9173            _next_ordinal_to_read += 1;
9174            if next_offset >= end_offset {
9175                return Ok(());
9176            }
9177
9178            // Decode unknown envelopes for gaps in ordinals.
9179            while _next_ordinal_to_read < 3 {
9180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9181                _next_ordinal_to_read += 1;
9182                next_offset += envelope_size;
9183            }
9184
9185            let next_out_of_line = decoder.next_out_of_line();
9186            let handles_before = decoder.remaining_handles();
9187            if let Some((inlined, num_bytes, num_handles)) =
9188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9189            {
9190                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9191                if inlined != (member_inline_size <= 4) {
9192                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9193                }
9194                let inner_offset;
9195                let mut inner_depth = depth.clone();
9196                if inlined {
9197                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9198                    inner_offset = next_offset;
9199                } else {
9200                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9201                    inner_depth.increment()?;
9202                }
9203                let val_ref = self.ip6_addr.get_or_insert_with(|| {
9204                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9205                });
9206                fidl::decode!(
9207                    fidl::encoding::UnboundedVector<u8>,
9208                    D,
9209                    val_ref,
9210                    decoder,
9211                    inner_offset,
9212                    inner_depth
9213                )?;
9214                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9215                {
9216                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9217                }
9218                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9219                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9220                }
9221            }
9222
9223            next_offset += envelope_size;
9224            _next_ordinal_to_read += 1;
9225            if next_offset >= end_offset {
9226                return Ok(());
9227            }
9228
9229            // Decode unknown envelopes for gaps in ordinals.
9230            while _next_ordinal_to_read < 4 {
9231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9232                _next_ordinal_to_read += 1;
9233                next_offset += envelope_size;
9234            }
9235
9236            let next_out_of_line = decoder.next_out_of_line();
9237            let handles_before = decoder.remaining_handles();
9238            if let Some((inlined, num_bytes, num_handles)) =
9239                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9240            {
9241                let member_inline_size =
9242                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9243                if inlined != (member_inline_size <= 4) {
9244                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9245                }
9246                let inner_offset;
9247                let mut inner_depth = depth.clone();
9248                if inlined {
9249                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9250                    inner_offset = next_offset;
9251                } else {
9252                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9253                    inner_depth.increment()?;
9254                }
9255                let val_ref =
9256                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
9257                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9258                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9259                {
9260                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9261                }
9262                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9263                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9264                }
9265            }
9266
9267            next_offset += envelope_size;
9268            _next_ordinal_to_read += 1;
9269            if next_offset >= end_offset {
9270                return Ok(());
9271            }
9272
9273            // Decode unknown envelopes for gaps in ordinals.
9274            while _next_ordinal_to_read < 5 {
9275                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9276                _next_ordinal_to_read += 1;
9277                next_offset += envelope_size;
9278            }
9279
9280            let next_out_of_line = decoder.next_out_of_line();
9281            let handles_before = decoder.remaining_handles();
9282            if let Some((inlined, num_bytes, num_handles)) =
9283                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9284            {
9285                let member_inline_size =
9286                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
9287                        decoder.context,
9288                    );
9289                if inlined != (member_inline_size <= 4) {
9290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9291                }
9292                let inner_offset;
9293                let mut inner_depth = depth.clone();
9294                if inlined {
9295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9296                    inner_offset = next_offset;
9297                } else {
9298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9299                    inner_depth.increment()?;
9300                }
9301                let val_ref =
9302                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
9303                fidl::decode!(
9304                    Nat64ProtocolCounters,
9305                    D,
9306                    val_ref,
9307                    decoder,
9308                    inner_offset,
9309                    inner_depth
9310                )?;
9311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9312                {
9313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9314                }
9315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9317                }
9318            }
9319
9320            next_offset += envelope_size;
9321
9322            // Decode the remaining unknown envelopes.
9323            while next_offset < end_offset {
9324                _next_ordinal_to_read += 1;
9325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9326                next_offset += envelope_size;
9327            }
9328
9329            Ok(())
9330        }
9331    }
9332
9333    impl Nat64PacketCounters {
9334        #[inline(always)]
9335        fn max_ordinal_present(&self) -> u64 {
9336            if let Some(_) = self.ipv6_to_ipv4_packets {
9337                return 2;
9338            }
9339            if let Some(_) = self.ipv4_to_ipv6_packets {
9340                return 1;
9341            }
9342            0
9343        }
9344    }
9345
9346    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
9347        type Borrowed<'a> = &'a Self;
9348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9349            value
9350        }
9351    }
9352
9353    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
9354        type Owned = Self;
9355
9356        #[inline(always)]
9357        fn inline_align(_context: fidl::encoding::Context) -> usize {
9358            8
9359        }
9360
9361        #[inline(always)]
9362        fn inline_size(_context: fidl::encoding::Context) -> usize {
9363            16
9364        }
9365    }
9366
9367    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
9368        for &Nat64PacketCounters
9369    {
9370        unsafe fn encode(
9371            self,
9372            encoder: &mut fidl::encoding::Encoder<'_, D>,
9373            offset: usize,
9374            mut depth: fidl::encoding::Depth,
9375        ) -> fidl::Result<()> {
9376            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
9377            // Vector header
9378            let max_ordinal: u64 = self.max_ordinal_present();
9379            encoder.write_num(max_ordinal, offset);
9380            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9381            // Calling encoder.out_of_line_offset(0) is not allowed.
9382            if max_ordinal == 0 {
9383                return Ok(());
9384            }
9385            depth.increment()?;
9386            let envelope_size = 8;
9387            let bytes_len = max_ordinal as usize * envelope_size;
9388            #[allow(unused_variables)]
9389            let offset = encoder.out_of_line_offset(bytes_len);
9390            let mut _prev_end_offset: usize = 0;
9391            if 1 > max_ordinal {
9392                return Ok(());
9393            }
9394
9395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9396            // are envelope_size bytes.
9397            let cur_offset: usize = (1 - 1) * envelope_size;
9398
9399            // Zero reserved fields.
9400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9401
9402            // Safety:
9403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9405            //   envelope_size bytes, there is always sufficient room.
9406            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9407                self.ipv4_to_ipv6_packets
9408                    .as_ref()
9409                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9410                encoder,
9411                offset + cur_offset,
9412                depth,
9413            )?;
9414
9415            _prev_end_offset = cur_offset + envelope_size;
9416            if 2 > max_ordinal {
9417                return Ok(());
9418            }
9419
9420            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9421            // are envelope_size bytes.
9422            let cur_offset: usize = (2 - 1) * envelope_size;
9423
9424            // Zero reserved fields.
9425            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9426
9427            // Safety:
9428            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9429            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9430            //   envelope_size bytes, there is always sufficient room.
9431            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9432                self.ipv6_to_ipv4_packets
9433                    .as_ref()
9434                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9435                encoder,
9436                offset + cur_offset,
9437                depth,
9438            )?;
9439
9440            _prev_end_offset = cur_offset + envelope_size;
9441
9442            Ok(())
9443        }
9444    }
9445
9446    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
9447        #[inline(always)]
9448        fn new_empty() -> Self {
9449            Self::default()
9450        }
9451
9452        unsafe fn decode(
9453            &mut self,
9454            decoder: &mut fidl::encoding::Decoder<'_, D>,
9455            offset: usize,
9456            mut depth: fidl::encoding::Depth,
9457        ) -> fidl::Result<()> {
9458            decoder.debug_check_bounds::<Self>(offset);
9459            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9460                None => return Err(fidl::Error::NotNullable),
9461                Some(len) => len,
9462            };
9463            // Calling decoder.out_of_line_offset(0) is not allowed.
9464            if len == 0 {
9465                return Ok(());
9466            };
9467            depth.increment()?;
9468            let envelope_size = 8;
9469            let bytes_len = len * envelope_size;
9470            let offset = decoder.out_of_line_offset(bytes_len)?;
9471            // Decode the envelope for each type.
9472            let mut _next_ordinal_to_read = 0;
9473            let mut next_offset = offset;
9474            let end_offset = offset + bytes_len;
9475            _next_ordinal_to_read += 1;
9476            if next_offset >= end_offset {
9477                return Ok(());
9478            }
9479
9480            // Decode unknown envelopes for gaps in ordinals.
9481            while _next_ordinal_to_read < 1 {
9482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9483                _next_ordinal_to_read += 1;
9484                next_offset += envelope_size;
9485            }
9486
9487            let next_out_of_line = decoder.next_out_of_line();
9488            let handles_before = decoder.remaining_handles();
9489            if let Some((inlined, num_bytes, num_handles)) =
9490                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9491            {
9492                let member_inline_size =
9493                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9494                if inlined != (member_inline_size <= 4) {
9495                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9496                }
9497                let inner_offset;
9498                let mut inner_depth = depth.clone();
9499                if inlined {
9500                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9501                    inner_offset = next_offset;
9502                } else {
9503                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9504                    inner_depth.increment()?;
9505                }
9506                let val_ref =
9507                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9508                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9509                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9510                {
9511                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9512                }
9513                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9514                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9515                }
9516            }
9517
9518            next_offset += envelope_size;
9519            _next_ordinal_to_read += 1;
9520            if next_offset >= end_offset {
9521                return Ok(());
9522            }
9523
9524            // Decode unknown envelopes for gaps in ordinals.
9525            while _next_ordinal_to_read < 2 {
9526                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9527                _next_ordinal_to_read += 1;
9528                next_offset += envelope_size;
9529            }
9530
9531            let next_out_of_line = decoder.next_out_of_line();
9532            let handles_before = decoder.remaining_handles();
9533            if let Some((inlined, num_bytes, num_handles)) =
9534                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9535            {
9536                let member_inline_size =
9537                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9538                if inlined != (member_inline_size <= 4) {
9539                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9540                }
9541                let inner_offset;
9542                let mut inner_depth = depth.clone();
9543                if inlined {
9544                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9545                    inner_offset = next_offset;
9546                } else {
9547                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9548                    inner_depth.increment()?;
9549                }
9550                let val_ref =
9551                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9552                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9554                {
9555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9556                }
9557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9559                }
9560            }
9561
9562            next_offset += envelope_size;
9563
9564            // Decode the remaining unknown envelopes.
9565            while next_offset < end_offset {
9566                _next_ordinal_to_read += 1;
9567                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9568                next_offset += envelope_size;
9569            }
9570
9571            Ok(())
9572        }
9573    }
9574
9575    impl Nat64ProtocolCounters {
9576        #[inline(always)]
9577        fn max_ordinal_present(&self) -> u64 {
9578            if let Some(_) = self.total {
9579                return 4;
9580            }
9581            if let Some(_) = self.icmp {
9582                return 3;
9583            }
9584            if let Some(_) = self.udp {
9585                return 2;
9586            }
9587            if let Some(_) = self.tcp {
9588                return 1;
9589            }
9590            0
9591        }
9592    }
9593
9594    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
9595        type Borrowed<'a> = &'a Self;
9596        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9597            value
9598        }
9599    }
9600
9601    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
9602        type Owned = Self;
9603
9604        #[inline(always)]
9605        fn inline_align(_context: fidl::encoding::Context) -> usize {
9606            8
9607        }
9608
9609        #[inline(always)]
9610        fn inline_size(_context: fidl::encoding::Context) -> usize {
9611            16
9612        }
9613    }
9614
9615    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
9616        for &Nat64ProtocolCounters
9617    {
9618        unsafe fn encode(
9619            self,
9620            encoder: &mut fidl::encoding::Encoder<'_, D>,
9621            offset: usize,
9622            mut depth: fidl::encoding::Depth,
9623        ) -> fidl::Result<()> {
9624            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
9625            // Vector header
9626            let max_ordinal: u64 = self.max_ordinal_present();
9627            encoder.write_num(max_ordinal, offset);
9628            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9629            // Calling encoder.out_of_line_offset(0) is not allowed.
9630            if max_ordinal == 0 {
9631                return Ok(());
9632            }
9633            depth.increment()?;
9634            let envelope_size = 8;
9635            let bytes_len = max_ordinal as usize * envelope_size;
9636            #[allow(unused_variables)]
9637            let offset = encoder.out_of_line_offset(bytes_len);
9638            let mut _prev_end_offset: usize = 0;
9639            if 1 > max_ordinal {
9640                return Ok(());
9641            }
9642
9643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9644            // are envelope_size bytes.
9645            let cur_offset: usize = (1 - 1) * envelope_size;
9646
9647            // Zero reserved fields.
9648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9649
9650            // Safety:
9651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9653            //   envelope_size bytes, there is always sufficient room.
9654            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9655                self.tcp
9656                    .as_ref()
9657                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9658                encoder,
9659                offset + cur_offset,
9660                depth,
9661            )?;
9662
9663            _prev_end_offset = cur_offset + envelope_size;
9664            if 2 > max_ordinal {
9665                return Ok(());
9666            }
9667
9668            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9669            // are envelope_size bytes.
9670            let cur_offset: usize = (2 - 1) * envelope_size;
9671
9672            // Zero reserved fields.
9673            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9674
9675            // Safety:
9676            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9677            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9678            //   envelope_size bytes, there is always sufficient room.
9679            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9680                self.udp
9681                    .as_ref()
9682                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9683                encoder,
9684                offset + cur_offset,
9685                depth,
9686            )?;
9687
9688            _prev_end_offset = cur_offset + envelope_size;
9689            if 3 > max_ordinal {
9690                return Ok(());
9691            }
9692
9693            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9694            // are envelope_size bytes.
9695            let cur_offset: usize = (3 - 1) * envelope_size;
9696
9697            // Zero reserved fields.
9698            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9699
9700            // Safety:
9701            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9702            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9703            //   envelope_size bytes, there is always sufficient room.
9704            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9705                self.icmp
9706                    .as_ref()
9707                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9708                encoder,
9709                offset + cur_offset,
9710                depth,
9711            )?;
9712
9713            _prev_end_offset = cur_offset + envelope_size;
9714            if 4 > max_ordinal {
9715                return Ok(());
9716            }
9717
9718            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9719            // are envelope_size bytes.
9720            let cur_offset: usize = (4 - 1) * envelope_size;
9721
9722            // Zero reserved fields.
9723            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9724
9725            // Safety:
9726            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9727            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9728            //   envelope_size bytes, there is always sufficient room.
9729            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9730                self.total
9731                    .as_ref()
9732                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9733                encoder,
9734                offset + cur_offset,
9735                depth,
9736            )?;
9737
9738            _prev_end_offset = cur_offset + envelope_size;
9739
9740            Ok(())
9741        }
9742    }
9743
9744    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
9745        #[inline(always)]
9746        fn new_empty() -> Self {
9747            Self::default()
9748        }
9749
9750        unsafe fn decode(
9751            &mut self,
9752            decoder: &mut fidl::encoding::Decoder<'_, D>,
9753            offset: usize,
9754            mut depth: fidl::encoding::Depth,
9755        ) -> fidl::Result<()> {
9756            decoder.debug_check_bounds::<Self>(offset);
9757            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9758                None => return Err(fidl::Error::NotNullable),
9759                Some(len) => len,
9760            };
9761            // Calling decoder.out_of_line_offset(0) is not allowed.
9762            if len == 0 {
9763                return Ok(());
9764            };
9765            depth.increment()?;
9766            let envelope_size = 8;
9767            let bytes_len = len * envelope_size;
9768            let offset = decoder.out_of_line_offset(bytes_len)?;
9769            // Decode the envelope for each type.
9770            let mut _next_ordinal_to_read = 0;
9771            let mut next_offset = offset;
9772            let end_offset = offset + bytes_len;
9773            _next_ordinal_to_read += 1;
9774            if next_offset >= end_offset {
9775                return Ok(());
9776            }
9777
9778            // Decode unknown envelopes for gaps in ordinals.
9779            while _next_ordinal_to_read < 1 {
9780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9781                _next_ordinal_to_read += 1;
9782                next_offset += envelope_size;
9783            }
9784
9785            let next_out_of_line = decoder.next_out_of_line();
9786            let handles_before = decoder.remaining_handles();
9787            if let Some((inlined, num_bytes, num_handles)) =
9788                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9789            {
9790                let member_inline_size =
9791                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9792                        decoder.context,
9793                    );
9794                if inlined != (member_inline_size <= 4) {
9795                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9796                }
9797                let inner_offset;
9798                let mut inner_depth = depth.clone();
9799                if inlined {
9800                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9801                    inner_offset = next_offset;
9802                } else {
9803                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9804                    inner_depth.increment()?;
9805                }
9806                let val_ref =
9807                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9808                fidl::decode!(
9809                    Nat64TrafficCounters,
9810                    D,
9811                    val_ref,
9812                    decoder,
9813                    inner_offset,
9814                    inner_depth
9815                )?;
9816                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9817                {
9818                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9819                }
9820                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9821                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9822                }
9823            }
9824
9825            next_offset += envelope_size;
9826            _next_ordinal_to_read += 1;
9827            if next_offset >= end_offset {
9828                return Ok(());
9829            }
9830
9831            // Decode unknown envelopes for gaps in ordinals.
9832            while _next_ordinal_to_read < 2 {
9833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9834                _next_ordinal_to_read += 1;
9835                next_offset += envelope_size;
9836            }
9837
9838            let next_out_of_line = decoder.next_out_of_line();
9839            let handles_before = decoder.remaining_handles();
9840            if let Some((inlined, num_bytes, num_handles)) =
9841                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9842            {
9843                let member_inline_size =
9844                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9845                        decoder.context,
9846                    );
9847                if inlined != (member_inline_size <= 4) {
9848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9849                }
9850                let inner_offset;
9851                let mut inner_depth = depth.clone();
9852                if inlined {
9853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9854                    inner_offset = next_offset;
9855                } else {
9856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9857                    inner_depth.increment()?;
9858                }
9859                let val_ref =
9860                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9861                fidl::decode!(
9862                    Nat64TrafficCounters,
9863                    D,
9864                    val_ref,
9865                    decoder,
9866                    inner_offset,
9867                    inner_depth
9868                )?;
9869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9870                {
9871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9872                }
9873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9875                }
9876            }
9877
9878            next_offset += envelope_size;
9879            _next_ordinal_to_read += 1;
9880            if next_offset >= end_offset {
9881                return Ok(());
9882            }
9883
9884            // Decode unknown envelopes for gaps in ordinals.
9885            while _next_ordinal_to_read < 3 {
9886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9887                _next_ordinal_to_read += 1;
9888                next_offset += envelope_size;
9889            }
9890
9891            let next_out_of_line = decoder.next_out_of_line();
9892            let handles_before = decoder.remaining_handles();
9893            if let Some((inlined, num_bytes, num_handles)) =
9894                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9895            {
9896                let member_inline_size =
9897                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9898                        decoder.context,
9899                    );
9900                if inlined != (member_inline_size <= 4) {
9901                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9902                }
9903                let inner_offset;
9904                let mut inner_depth = depth.clone();
9905                if inlined {
9906                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9907                    inner_offset = next_offset;
9908                } else {
9909                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9910                    inner_depth.increment()?;
9911                }
9912                let val_ref =
9913                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9914                fidl::decode!(
9915                    Nat64TrafficCounters,
9916                    D,
9917                    val_ref,
9918                    decoder,
9919                    inner_offset,
9920                    inner_depth
9921                )?;
9922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9923                {
9924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9925                }
9926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9928                }
9929            }
9930
9931            next_offset += envelope_size;
9932            _next_ordinal_to_read += 1;
9933            if next_offset >= end_offset {
9934                return Ok(());
9935            }
9936
9937            // Decode unknown envelopes for gaps in ordinals.
9938            while _next_ordinal_to_read < 4 {
9939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9940                _next_ordinal_to_read += 1;
9941                next_offset += envelope_size;
9942            }
9943
9944            let next_out_of_line = decoder.next_out_of_line();
9945            let handles_before = decoder.remaining_handles();
9946            if let Some((inlined, num_bytes, num_handles)) =
9947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9948            {
9949                let member_inline_size =
9950                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9951                        decoder.context,
9952                    );
9953                if inlined != (member_inline_size <= 4) {
9954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9955                }
9956                let inner_offset;
9957                let mut inner_depth = depth.clone();
9958                if inlined {
9959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9960                    inner_offset = next_offset;
9961                } else {
9962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9963                    inner_depth.increment()?;
9964                }
9965                let val_ref =
9966                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9967                fidl::decode!(
9968                    Nat64TrafficCounters,
9969                    D,
9970                    val_ref,
9971                    decoder,
9972                    inner_offset,
9973                    inner_depth
9974                )?;
9975                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9976                {
9977                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9978                }
9979                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9980                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9981                }
9982            }
9983
9984            next_offset += envelope_size;
9985
9986            // Decode the remaining unknown envelopes.
9987            while next_offset < end_offset {
9988                _next_ordinal_to_read += 1;
9989                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9990                next_offset += envelope_size;
9991            }
9992
9993            Ok(())
9994        }
9995    }
9996
9997    impl Nat64TrafficCounters {
9998        #[inline(always)]
9999        fn max_ordinal_present(&self) -> u64 {
10000            if let Some(_) = self.ipv6_to_ipv4_bytes {
10001                return 4;
10002            }
10003            if let Some(_) = self.ipv6_to_ipv4_packets {
10004                return 3;
10005            }
10006            if let Some(_) = self.ipv4_to_ipv6_bytes {
10007                return 2;
10008            }
10009            if let Some(_) = self.ipv4_to_ipv6_packets {
10010                return 1;
10011            }
10012            0
10013        }
10014    }
10015
10016    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
10017        type Borrowed<'a> = &'a Self;
10018        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10019            value
10020        }
10021    }
10022
10023    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
10024        type Owned = Self;
10025
10026        #[inline(always)]
10027        fn inline_align(_context: fidl::encoding::Context) -> usize {
10028            8
10029        }
10030
10031        #[inline(always)]
10032        fn inline_size(_context: fidl::encoding::Context) -> usize {
10033            16
10034        }
10035    }
10036
10037    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
10038        for &Nat64TrafficCounters
10039    {
10040        unsafe fn encode(
10041            self,
10042            encoder: &mut fidl::encoding::Encoder<'_, D>,
10043            offset: usize,
10044            mut depth: fidl::encoding::Depth,
10045        ) -> fidl::Result<()> {
10046            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
10047            // Vector header
10048            let max_ordinal: u64 = self.max_ordinal_present();
10049            encoder.write_num(max_ordinal, offset);
10050            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10051            // Calling encoder.out_of_line_offset(0) is not allowed.
10052            if max_ordinal == 0 {
10053                return Ok(());
10054            }
10055            depth.increment()?;
10056            let envelope_size = 8;
10057            let bytes_len = max_ordinal as usize * envelope_size;
10058            #[allow(unused_variables)]
10059            let offset = encoder.out_of_line_offset(bytes_len);
10060            let mut _prev_end_offset: usize = 0;
10061            if 1 > max_ordinal {
10062                return Ok(());
10063            }
10064
10065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10066            // are envelope_size bytes.
10067            let cur_offset: usize = (1 - 1) * envelope_size;
10068
10069            // Zero reserved fields.
10070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10071
10072            // Safety:
10073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10075            //   envelope_size bytes, there is always sufficient room.
10076            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10077                self.ipv4_to_ipv6_packets
10078                    .as_ref()
10079                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10080                encoder,
10081                offset + cur_offset,
10082                depth,
10083            )?;
10084
10085            _prev_end_offset = cur_offset + envelope_size;
10086            if 2 > max_ordinal {
10087                return Ok(());
10088            }
10089
10090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10091            // are envelope_size bytes.
10092            let cur_offset: usize = (2 - 1) * envelope_size;
10093
10094            // Zero reserved fields.
10095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10096
10097            // Safety:
10098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10100            //   envelope_size bytes, there is always sufficient room.
10101            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10102                self.ipv4_to_ipv6_bytes
10103                    .as_ref()
10104                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10105                encoder,
10106                offset + cur_offset,
10107                depth,
10108            )?;
10109
10110            _prev_end_offset = cur_offset + envelope_size;
10111            if 3 > max_ordinal {
10112                return Ok(());
10113            }
10114
10115            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10116            // are envelope_size bytes.
10117            let cur_offset: usize = (3 - 1) * envelope_size;
10118
10119            // Zero reserved fields.
10120            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10121
10122            // Safety:
10123            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10124            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10125            //   envelope_size bytes, there is always sufficient room.
10126            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10127                self.ipv6_to_ipv4_packets
10128                    .as_ref()
10129                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10130                encoder,
10131                offset + cur_offset,
10132                depth,
10133            )?;
10134
10135            _prev_end_offset = cur_offset + envelope_size;
10136            if 4 > max_ordinal {
10137                return Ok(());
10138            }
10139
10140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10141            // are envelope_size bytes.
10142            let cur_offset: usize = (4 - 1) * envelope_size;
10143
10144            // Zero reserved fields.
10145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10146
10147            // Safety:
10148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10150            //   envelope_size bytes, there is always sufficient room.
10151            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10152                self.ipv6_to_ipv4_bytes
10153                    .as_ref()
10154                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10155                encoder,
10156                offset + cur_offset,
10157                depth,
10158            )?;
10159
10160            _prev_end_offset = cur_offset + envelope_size;
10161
10162            Ok(())
10163        }
10164    }
10165
10166    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
10167        #[inline(always)]
10168        fn new_empty() -> Self {
10169            Self::default()
10170        }
10171
10172        unsafe fn decode(
10173            &mut self,
10174            decoder: &mut fidl::encoding::Decoder<'_, D>,
10175            offset: usize,
10176            mut depth: fidl::encoding::Depth,
10177        ) -> fidl::Result<()> {
10178            decoder.debug_check_bounds::<Self>(offset);
10179            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10180                None => return Err(fidl::Error::NotNullable),
10181                Some(len) => len,
10182            };
10183            // Calling decoder.out_of_line_offset(0) is not allowed.
10184            if len == 0 {
10185                return Ok(());
10186            };
10187            depth.increment()?;
10188            let envelope_size = 8;
10189            let bytes_len = len * envelope_size;
10190            let offset = decoder.out_of_line_offset(bytes_len)?;
10191            // Decode the envelope for each type.
10192            let mut _next_ordinal_to_read = 0;
10193            let mut next_offset = offset;
10194            let end_offset = offset + bytes_len;
10195            _next_ordinal_to_read += 1;
10196            if next_offset >= end_offset {
10197                return Ok(());
10198            }
10199
10200            // Decode unknown envelopes for gaps in ordinals.
10201            while _next_ordinal_to_read < 1 {
10202                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10203                _next_ordinal_to_read += 1;
10204                next_offset += envelope_size;
10205            }
10206
10207            let next_out_of_line = decoder.next_out_of_line();
10208            let handles_before = decoder.remaining_handles();
10209            if let Some((inlined, num_bytes, num_handles)) =
10210                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10211            {
10212                let member_inline_size =
10213                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10214                if inlined != (member_inline_size <= 4) {
10215                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10216                }
10217                let inner_offset;
10218                let mut inner_depth = depth.clone();
10219                if inlined {
10220                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10221                    inner_offset = next_offset;
10222                } else {
10223                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10224                    inner_depth.increment()?;
10225                }
10226                let val_ref =
10227                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10228                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10229                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10230                {
10231                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10232                }
10233                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10234                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10235                }
10236            }
10237
10238            next_offset += envelope_size;
10239            _next_ordinal_to_read += 1;
10240            if next_offset >= end_offset {
10241                return Ok(());
10242            }
10243
10244            // Decode unknown envelopes for gaps in ordinals.
10245            while _next_ordinal_to_read < 2 {
10246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10247                _next_ordinal_to_read += 1;
10248                next_offset += envelope_size;
10249            }
10250
10251            let next_out_of_line = decoder.next_out_of_line();
10252            let handles_before = decoder.remaining_handles();
10253            if let Some((inlined, num_bytes, num_handles)) =
10254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10255            {
10256                let member_inline_size =
10257                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10258                if inlined != (member_inline_size <= 4) {
10259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10260                }
10261                let inner_offset;
10262                let mut inner_depth = depth.clone();
10263                if inlined {
10264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10265                    inner_offset = next_offset;
10266                } else {
10267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10268                    inner_depth.increment()?;
10269                }
10270                let val_ref =
10271                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10272                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10274                {
10275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10276                }
10277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10279                }
10280            }
10281
10282            next_offset += envelope_size;
10283            _next_ordinal_to_read += 1;
10284            if next_offset >= end_offset {
10285                return Ok(());
10286            }
10287
10288            // Decode unknown envelopes for gaps in ordinals.
10289            while _next_ordinal_to_read < 3 {
10290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10291                _next_ordinal_to_read += 1;
10292                next_offset += envelope_size;
10293            }
10294
10295            let next_out_of_line = decoder.next_out_of_line();
10296            let handles_before = decoder.remaining_handles();
10297            if let Some((inlined, num_bytes, num_handles)) =
10298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10299            {
10300                let member_inline_size =
10301                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10302                if inlined != (member_inline_size <= 4) {
10303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10304                }
10305                let inner_offset;
10306                let mut inner_depth = depth.clone();
10307                if inlined {
10308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10309                    inner_offset = next_offset;
10310                } else {
10311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10312                    inner_depth.increment()?;
10313                }
10314                let val_ref =
10315                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10316                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10318                {
10319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10320                }
10321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10323                }
10324            }
10325
10326            next_offset += envelope_size;
10327            _next_ordinal_to_read += 1;
10328            if next_offset >= end_offset {
10329                return Ok(());
10330            }
10331
10332            // Decode unknown envelopes for gaps in ordinals.
10333            while _next_ordinal_to_read < 4 {
10334                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10335                _next_ordinal_to_read += 1;
10336                next_offset += envelope_size;
10337            }
10338
10339            let next_out_of_line = decoder.next_out_of_line();
10340            let handles_before = decoder.remaining_handles();
10341            if let Some((inlined, num_bytes, num_handles)) =
10342                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10343            {
10344                let member_inline_size =
10345                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10346                if inlined != (member_inline_size <= 4) {
10347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10348                }
10349                let inner_offset;
10350                let mut inner_depth = depth.clone();
10351                if inlined {
10352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10353                    inner_offset = next_offset;
10354                } else {
10355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10356                    inner_depth.increment()?;
10357                }
10358                let val_ref =
10359                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10360                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10362                {
10363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10364                }
10365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10367                }
10368            }
10369
10370            next_offset += envelope_size;
10371
10372            // Decode the remaining unknown envelopes.
10373            while next_offset < end_offset {
10374                _next_ordinal_to_read += 1;
10375                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10376                next_offset += envelope_size;
10377            }
10378
10379            Ok(())
10380        }
10381    }
10382
10383    impl NetworkScanParameters {
10384        #[inline(always)]
10385        fn max_ordinal_present(&self) -> u64 {
10386            if let Some(_) = self.tx_power_dbm {
10387                return 2;
10388            }
10389            if let Some(_) = self.channels {
10390                return 1;
10391            }
10392            0
10393        }
10394    }
10395
10396    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
10397        type Borrowed<'a> = &'a Self;
10398        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10399            value
10400        }
10401    }
10402
10403    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
10404        type Owned = Self;
10405
10406        #[inline(always)]
10407        fn inline_align(_context: fidl::encoding::Context) -> usize {
10408            8
10409        }
10410
10411        #[inline(always)]
10412        fn inline_size(_context: fidl::encoding::Context) -> usize {
10413            16
10414        }
10415    }
10416
10417    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
10418        for &NetworkScanParameters
10419    {
10420        unsafe fn encode(
10421            self,
10422            encoder: &mut fidl::encoding::Encoder<'_, D>,
10423            offset: usize,
10424            mut depth: fidl::encoding::Depth,
10425        ) -> fidl::Result<()> {
10426            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
10427            // Vector header
10428            let max_ordinal: u64 = self.max_ordinal_present();
10429            encoder.write_num(max_ordinal, offset);
10430            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10431            // Calling encoder.out_of_line_offset(0) is not allowed.
10432            if max_ordinal == 0 {
10433                return Ok(());
10434            }
10435            depth.increment()?;
10436            let envelope_size = 8;
10437            let bytes_len = max_ordinal as usize * envelope_size;
10438            #[allow(unused_variables)]
10439            let offset = encoder.out_of_line_offset(bytes_len);
10440            let mut _prev_end_offset: usize = 0;
10441            if 1 > max_ordinal {
10442                return Ok(());
10443            }
10444
10445            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10446            // are envelope_size bytes.
10447            let cur_offset: usize = (1 - 1) * envelope_size;
10448
10449            // Zero reserved fields.
10450            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10451
10452            // Safety:
10453            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10454            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10455            //   envelope_size bytes, there is always sufficient room.
10456            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
10457                self.channels.as_ref().map(
10458                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
10459                ),
10460                encoder,
10461                offset + cur_offset,
10462                depth,
10463            )?;
10464
10465            _prev_end_offset = cur_offset + envelope_size;
10466            if 2 > max_ordinal {
10467                return Ok(());
10468            }
10469
10470            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10471            // are envelope_size bytes.
10472            let cur_offset: usize = (2 - 1) * envelope_size;
10473
10474            // Zero reserved fields.
10475            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10476
10477            // Safety:
10478            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10479            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10480            //   envelope_size bytes, there is always sufficient room.
10481            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10482                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10483                encoder,
10484                offset + cur_offset,
10485                depth,
10486            )?;
10487
10488            _prev_end_offset = cur_offset + envelope_size;
10489
10490            Ok(())
10491        }
10492    }
10493
10494    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
10495        #[inline(always)]
10496        fn new_empty() -> Self {
10497            Self::default()
10498        }
10499
10500        unsafe fn decode(
10501            &mut self,
10502            decoder: &mut fidl::encoding::Decoder<'_, D>,
10503            offset: usize,
10504            mut depth: fidl::encoding::Depth,
10505        ) -> fidl::Result<()> {
10506            decoder.debug_check_bounds::<Self>(offset);
10507            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10508                None => return Err(fidl::Error::NotNullable),
10509                Some(len) => len,
10510            };
10511            // Calling decoder.out_of_line_offset(0) is not allowed.
10512            if len == 0 {
10513                return Ok(());
10514            };
10515            depth.increment()?;
10516            let envelope_size = 8;
10517            let bytes_len = len * envelope_size;
10518            let offset = decoder.out_of_line_offset(bytes_len)?;
10519            // Decode the envelope for each type.
10520            let mut _next_ordinal_to_read = 0;
10521            let mut next_offset = offset;
10522            let end_offset = offset + bytes_len;
10523            _next_ordinal_to_read += 1;
10524            if next_offset >= end_offset {
10525                return Ok(());
10526            }
10527
10528            // Decode unknown envelopes for gaps in ordinals.
10529            while _next_ordinal_to_read < 1 {
10530                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10531                _next_ordinal_to_read += 1;
10532                next_offset += envelope_size;
10533            }
10534
10535            let next_out_of_line = decoder.next_out_of_line();
10536            let handles_before = decoder.remaining_handles();
10537            if let Some((inlined, num_bytes, num_handles)) =
10538                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10539            {
10540                let member_inline_size =
10541                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
10542                        decoder.context,
10543                    );
10544                if inlined != (member_inline_size <= 4) {
10545                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10546                }
10547                let inner_offset;
10548                let mut inner_depth = depth.clone();
10549                if inlined {
10550                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10551                    inner_offset = next_offset;
10552                } else {
10553                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10554                    inner_depth.increment()?;
10555                }
10556                let val_ref = self
10557                    .channels
10558                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
10559                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
10560                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10561                {
10562                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10563                }
10564                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10565                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10566                }
10567            }
10568
10569            next_offset += envelope_size;
10570            _next_ordinal_to_read += 1;
10571            if next_offset >= end_offset {
10572                return Ok(());
10573            }
10574
10575            // Decode unknown envelopes for gaps in ordinals.
10576            while _next_ordinal_to_read < 2 {
10577                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10578                _next_ordinal_to_read += 1;
10579                next_offset += envelope_size;
10580            }
10581
10582            let next_out_of_line = decoder.next_out_of_line();
10583            let handles_before = decoder.remaining_handles();
10584            if let Some((inlined, num_bytes, num_handles)) =
10585                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10586            {
10587                let member_inline_size =
10588                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10589                if inlined != (member_inline_size <= 4) {
10590                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10591                }
10592                let inner_offset;
10593                let mut inner_depth = depth.clone();
10594                if inlined {
10595                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10596                    inner_offset = next_offset;
10597                } else {
10598                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10599                    inner_depth.increment()?;
10600                }
10601                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
10602                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
10603                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10604                {
10605                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10606                }
10607                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10608                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10609                }
10610            }
10611
10612            next_offset += envelope_size;
10613
10614            // Decode the remaining unknown envelopes.
10615            while next_offset < end_offset {
10616                _next_ordinal_to_read += 1;
10617                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10618                next_offset += envelope_size;
10619            }
10620
10621            Ok(())
10622        }
10623    }
10624
10625    impl OnMeshPrefix {
10626        #[inline(always)]
10627        fn max_ordinal_present(&self) -> u64 {
10628            if let Some(_) = self.slaac_valid {
10629                return 5;
10630            }
10631            if let Some(_) = self.slaac_preferred {
10632                return 4;
10633            }
10634            if let Some(_) = self.stable {
10635                return 3;
10636            }
10637            if let Some(_) = self.default_route_preference {
10638                return 2;
10639            }
10640            if let Some(_) = self.subnet {
10641                return 1;
10642            }
10643            0
10644        }
10645    }
10646
10647    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
10648        type Borrowed<'a> = &'a Self;
10649        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10650            value
10651        }
10652    }
10653
10654    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
10655        type Owned = Self;
10656
10657        #[inline(always)]
10658        fn inline_align(_context: fidl::encoding::Context) -> usize {
10659            8
10660        }
10661
10662        #[inline(always)]
10663        fn inline_size(_context: fidl::encoding::Context) -> usize {
10664            16
10665        }
10666    }
10667
10668    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
10669        for &OnMeshPrefix
10670    {
10671        unsafe fn encode(
10672            self,
10673            encoder: &mut fidl::encoding::Encoder<'_, D>,
10674            offset: usize,
10675            mut depth: fidl::encoding::Depth,
10676        ) -> fidl::Result<()> {
10677            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
10678            // Vector header
10679            let max_ordinal: u64 = self.max_ordinal_present();
10680            encoder.write_num(max_ordinal, offset);
10681            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10682            // Calling encoder.out_of_line_offset(0) is not allowed.
10683            if max_ordinal == 0 {
10684                return Ok(());
10685            }
10686            depth.increment()?;
10687            let envelope_size = 8;
10688            let bytes_len = max_ordinal as usize * envelope_size;
10689            #[allow(unused_variables)]
10690            let offset = encoder.out_of_line_offset(bytes_len);
10691            let mut _prev_end_offset: usize = 0;
10692            if 1 > max_ordinal {
10693                return Ok(());
10694            }
10695
10696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10697            // are envelope_size bytes.
10698            let cur_offset: usize = (1 - 1) * envelope_size;
10699
10700            // Zero reserved fields.
10701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10702
10703            // Safety:
10704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10706            //   envelope_size bytes, there is always sufficient room.
10707            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
10708            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
10709            encoder, offset + cur_offset, depth
10710        )?;
10711
10712            _prev_end_offset = cur_offset + envelope_size;
10713            if 2 > max_ordinal {
10714                return Ok(());
10715            }
10716
10717            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10718            // are envelope_size bytes.
10719            let cur_offset: usize = (2 - 1) * envelope_size;
10720
10721            // Zero reserved fields.
10722            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10723
10724            // Safety:
10725            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10726            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10727            //   envelope_size bytes, there is always sufficient room.
10728            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
10729                self.default_route_preference
10730                    .as_ref()
10731                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
10732                encoder,
10733                offset + cur_offset,
10734                depth,
10735            )?;
10736
10737            _prev_end_offset = cur_offset + envelope_size;
10738            if 3 > max_ordinal {
10739                return Ok(());
10740            }
10741
10742            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10743            // are envelope_size bytes.
10744            let cur_offset: usize = (3 - 1) * envelope_size;
10745
10746            // Zero reserved fields.
10747            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10748
10749            // Safety:
10750            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10751            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10752            //   envelope_size bytes, there is always sufficient room.
10753            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10754                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10755                encoder,
10756                offset + cur_offset,
10757                depth,
10758            )?;
10759
10760            _prev_end_offset = cur_offset + envelope_size;
10761            if 4 > max_ordinal {
10762                return Ok(());
10763            }
10764
10765            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10766            // are envelope_size bytes.
10767            let cur_offset: usize = (4 - 1) * envelope_size;
10768
10769            // Zero reserved fields.
10770            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10771
10772            // Safety:
10773            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10774            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10775            //   envelope_size bytes, there is always sufficient room.
10776            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10777                self.slaac_preferred
10778                    .as_ref()
10779                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10780                encoder,
10781                offset + cur_offset,
10782                depth,
10783            )?;
10784
10785            _prev_end_offset = cur_offset + envelope_size;
10786            if 5 > max_ordinal {
10787                return Ok(());
10788            }
10789
10790            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10791            // are envelope_size bytes.
10792            let cur_offset: usize = (5 - 1) * envelope_size;
10793
10794            // Zero reserved fields.
10795            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10796
10797            // Safety:
10798            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10799            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10800            //   envelope_size bytes, there is always sufficient room.
10801            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10802                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10803                encoder,
10804                offset + cur_offset,
10805                depth,
10806            )?;
10807
10808            _prev_end_offset = cur_offset + envelope_size;
10809
10810            Ok(())
10811        }
10812    }
10813
10814    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
10815        #[inline(always)]
10816        fn new_empty() -> Self {
10817            Self::default()
10818        }
10819
10820        unsafe fn decode(
10821            &mut self,
10822            decoder: &mut fidl::encoding::Decoder<'_, D>,
10823            offset: usize,
10824            mut depth: fidl::encoding::Depth,
10825        ) -> fidl::Result<()> {
10826            decoder.debug_check_bounds::<Self>(offset);
10827            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10828                None => return Err(fidl::Error::NotNullable),
10829                Some(len) => len,
10830            };
10831            // Calling decoder.out_of_line_offset(0) is not allowed.
10832            if len == 0 {
10833                return Ok(());
10834            };
10835            depth.increment()?;
10836            let envelope_size = 8;
10837            let bytes_len = len * envelope_size;
10838            let offset = decoder.out_of_line_offset(bytes_len)?;
10839            // Decode the envelope for each type.
10840            let mut _next_ordinal_to_read = 0;
10841            let mut next_offset = offset;
10842            let end_offset = offset + bytes_len;
10843            _next_ordinal_to_read += 1;
10844            if next_offset >= end_offset {
10845                return Ok(());
10846            }
10847
10848            // Decode unknown envelopes for gaps in ordinals.
10849            while _next_ordinal_to_read < 1 {
10850                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10851                _next_ordinal_to_read += 1;
10852                next_offset += envelope_size;
10853            }
10854
10855            let next_out_of_line = decoder.next_out_of_line();
10856            let handles_before = decoder.remaining_handles();
10857            if let Some((inlined, num_bytes, num_handles)) =
10858                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10859            {
10860                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10861                if inlined != (member_inline_size <= 4) {
10862                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10863                }
10864                let inner_offset;
10865                let mut inner_depth = depth.clone();
10866                if inlined {
10867                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10868                    inner_offset = next_offset;
10869                } else {
10870                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10871                    inner_depth.increment()?;
10872                }
10873                let val_ref = self.subnet.get_or_insert_with(|| {
10874                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
10875                });
10876                fidl::decode!(
10877                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
10878                    D,
10879                    val_ref,
10880                    decoder,
10881                    inner_offset,
10882                    inner_depth
10883                )?;
10884                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10885                {
10886                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10887                }
10888                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10889                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10890                }
10891            }
10892
10893            next_offset += envelope_size;
10894            _next_ordinal_to_read += 1;
10895            if next_offset >= end_offset {
10896                return Ok(());
10897            }
10898
10899            // Decode unknown envelopes for gaps in ordinals.
10900            while _next_ordinal_to_read < 2 {
10901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10902                _next_ordinal_to_read += 1;
10903                next_offset += envelope_size;
10904            }
10905
10906            let next_out_of_line = decoder.next_out_of_line();
10907            let handles_before = decoder.remaining_handles();
10908            if let Some((inlined, num_bytes, num_handles)) =
10909                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10910            {
10911                let member_inline_size =
10912                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10913                if inlined != (member_inline_size <= 4) {
10914                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10915                }
10916                let inner_offset;
10917                let mut inner_depth = depth.clone();
10918                if inlined {
10919                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10920                    inner_offset = next_offset;
10921                } else {
10922                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10923                    inner_depth.increment()?;
10924                }
10925                let val_ref = self
10926                    .default_route_preference
10927                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
10928                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
10929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10930                {
10931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10932                }
10933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10935                }
10936            }
10937
10938            next_offset += envelope_size;
10939            _next_ordinal_to_read += 1;
10940            if next_offset >= end_offset {
10941                return Ok(());
10942            }
10943
10944            // Decode unknown envelopes for gaps in ordinals.
10945            while _next_ordinal_to_read < 3 {
10946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10947                _next_ordinal_to_read += 1;
10948                next_offset += envelope_size;
10949            }
10950
10951            let next_out_of_line = decoder.next_out_of_line();
10952            let handles_before = decoder.remaining_handles();
10953            if let Some((inlined, num_bytes, num_handles)) =
10954                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10955            {
10956                let member_inline_size =
10957                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10958                if inlined != (member_inline_size <= 4) {
10959                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10960                }
10961                let inner_offset;
10962                let mut inner_depth = depth.clone();
10963                if inlined {
10964                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10965                    inner_offset = next_offset;
10966                } else {
10967                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10968                    inner_depth.increment()?;
10969                }
10970                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
10971                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10972                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10973                {
10974                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10975                }
10976                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10977                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10978                }
10979            }
10980
10981            next_offset += envelope_size;
10982            _next_ordinal_to_read += 1;
10983            if next_offset >= end_offset {
10984                return Ok(());
10985            }
10986
10987            // Decode unknown envelopes for gaps in ordinals.
10988            while _next_ordinal_to_read < 4 {
10989                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10990                _next_ordinal_to_read += 1;
10991                next_offset += envelope_size;
10992            }
10993
10994            let next_out_of_line = decoder.next_out_of_line();
10995            let handles_before = decoder.remaining_handles();
10996            if let Some((inlined, num_bytes, num_handles)) =
10997                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10998            {
10999                let member_inline_size =
11000                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11001                if inlined != (member_inline_size <= 4) {
11002                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11003                }
11004                let inner_offset;
11005                let mut inner_depth = depth.clone();
11006                if inlined {
11007                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11008                    inner_offset = next_offset;
11009                } else {
11010                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11011                    inner_depth.increment()?;
11012                }
11013                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
11014                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11015                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11016                {
11017                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11018                }
11019                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11020                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11021                }
11022            }
11023
11024            next_offset += envelope_size;
11025            _next_ordinal_to_read += 1;
11026            if next_offset >= end_offset {
11027                return Ok(());
11028            }
11029
11030            // Decode unknown envelopes for gaps in ordinals.
11031            while _next_ordinal_to_read < 5 {
11032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11033                _next_ordinal_to_read += 1;
11034                next_offset += envelope_size;
11035            }
11036
11037            let next_out_of_line = decoder.next_out_of_line();
11038            let handles_before = decoder.remaining_handles();
11039            if let Some((inlined, num_bytes, num_handles)) =
11040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11041            {
11042                let member_inline_size =
11043                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11044                if inlined != (member_inline_size <= 4) {
11045                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11046                }
11047                let inner_offset;
11048                let mut inner_depth = depth.clone();
11049                if inlined {
11050                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11051                    inner_offset = next_offset;
11052                } else {
11053                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11054                    inner_depth.increment()?;
11055                }
11056                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
11057                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11058                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11059                {
11060                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11061                }
11062                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11063                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11064                }
11065            }
11066
11067            next_offset += envelope_size;
11068
11069            // Decode the remaining unknown envelopes.
11070            while next_offset < end_offset {
11071                _next_ordinal_to_read += 1;
11072                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11073                next_offset += envelope_size;
11074            }
11075
11076            Ok(())
11077        }
11078    }
11079
11080    impl PdProcessedRaInfo {
11081        #[inline(always)]
11082        fn max_ordinal_present(&self) -> u64 {
11083            if let Some(_) = self.last_platform_ra_msec {
11084                return 3;
11085            }
11086            if let Some(_) = self.num_platform_pio_processed {
11087                return 2;
11088            }
11089            if let Some(_) = self.num_platform_ra_received {
11090                return 1;
11091            }
11092            0
11093        }
11094    }
11095
11096    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
11097        type Borrowed<'a> = &'a Self;
11098        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11099            value
11100        }
11101    }
11102
11103    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
11104        type Owned = Self;
11105
11106        #[inline(always)]
11107        fn inline_align(_context: fidl::encoding::Context) -> usize {
11108            8
11109        }
11110
11111        #[inline(always)]
11112        fn inline_size(_context: fidl::encoding::Context) -> usize {
11113            16
11114        }
11115    }
11116
11117    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
11118        for &PdProcessedRaInfo
11119    {
11120        unsafe fn encode(
11121            self,
11122            encoder: &mut fidl::encoding::Encoder<'_, D>,
11123            offset: usize,
11124            mut depth: fidl::encoding::Depth,
11125        ) -> fidl::Result<()> {
11126            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
11127            // Vector header
11128            let max_ordinal: u64 = self.max_ordinal_present();
11129            encoder.write_num(max_ordinal, offset);
11130            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11131            // Calling encoder.out_of_line_offset(0) is not allowed.
11132            if max_ordinal == 0 {
11133                return Ok(());
11134            }
11135            depth.increment()?;
11136            let envelope_size = 8;
11137            let bytes_len = max_ordinal as usize * envelope_size;
11138            #[allow(unused_variables)]
11139            let offset = encoder.out_of_line_offset(bytes_len);
11140            let mut _prev_end_offset: usize = 0;
11141            if 1 > max_ordinal {
11142                return Ok(());
11143            }
11144
11145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11146            // are envelope_size bytes.
11147            let cur_offset: usize = (1 - 1) * envelope_size;
11148
11149            // Zero reserved fields.
11150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11151
11152            // Safety:
11153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11155            //   envelope_size bytes, there is always sufficient room.
11156            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11157                self.num_platform_ra_received
11158                    .as_ref()
11159                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11160                encoder,
11161                offset + cur_offset,
11162                depth,
11163            )?;
11164
11165            _prev_end_offset = cur_offset + envelope_size;
11166            if 2 > max_ordinal {
11167                return Ok(());
11168            }
11169
11170            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11171            // are envelope_size bytes.
11172            let cur_offset: usize = (2 - 1) * envelope_size;
11173
11174            // Zero reserved fields.
11175            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11176
11177            // Safety:
11178            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11179            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11180            //   envelope_size bytes, there is always sufficient room.
11181            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11182                self.num_platform_pio_processed
11183                    .as_ref()
11184                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11185                encoder,
11186                offset + cur_offset,
11187                depth,
11188            )?;
11189
11190            _prev_end_offset = cur_offset + envelope_size;
11191            if 3 > max_ordinal {
11192                return Ok(());
11193            }
11194
11195            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11196            // are envelope_size bytes.
11197            let cur_offset: usize = (3 - 1) * envelope_size;
11198
11199            // Zero reserved fields.
11200            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11201
11202            // Safety:
11203            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11204            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11205            //   envelope_size bytes, there is always sufficient room.
11206            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11207                self.last_platform_ra_msec
11208                    .as_ref()
11209                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11210                encoder,
11211                offset + cur_offset,
11212                depth,
11213            )?;
11214
11215            _prev_end_offset = cur_offset + envelope_size;
11216
11217            Ok(())
11218        }
11219    }
11220
11221    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
11222        #[inline(always)]
11223        fn new_empty() -> Self {
11224            Self::default()
11225        }
11226
11227        unsafe fn decode(
11228            &mut self,
11229            decoder: &mut fidl::encoding::Decoder<'_, D>,
11230            offset: usize,
11231            mut depth: fidl::encoding::Depth,
11232        ) -> fidl::Result<()> {
11233            decoder.debug_check_bounds::<Self>(offset);
11234            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11235                None => return Err(fidl::Error::NotNullable),
11236                Some(len) => len,
11237            };
11238            // Calling decoder.out_of_line_offset(0) is not allowed.
11239            if len == 0 {
11240                return Ok(());
11241            };
11242            depth.increment()?;
11243            let envelope_size = 8;
11244            let bytes_len = len * envelope_size;
11245            let offset = decoder.out_of_line_offset(bytes_len)?;
11246            // Decode the envelope for each type.
11247            let mut _next_ordinal_to_read = 0;
11248            let mut next_offset = offset;
11249            let end_offset = offset + bytes_len;
11250            _next_ordinal_to_read += 1;
11251            if next_offset >= end_offset {
11252                return Ok(());
11253            }
11254
11255            // Decode unknown envelopes for gaps in ordinals.
11256            while _next_ordinal_to_read < 1 {
11257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11258                _next_ordinal_to_read += 1;
11259                next_offset += envelope_size;
11260            }
11261
11262            let next_out_of_line = decoder.next_out_of_line();
11263            let handles_before = decoder.remaining_handles();
11264            if let Some((inlined, num_bytes, num_handles)) =
11265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11266            {
11267                let member_inline_size =
11268                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11269                if inlined != (member_inline_size <= 4) {
11270                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11271                }
11272                let inner_offset;
11273                let mut inner_depth = depth.clone();
11274                if inlined {
11275                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11276                    inner_offset = next_offset;
11277                } else {
11278                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11279                    inner_depth.increment()?;
11280                }
11281                let val_ref =
11282                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
11283                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11285                {
11286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11287                }
11288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11290                }
11291            }
11292
11293            next_offset += envelope_size;
11294            _next_ordinal_to_read += 1;
11295            if next_offset >= end_offset {
11296                return Ok(());
11297            }
11298
11299            // Decode unknown envelopes for gaps in ordinals.
11300            while _next_ordinal_to_read < 2 {
11301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11302                _next_ordinal_to_read += 1;
11303                next_offset += envelope_size;
11304            }
11305
11306            let next_out_of_line = decoder.next_out_of_line();
11307            let handles_before = decoder.remaining_handles();
11308            if let Some((inlined, num_bytes, num_handles)) =
11309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11310            {
11311                let member_inline_size =
11312                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11313                if inlined != (member_inline_size <= 4) {
11314                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11315                }
11316                let inner_offset;
11317                let mut inner_depth = depth.clone();
11318                if inlined {
11319                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11320                    inner_offset = next_offset;
11321                } else {
11322                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11323                    inner_depth.increment()?;
11324                }
11325                let val_ref =
11326                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
11327                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11328                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11329                {
11330                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11331                }
11332                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11333                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11334                }
11335            }
11336
11337            next_offset += envelope_size;
11338            _next_ordinal_to_read += 1;
11339            if next_offset >= end_offset {
11340                return Ok(());
11341            }
11342
11343            // Decode unknown envelopes for gaps in ordinals.
11344            while _next_ordinal_to_read < 3 {
11345                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11346                _next_ordinal_to_read += 1;
11347                next_offset += envelope_size;
11348            }
11349
11350            let next_out_of_line = decoder.next_out_of_line();
11351            let handles_before = decoder.remaining_handles();
11352            if let Some((inlined, num_bytes, num_handles)) =
11353                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11354            {
11355                let member_inline_size =
11356                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11357                if inlined != (member_inline_size <= 4) {
11358                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11359                }
11360                let inner_offset;
11361                let mut inner_depth = depth.clone();
11362                if inlined {
11363                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11364                    inner_offset = next_offset;
11365                } else {
11366                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11367                    inner_depth.increment()?;
11368                }
11369                let val_ref =
11370                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
11371                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11372                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11373                {
11374                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11375                }
11376                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11377                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11378                }
11379            }
11380
11381            next_offset += envelope_size;
11382
11383            // Decode the remaining unknown envelopes.
11384            while next_offset < end_offset {
11385                _next_ordinal_to_read += 1;
11386                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11387                next_offset += envelope_size;
11388            }
11389
11390            Ok(())
11391        }
11392    }
11393
11394    impl SrpServerInfo {
11395        #[inline(always)]
11396        fn max_ordinal_present(&self) -> u64 {
11397            if let Some(_) = self.services_registration {
11398                return 6;
11399            }
11400            if let Some(_) = self.hosts_registration {
11401                return 5;
11402            }
11403            if let Some(_) = self.response_counters {
11404                return 4;
11405            }
11406            if let Some(_) = self.address_mode {
11407                return 3;
11408            }
11409            if let Some(_) = self.port {
11410                return 2;
11411            }
11412            if let Some(_) = self.state {
11413                return 1;
11414            }
11415            0
11416        }
11417    }
11418
11419    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
11420        type Borrowed<'a> = &'a Self;
11421        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11422            value
11423        }
11424    }
11425
11426    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
11427        type Owned = Self;
11428
11429        #[inline(always)]
11430        fn inline_align(_context: fidl::encoding::Context) -> usize {
11431            8
11432        }
11433
11434        #[inline(always)]
11435        fn inline_size(_context: fidl::encoding::Context) -> usize {
11436            16
11437        }
11438    }
11439
11440    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
11441        for &SrpServerInfo
11442    {
11443        unsafe fn encode(
11444            self,
11445            encoder: &mut fidl::encoding::Encoder<'_, D>,
11446            offset: usize,
11447            mut depth: fidl::encoding::Depth,
11448        ) -> fidl::Result<()> {
11449            encoder.debug_check_bounds::<SrpServerInfo>(offset);
11450            // Vector header
11451            let max_ordinal: u64 = self.max_ordinal_present();
11452            encoder.write_num(max_ordinal, offset);
11453            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11454            // Calling encoder.out_of_line_offset(0) is not allowed.
11455            if max_ordinal == 0 {
11456                return Ok(());
11457            }
11458            depth.increment()?;
11459            let envelope_size = 8;
11460            let bytes_len = max_ordinal as usize * envelope_size;
11461            #[allow(unused_variables)]
11462            let offset = encoder.out_of_line_offset(bytes_len);
11463            let mut _prev_end_offset: usize = 0;
11464            if 1 > max_ordinal {
11465                return Ok(());
11466            }
11467
11468            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11469            // are envelope_size bytes.
11470            let cur_offset: usize = (1 - 1) * envelope_size;
11471
11472            // Zero reserved fields.
11473            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11474
11475            // Safety:
11476            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11477            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11478            //   envelope_size bytes, there is always sufficient room.
11479            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
11480                self.state
11481                    .as_ref()
11482                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
11483                encoder,
11484                offset + cur_offset,
11485                depth,
11486            )?;
11487
11488            _prev_end_offset = cur_offset + envelope_size;
11489            if 2 > max_ordinal {
11490                return Ok(());
11491            }
11492
11493            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11494            // are envelope_size bytes.
11495            let cur_offset: usize = (2 - 1) * envelope_size;
11496
11497            // Zero reserved fields.
11498            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11499
11500            // Safety:
11501            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11502            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11503            //   envelope_size bytes, there is always sufficient room.
11504            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11505                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11506                encoder,
11507                offset + cur_offset,
11508                depth,
11509            )?;
11510
11511            _prev_end_offset = cur_offset + envelope_size;
11512            if 3 > max_ordinal {
11513                return Ok(());
11514            }
11515
11516            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11517            // are envelope_size bytes.
11518            let cur_offset: usize = (3 - 1) * envelope_size;
11519
11520            // Zero reserved fields.
11521            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11522
11523            // Safety:
11524            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11525            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11526            //   envelope_size bytes, there is always sufficient room.
11527            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
11528                self.address_mode
11529                    .as_ref()
11530                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
11531                encoder,
11532                offset + cur_offset,
11533                depth,
11534            )?;
11535
11536            _prev_end_offset = cur_offset + envelope_size;
11537            if 4 > max_ordinal {
11538                return Ok(());
11539            }
11540
11541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11542            // are envelope_size bytes.
11543            let cur_offset: usize = (4 - 1) * envelope_size;
11544
11545            // Zero reserved fields.
11546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11547
11548            // Safety:
11549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11551            //   envelope_size bytes, there is always sufficient room.
11552            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
11553                self.response_counters
11554                    .as_ref()
11555                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
11556                encoder,
11557                offset + cur_offset,
11558                depth,
11559            )?;
11560
11561            _prev_end_offset = cur_offset + envelope_size;
11562            if 5 > max_ordinal {
11563                return Ok(());
11564            }
11565
11566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11567            // are envelope_size bytes.
11568            let cur_offset: usize = (5 - 1) * envelope_size;
11569
11570            // Zero reserved fields.
11571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11572
11573            // Safety:
11574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11576            //   envelope_size bytes, there is always sufficient room.
11577            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11578                self.hosts_registration
11579                    .as_ref()
11580                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11581                encoder,
11582                offset + cur_offset,
11583                depth,
11584            )?;
11585
11586            _prev_end_offset = cur_offset + envelope_size;
11587            if 6 > max_ordinal {
11588                return Ok(());
11589            }
11590
11591            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11592            // are envelope_size bytes.
11593            let cur_offset: usize = (6 - 1) * envelope_size;
11594
11595            // Zero reserved fields.
11596            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11597
11598            // Safety:
11599            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11600            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11601            //   envelope_size bytes, there is always sufficient room.
11602            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11603                self.services_registration
11604                    .as_ref()
11605                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11606                encoder,
11607                offset + cur_offset,
11608                depth,
11609            )?;
11610
11611            _prev_end_offset = cur_offset + envelope_size;
11612
11613            Ok(())
11614        }
11615    }
11616
11617    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
11618        #[inline(always)]
11619        fn new_empty() -> Self {
11620            Self::default()
11621        }
11622
11623        unsafe fn decode(
11624            &mut self,
11625            decoder: &mut fidl::encoding::Decoder<'_, D>,
11626            offset: usize,
11627            mut depth: fidl::encoding::Depth,
11628        ) -> fidl::Result<()> {
11629            decoder.debug_check_bounds::<Self>(offset);
11630            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11631                None => return Err(fidl::Error::NotNullable),
11632                Some(len) => len,
11633            };
11634            // Calling decoder.out_of_line_offset(0) is not allowed.
11635            if len == 0 {
11636                return Ok(());
11637            };
11638            depth.increment()?;
11639            let envelope_size = 8;
11640            let bytes_len = len * envelope_size;
11641            let offset = decoder.out_of_line_offset(bytes_len)?;
11642            // Decode the envelope for each type.
11643            let mut _next_ordinal_to_read = 0;
11644            let mut next_offset = offset;
11645            let end_offset = offset + bytes_len;
11646            _next_ordinal_to_read += 1;
11647            if next_offset >= end_offset {
11648                return Ok(());
11649            }
11650
11651            // Decode unknown envelopes for gaps in ordinals.
11652            while _next_ordinal_to_read < 1 {
11653                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11654                _next_ordinal_to_read += 1;
11655                next_offset += envelope_size;
11656            }
11657
11658            let next_out_of_line = decoder.next_out_of_line();
11659            let handles_before = decoder.remaining_handles();
11660            if let Some((inlined, num_bytes, num_handles)) =
11661                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11662            {
11663                let member_inline_size =
11664                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11665                if inlined != (member_inline_size <= 4) {
11666                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11667                }
11668                let inner_offset;
11669                let mut inner_depth = depth.clone();
11670                if inlined {
11671                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11672                    inner_offset = next_offset;
11673                } else {
11674                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11675                    inner_depth.increment()?;
11676                }
11677                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
11678                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
11679                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11680                {
11681                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11682                }
11683                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11684                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11685                }
11686            }
11687
11688            next_offset += envelope_size;
11689            _next_ordinal_to_read += 1;
11690            if next_offset >= end_offset {
11691                return Ok(());
11692            }
11693
11694            // Decode unknown envelopes for gaps in ordinals.
11695            while _next_ordinal_to_read < 2 {
11696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11697                _next_ordinal_to_read += 1;
11698                next_offset += envelope_size;
11699            }
11700
11701            let next_out_of_line = decoder.next_out_of_line();
11702            let handles_before = decoder.remaining_handles();
11703            if let Some((inlined, num_bytes, num_handles)) =
11704                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11705            {
11706                let member_inline_size =
11707                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11708                if inlined != (member_inline_size <= 4) {
11709                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11710                }
11711                let inner_offset;
11712                let mut inner_depth = depth.clone();
11713                if inlined {
11714                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11715                    inner_offset = next_offset;
11716                } else {
11717                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11718                    inner_depth.increment()?;
11719                }
11720                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
11721                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11722                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11723                {
11724                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11725                }
11726                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11727                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11728                }
11729            }
11730
11731            next_offset += envelope_size;
11732            _next_ordinal_to_read += 1;
11733            if next_offset >= end_offset {
11734                return Ok(());
11735            }
11736
11737            // Decode unknown envelopes for gaps in ordinals.
11738            while _next_ordinal_to_read < 3 {
11739                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11740                _next_ordinal_to_read += 1;
11741                next_offset += envelope_size;
11742            }
11743
11744            let next_out_of_line = decoder.next_out_of_line();
11745            let handles_before = decoder.remaining_handles();
11746            if let Some((inlined, num_bytes, num_handles)) =
11747                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11748            {
11749                let member_inline_size =
11750                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
11751                        decoder.context,
11752                    );
11753                if inlined != (member_inline_size <= 4) {
11754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11755                }
11756                let inner_offset;
11757                let mut inner_depth = depth.clone();
11758                if inlined {
11759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11760                    inner_offset = next_offset;
11761                } else {
11762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11763                    inner_depth.increment()?;
11764                }
11765                let val_ref = self
11766                    .address_mode
11767                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
11768                fidl::decode!(
11769                    SrpServerAddressMode,
11770                    D,
11771                    val_ref,
11772                    decoder,
11773                    inner_offset,
11774                    inner_depth
11775                )?;
11776                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11777                {
11778                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11779                }
11780                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11781                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11782                }
11783            }
11784
11785            next_offset += envelope_size;
11786            _next_ordinal_to_read += 1;
11787            if next_offset >= end_offset {
11788                return Ok(());
11789            }
11790
11791            // Decode unknown envelopes for gaps in ordinals.
11792            while _next_ordinal_to_read < 4 {
11793                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11794                _next_ordinal_to_read += 1;
11795                next_offset += envelope_size;
11796            }
11797
11798            let next_out_of_line = decoder.next_out_of_line();
11799            let handles_before = decoder.remaining_handles();
11800            if let Some((inlined, num_bytes, num_handles)) =
11801                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11802            {
11803                let member_inline_size =
11804                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
11805                        decoder.context,
11806                    );
11807                if inlined != (member_inline_size <= 4) {
11808                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11809                }
11810                let inner_offset;
11811                let mut inner_depth = depth.clone();
11812                if inlined {
11813                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11814                    inner_offset = next_offset;
11815                } else {
11816                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11817                    inner_depth.increment()?;
11818                }
11819                let val_ref = self
11820                    .response_counters
11821                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
11822                fidl::decode!(
11823                    SrpServerResponseCounters,
11824                    D,
11825                    val_ref,
11826                    decoder,
11827                    inner_offset,
11828                    inner_depth
11829                )?;
11830                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11831                {
11832                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11833                }
11834                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11835                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11836                }
11837            }
11838
11839            next_offset += envelope_size;
11840            _next_ordinal_to_read += 1;
11841            if next_offset >= end_offset {
11842                return Ok(());
11843            }
11844
11845            // Decode unknown envelopes for gaps in ordinals.
11846            while _next_ordinal_to_read < 5 {
11847                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11848                _next_ordinal_to_read += 1;
11849                next_offset += envelope_size;
11850            }
11851
11852            let next_out_of_line = decoder.next_out_of_line();
11853            let handles_before = decoder.remaining_handles();
11854            if let Some((inlined, num_bytes, num_handles)) =
11855                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11856            {
11857                let member_inline_size =
11858                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11859                        decoder.context,
11860                    );
11861                if inlined != (member_inline_size <= 4) {
11862                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11863                }
11864                let inner_offset;
11865                let mut inner_depth = depth.clone();
11866                if inlined {
11867                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11868                    inner_offset = next_offset;
11869                } else {
11870                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11871                    inner_depth.increment()?;
11872                }
11873                let val_ref = self
11874                    .hosts_registration
11875                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11876                fidl::decode!(
11877                    SrpServerRegistration,
11878                    D,
11879                    val_ref,
11880                    decoder,
11881                    inner_offset,
11882                    inner_depth
11883                )?;
11884                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11885                {
11886                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11887                }
11888                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11889                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11890                }
11891            }
11892
11893            next_offset += envelope_size;
11894            _next_ordinal_to_read += 1;
11895            if next_offset >= end_offset {
11896                return Ok(());
11897            }
11898
11899            // Decode unknown envelopes for gaps in ordinals.
11900            while _next_ordinal_to_read < 6 {
11901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11902                _next_ordinal_to_read += 1;
11903                next_offset += envelope_size;
11904            }
11905
11906            let next_out_of_line = decoder.next_out_of_line();
11907            let handles_before = decoder.remaining_handles();
11908            if let Some((inlined, num_bytes, num_handles)) =
11909                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11910            {
11911                let member_inline_size =
11912                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11913                        decoder.context,
11914                    );
11915                if inlined != (member_inline_size <= 4) {
11916                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11917                }
11918                let inner_offset;
11919                let mut inner_depth = depth.clone();
11920                if inlined {
11921                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11922                    inner_offset = next_offset;
11923                } else {
11924                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11925                    inner_depth.increment()?;
11926                }
11927                let val_ref = self
11928                    .services_registration
11929                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11930                fidl::decode!(
11931                    SrpServerRegistration,
11932                    D,
11933                    val_ref,
11934                    decoder,
11935                    inner_offset,
11936                    inner_depth
11937                )?;
11938                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11939                {
11940                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11941                }
11942                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11943                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11944                }
11945            }
11946
11947            next_offset += envelope_size;
11948
11949            // Decode the remaining unknown envelopes.
11950            while next_offset < end_offset {
11951                _next_ordinal_to_read += 1;
11952                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11953                next_offset += envelope_size;
11954            }
11955
11956            Ok(())
11957        }
11958    }
11959
11960    impl SrpServerRegistration {
11961        #[inline(always)]
11962        fn max_ordinal_present(&self) -> u64 {
11963            if let Some(_) = self.remaining_key_lease_time_total {
11964                return 6;
11965            }
11966            if let Some(_) = self.remaining_lease_time_total {
11967                return 5;
11968            }
11969            if let Some(_) = self.key_lease_time_total {
11970                return 4;
11971            }
11972            if let Some(_) = self.lease_time_total {
11973                return 3;
11974            }
11975            if let Some(_) = self.deleted_count {
11976                return 2;
11977            }
11978            if let Some(_) = self.fresh_count {
11979                return 1;
11980            }
11981            0
11982        }
11983    }
11984
11985    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
11986        type Borrowed<'a> = &'a Self;
11987        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11988            value
11989        }
11990    }
11991
11992    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
11993        type Owned = Self;
11994
11995        #[inline(always)]
11996        fn inline_align(_context: fidl::encoding::Context) -> usize {
11997            8
11998        }
11999
12000        #[inline(always)]
12001        fn inline_size(_context: fidl::encoding::Context) -> usize {
12002            16
12003        }
12004    }
12005
12006    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
12007        for &SrpServerRegistration
12008    {
12009        unsafe fn encode(
12010            self,
12011            encoder: &mut fidl::encoding::Encoder<'_, D>,
12012            offset: usize,
12013            mut depth: fidl::encoding::Depth,
12014        ) -> fidl::Result<()> {
12015            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
12016            // Vector header
12017            let max_ordinal: u64 = self.max_ordinal_present();
12018            encoder.write_num(max_ordinal, offset);
12019            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12020            // Calling encoder.out_of_line_offset(0) is not allowed.
12021            if max_ordinal == 0 {
12022                return Ok(());
12023            }
12024            depth.increment()?;
12025            let envelope_size = 8;
12026            let bytes_len = max_ordinal as usize * envelope_size;
12027            #[allow(unused_variables)]
12028            let offset = encoder.out_of_line_offset(bytes_len);
12029            let mut _prev_end_offset: usize = 0;
12030            if 1 > max_ordinal {
12031                return Ok(());
12032            }
12033
12034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12035            // are envelope_size bytes.
12036            let cur_offset: usize = (1 - 1) * envelope_size;
12037
12038            // Zero reserved fields.
12039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12040
12041            // Safety:
12042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12044            //   envelope_size bytes, there is always sufficient room.
12045            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12046                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12047                encoder,
12048                offset + cur_offset,
12049                depth,
12050            )?;
12051
12052            _prev_end_offset = cur_offset + envelope_size;
12053            if 2 > max_ordinal {
12054                return Ok(());
12055            }
12056
12057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12058            // are envelope_size bytes.
12059            let cur_offset: usize = (2 - 1) * envelope_size;
12060
12061            // Zero reserved fields.
12062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12063
12064            // Safety:
12065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12067            //   envelope_size bytes, there is always sufficient room.
12068            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12069                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12070                encoder,
12071                offset + cur_offset,
12072                depth,
12073            )?;
12074
12075            _prev_end_offset = cur_offset + envelope_size;
12076            if 3 > max_ordinal {
12077                return Ok(());
12078            }
12079
12080            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12081            // are envelope_size bytes.
12082            let cur_offset: usize = (3 - 1) * envelope_size;
12083
12084            // Zero reserved fields.
12085            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12086
12087            // Safety:
12088            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12089            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12090            //   envelope_size bytes, there is always sufficient room.
12091            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12092                self.lease_time_total
12093                    .as_ref()
12094                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12095                encoder,
12096                offset + cur_offset,
12097                depth,
12098            )?;
12099
12100            _prev_end_offset = cur_offset + envelope_size;
12101            if 4 > max_ordinal {
12102                return Ok(());
12103            }
12104
12105            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12106            // are envelope_size bytes.
12107            let cur_offset: usize = (4 - 1) * envelope_size;
12108
12109            // Zero reserved fields.
12110            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12111
12112            // Safety:
12113            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12114            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12115            //   envelope_size bytes, there is always sufficient room.
12116            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12117                self.key_lease_time_total
12118                    .as_ref()
12119                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12120                encoder,
12121                offset + cur_offset,
12122                depth,
12123            )?;
12124
12125            _prev_end_offset = cur_offset + envelope_size;
12126            if 5 > max_ordinal {
12127                return Ok(());
12128            }
12129
12130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12131            // are envelope_size bytes.
12132            let cur_offset: usize = (5 - 1) * envelope_size;
12133
12134            // Zero reserved fields.
12135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12136
12137            // Safety:
12138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12140            //   envelope_size bytes, there is always sufficient room.
12141            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12142                self.remaining_lease_time_total
12143                    .as_ref()
12144                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12145                encoder,
12146                offset + cur_offset,
12147                depth,
12148            )?;
12149
12150            _prev_end_offset = cur_offset + envelope_size;
12151            if 6 > max_ordinal {
12152                return Ok(());
12153            }
12154
12155            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12156            // are envelope_size bytes.
12157            let cur_offset: usize = (6 - 1) * envelope_size;
12158
12159            // Zero reserved fields.
12160            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12161
12162            // Safety:
12163            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12164            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12165            //   envelope_size bytes, there is always sufficient room.
12166            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12167                self.remaining_key_lease_time_total
12168                    .as_ref()
12169                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12170                encoder,
12171                offset + cur_offset,
12172                depth,
12173            )?;
12174
12175            _prev_end_offset = cur_offset + envelope_size;
12176
12177            Ok(())
12178        }
12179    }
12180
12181    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
12182        #[inline(always)]
12183        fn new_empty() -> Self {
12184            Self::default()
12185        }
12186
12187        unsafe fn decode(
12188            &mut self,
12189            decoder: &mut fidl::encoding::Decoder<'_, D>,
12190            offset: usize,
12191            mut depth: fidl::encoding::Depth,
12192        ) -> fidl::Result<()> {
12193            decoder.debug_check_bounds::<Self>(offset);
12194            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12195                None => return Err(fidl::Error::NotNullable),
12196                Some(len) => len,
12197            };
12198            // Calling decoder.out_of_line_offset(0) is not allowed.
12199            if len == 0 {
12200                return Ok(());
12201            };
12202            depth.increment()?;
12203            let envelope_size = 8;
12204            let bytes_len = len * envelope_size;
12205            let offset = decoder.out_of_line_offset(bytes_len)?;
12206            // Decode the envelope for each type.
12207            let mut _next_ordinal_to_read = 0;
12208            let mut next_offset = offset;
12209            let end_offset = offset + bytes_len;
12210            _next_ordinal_to_read += 1;
12211            if next_offset >= end_offset {
12212                return Ok(());
12213            }
12214
12215            // Decode unknown envelopes for gaps in ordinals.
12216            while _next_ordinal_to_read < 1 {
12217                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12218                _next_ordinal_to_read += 1;
12219                next_offset += envelope_size;
12220            }
12221
12222            let next_out_of_line = decoder.next_out_of_line();
12223            let handles_before = decoder.remaining_handles();
12224            if let Some((inlined, num_bytes, num_handles)) =
12225                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12226            {
12227                let member_inline_size =
12228                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12229                if inlined != (member_inline_size <= 4) {
12230                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12231                }
12232                let inner_offset;
12233                let mut inner_depth = depth.clone();
12234                if inlined {
12235                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12236                    inner_offset = next_offset;
12237                } else {
12238                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12239                    inner_depth.increment()?;
12240                }
12241                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12242                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12243                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12244                {
12245                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12246                }
12247                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12248                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12249                }
12250            }
12251
12252            next_offset += envelope_size;
12253            _next_ordinal_to_read += 1;
12254            if next_offset >= end_offset {
12255                return Ok(());
12256            }
12257
12258            // Decode unknown envelopes for gaps in ordinals.
12259            while _next_ordinal_to_read < 2 {
12260                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12261                _next_ordinal_to_read += 1;
12262                next_offset += envelope_size;
12263            }
12264
12265            let next_out_of_line = decoder.next_out_of_line();
12266            let handles_before = decoder.remaining_handles();
12267            if let Some((inlined, num_bytes, num_handles)) =
12268                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12269            {
12270                let member_inline_size =
12271                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12272                if inlined != (member_inline_size <= 4) {
12273                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12274                }
12275                let inner_offset;
12276                let mut inner_depth = depth.clone();
12277                if inlined {
12278                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12279                    inner_offset = next_offset;
12280                } else {
12281                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12282                    inner_depth.increment()?;
12283                }
12284                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12285                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12286                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12287                {
12288                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12289                }
12290                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12291                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12292                }
12293            }
12294
12295            next_offset += envelope_size;
12296            _next_ordinal_to_read += 1;
12297            if next_offset >= end_offset {
12298                return Ok(());
12299            }
12300
12301            // Decode unknown envelopes for gaps in ordinals.
12302            while _next_ordinal_to_read < 3 {
12303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12304                _next_ordinal_to_read += 1;
12305                next_offset += envelope_size;
12306            }
12307
12308            let next_out_of_line = decoder.next_out_of_line();
12309            let handles_before = decoder.remaining_handles();
12310            if let Some((inlined, num_bytes, num_handles)) =
12311                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12312            {
12313                let member_inline_size =
12314                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12315                if inlined != (member_inline_size <= 4) {
12316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12317                }
12318                let inner_offset;
12319                let mut inner_depth = depth.clone();
12320                if inlined {
12321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12322                    inner_offset = next_offset;
12323                } else {
12324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12325                    inner_depth.increment()?;
12326                }
12327                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12328                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12330                {
12331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12332                }
12333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12335                }
12336            }
12337
12338            next_offset += envelope_size;
12339            _next_ordinal_to_read += 1;
12340            if next_offset >= end_offset {
12341                return Ok(());
12342            }
12343
12344            // Decode unknown envelopes for gaps in ordinals.
12345            while _next_ordinal_to_read < 4 {
12346                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12347                _next_ordinal_to_read += 1;
12348                next_offset += envelope_size;
12349            }
12350
12351            let next_out_of_line = decoder.next_out_of_line();
12352            let handles_before = decoder.remaining_handles();
12353            if let Some((inlined, num_bytes, num_handles)) =
12354                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12355            {
12356                let member_inline_size =
12357                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12358                if inlined != (member_inline_size <= 4) {
12359                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12360                }
12361                let inner_offset;
12362                let mut inner_depth = depth.clone();
12363                if inlined {
12364                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12365                    inner_offset = next_offset;
12366                } else {
12367                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12368                    inner_depth.increment()?;
12369                }
12370                let val_ref =
12371                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12372                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12373                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12374                {
12375                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12376                }
12377                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12378                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12379                }
12380            }
12381
12382            next_offset += envelope_size;
12383            _next_ordinal_to_read += 1;
12384            if next_offset >= end_offset {
12385                return Ok(());
12386            }
12387
12388            // Decode unknown envelopes for gaps in ordinals.
12389            while _next_ordinal_to_read < 5 {
12390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12391                _next_ordinal_to_read += 1;
12392                next_offset += envelope_size;
12393            }
12394
12395            let next_out_of_line = decoder.next_out_of_line();
12396            let handles_before = decoder.remaining_handles();
12397            if let Some((inlined, num_bytes, num_handles)) =
12398                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12399            {
12400                let member_inline_size =
12401                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12402                if inlined != (member_inline_size <= 4) {
12403                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12404                }
12405                let inner_offset;
12406                let mut inner_depth = depth.clone();
12407                if inlined {
12408                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12409                    inner_offset = next_offset;
12410                } else {
12411                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12412                    inner_depth.increment()?;
12413                }
12414                let val_ref =
12415                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12416                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12417                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12418                {
12419                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12420                }
12421                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12422                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12423                }
12424            }
12425
12426            next_offset += envelope_size;
12427            _next_ordinal_to_read += 1;
12428            if next_offset >= end_offset {
12429                return Ok(());
12430            }
12431
12432            // Decode unknown envelopes for gaps in ordinals.
12433            while _next_ordinal_to_read < 6 {
12434                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12435                _next_ordinal_to_read += 1;
12436                next_offset += envelope_size;
12437            }
12438
12439            let next_out_of_line = decoder.next_out_of_line();
12440            let handles_before = decoder.remaining_handles();
12441            if let Some((inlined, num_bytes, num_handles)) =
12442                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12443            {
12444                let member_inline_size =
12445                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12446                if inlined != (member_inline_size <= 4) {
12447                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12448                }
12449                let inner_offset;
12450                let mut inner_depth = depth.clone();
12451                if inlined {
12452                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12453                    inner_offset = next_offset;
12454                } else {
12455                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12456                    inner_depth.increment()?;
12457                }
12458                let val_ref = self
12459                    .remaining_key_lease_time_total
12460                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
12461                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12462                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12463                {
12464                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12465                }
12466                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12467                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12468                }
12469            }
12470
12471            next_offset += envelope_size;
12472
12473            // Decode the remaining unknown envelopes.
12474            while next_offset < end_offset {
12475                _next_ordinal_to_read += 1;
12476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12477                next_offset += envelope_size;
12478            }
12479
12480            Ok(())
12481        }
12482    }
12483
12484    impl SrpServerResponseCounters {
12485        #[inline(always)]
12486        fn max_ordinal_present(&self) -> u64 {
12487            if let Some(_) = self.other_response {
12488                return 6;
12489            }
12490            if let Some(_) = self.refused_response {
12491                return 5;
12492            }
12493            if let Some(_) = self.name_exists_response {
12494                return 4;
12495            }
12496            if let Some(_) = self.format_error_response {
12497                return 3;
12498            }
12499            if let Some(_) = self.server_failure_response {
12500                return 2;
12501            }
12502            if let Some(_) = self.success_response {
12503                return 1;
12504            }
12505            0
12506        }
12507    }
12508
12509    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
12510        type Borrowed<'a> = &'a Self;
12511        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12512            value
12513        }
12514    }
12515
12516    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
12517        type Owned = Self;
12518
12519        #[inline(always)]
12520        fn inline_align(_context: fidl::encoding::Context) -> usize {
12521            8
12522        }
12523
12524        #[inline(always)]
12525        fn inline_size(_context: fidl::encoding::Context) -> usize {
12526            16
12527        }
12528    }
12529
12530    unsafe impl<D: fidl::encoding::ResourceDialect>
12531        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
12532    {
12533        unsafe fn encode(
12534            self,
12535            encoder: &mut fidl::encoding::Encoder<'_, D>,
12536            offset: usize,
12537            mut depth: fidl::encoding::Depth,
12538        ) -> fidl::Result<()> {
12539            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
12540            // Vector header
12541            let max_ordinal: u64 = self.max_ordinal_present();
12542            encoder.write_num(max_ordinal, offset);
12543            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12544            // Calling encoder.out_of_line_offset(0) is not allowed.
12545            if max_ordinal == 0 {
12546                return Ok(());
12547            }
12548            depth.increment()?;
12549            let envelope_size = 8;
12550            let bytes_len = max_ordinal as usize * envelope_size;
12551            #[allow(unused_variables)]
12552            let offset = encoder.out_of_line_offset(bytes_len);
12553            let mut _prev_end_offset: usize = 0;
12554            if 1 > max_ordinal {
12555                return Ok(());
12556            }
12557
12558            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12559            // are envelope_size bytes.
12560            let cur_offset: usize = (1 - 1) * envelope_size;
12561
12562            // Zero reserved fields.
12563            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12564
12565            // Safety:
12566            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12567            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12568            //   envelope_size bytes, there is always sufficient room.
12569            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12570                self.success_response
12571                    .as_ref()
12572                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12573                encoder,
12574                offset + cur_offset,
12575                depth,
12576            )?;
12577
12578            _prev_end_offset = cur_offset + envelope_size;
12579            if 2 > max_ordinal {
12580                return Ok(());
12581            }
12582
12583            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12584            // are envelope_size bytes.
12585            let cur_offset: usize = (2 - 1) * envelope_size;
12586
12587            // Zero reserved fields.
12588            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12589
12590            // Safety:
12591            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12592            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12593            //   envelope_size bytes, there is always sufficient room.
12594            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12595                self.server_failure_response
12596                    .as_ref()
12597                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12598                encoder,
12599                offset + cur_offset,
12600                depth,
12601            )?;
12602
12603            _prev_end_offset = cur_offset + envelope_size;
12604            if 3 > max_ordinal {
12605                return Ok(());
12606            }
12607
12608            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12609            // are envelope_size bytes.
12610            let cur_offset: usize = (3 - 1) * envelope_size;
12611
12612            // Zero reserved fields.
12613            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12614
12615            // Safety:
12616            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12617            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12618            //   envelope_size bytes, there is always sufficient room.
12619            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12620                self.format_error_response
12621                    .as_ref()
12622                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12623                encoder,
12624                offset + cur_offset,
12625                depth,
12626            )?;
12627
12628            _prev_end_offset = cur_offset + envelope_size;
12629            if 4 > max_ordinal {
12630                return Ok(());
12631            }
12632
12633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12634            // are envelope_size bytes.
12635            let cur_offset: usize = (4 - 1) * envelope_size;
12636
12637            // Zero reserved fields.
12638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12639
12640            // Safety:
12641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12643            //   envelope_size bytes, there is always sufficient room.
12644            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12645                self.name_exists_response
12646                    .as_ref()
12647                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12648                encoder,
12649                offset + cur_offset,
12650                depth,
12651            )?;
12652
12653            _prev_end_offset = cur_offset + envelope_size;
12654            if 5 > max_ordinal {
12655                return Ok(());
12656            }
12657
12658            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12659            // are envelope_size bytes.
12660            let cur_offset: usize = (5 - 1) * envelope_size;
12661
12662            // Zero reserved fields.
12663            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12664
12665            // Safety:
12666            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12667            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12668            //   envelope_size bytes, there is always sufficient room.
12669            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12670                self.refused_response
12671                    .as_ref()
12672                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12673                encoder,
12674                offset + cur_offset,
12675                depth,
12676            )?;
12677
12678            _prev_end_offset = cur_offset + envelope_size;
12679            if 6 > max_ordinal {
12680                return Ok(());
12681            }
12682
12683            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12684            // are envelope_size bytes.
12685            let cur_offset: usize = (6 - 1) * envelope_size;
12686
12687            // Zero reserved fields.
12688            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12689
12690            // Safety:
12691            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12692            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12693            //   envelope_size bytes, there is always sufficient room.
12694            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12695                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12696                encoder,
12697                offset + cur_offset,
12698                depth,
12699            )?;
12700
12701            _prev_end_offset = cur_offset + envelope_size;
12702
12703            Ok(())
12704        }
12705    }
12706
12707    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12708        for SrpServerResponseCounters
12709    {
12710        #[inline(always)]
12711        fn new_empty() -> Self {
12712            Self::default()
12713        }
12714
12715        unsafe fn decode(
12716            &mut self,
12717            decoder: &mut fidl::encoding::Decoder<'_, D>,
12718            offset: usize,
12719            mut depth: fidl::encoding::Depth,
12720        ) -> fidl::Result<()> {
12721            decoder.debug_check_bounds::<Self>(offset);
12722            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12723                None => return Err(fidl::Error::NotNullable),
12724                Some(len) => len,
12725            };
12726            // Calling decoder.out_of_line_offset(0) is not allowed.
12727            if len == 0 {
12728                return Ok(());
12729            };
12730            depth.increment()?;
12731            let envelope_size = 8;
12732            let bytes_len = len * envelope_size;
12733            let offset = decoder.out_of_line_offset(bytes_len)?;
12734            // Decode the envelope for each type.
12735            let mut _next_ordinal_to_read = 0;
12736            let mut next_offset = offset;
12737            let end_offset = offset + bytes_len;
12738            _next_ordinal_to_read += 1;
12739            if next_offset >= end_offset {
12740                return Ok(());
12741            }
12742
12743            // Decode unknown envelopes for gaps in ordinals.
12744            while _next_ordinal_to_read < 1 {
12745                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12746                _next_ordinal_to_read += 1;
12747                next_offset += envelope_size;
12748            }
12749
12750            let next_out_of_line = decoder.next_out_of_line();
12751            let handles_before = decoder.remaining_handles();
12752            if let Some((inlined, num_bytes, num_handles)) =
12753                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12754            {
12755                let member_inline_size =
12756                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12757                if inlined != (member_inline_size <= 4) {
12758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12759                }
12760                let inner_offset;
12761                let mut inner_depth = depth.clone();
12762                if inlined {
12763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12764                    inner_offset = next_offset;
12765                } else {
12766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12767                    inner_depth.increment()?;
12768                }
12769                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12770                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12772                {
12773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12774                }
12775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12777                }
12778            }
12779
12780            next_offset += envelope_size;
12781            _next_ordinal_to_read += 1;
12782            if next_offset >= end_offset {
12783                return Ok(());
12784            }
12785
12786            // Decode unknown envelopes for gaps in ordinals.
12787            while _next_ordinal_to_read < 2 {
12788                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12789                _next_ordinal_to_read += 1;
12790                next_offset += envelope_size;
12791            }
12792
12793            let next_out_of_line = decoder.next_out_of_line();
12794            let handles_before = decoder.remaining_handles();
12795            if let Some((inlined, num_bytes, num_handles)) =
12796                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12797            {
12798                let member_inline_size =
12799                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12800                if inlined != (member_inline_size <= 4) {
12801                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12802                }
12803                let inner_offset;
12804                let mut inner_depth = depth.clone();
12805                if inlined {
12806                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12807                    inner_offset = next_offset;
12808                } else {
12809                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12810                    inner_depth.increment()?;
12811                }
12812                let val_ref =
12813                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12814                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12815                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12816                {
12817                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12818                }
12819                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12820                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12821                }
12822            }
12823
12824            next_offset += envelope_size;
12825            _next_ordinal_to_read += 1;
12826            if next_offset >= end_offset {
12827                return Ok(());
12828            }
12829
12830            // Decode unknown envelopes for gaps in ordinals.
12831            while _next_ordinal_to_read < 3 {
12832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12833                _next_ordinal_to_read += 1;
12834                next_offset += envelope_size;
12835            }
12836
12837            let next_out_of_line = decoder.next_out_of_line();
12838            let handles_before = decoder.remaining_handles();
12839            if let Some((inlined, num_bytes, num_handles)) =
12840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12841            {
12842                let member_inline_size =
12843                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12844                if inlined != (member_inline_size <= 4) {
12845                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12846                }
12847                let inner_offset;
12848                let mut inner_depth = depth.clone();
12849                if inlined {
12850                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12851                    inner_offset = next_offset;
12852                } else {
12853                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12854                    inner_depth.increment()?;
12855                }
12856                let val_ref =
12857                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12858                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12859                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12860                {
12861                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12862                }
12863                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12864                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12865                }
12866            }
12867
12868            next_offset += envelope_size;
12869            _next_ordinal_to_read += 1;
12870            if next_offset >= end_offset {
12871                return Ok(());
12872            }
12873
12874            // Decode unknown envelopes for gaps in ordinals.
12875            while _next_ordinal_to_read < 4 {
12876                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12877                _next_ordinal_to_read += 1;
12878                next_offset += envelope_size;
12879            }
12880
12881            let next_out_of_line = decoder.next_out_of_line();
12882            let handles_before = decoder.remaining_handles();
12883            if let Some((inlined, num_bytes, num_handles)) =
12884                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12885            {
12886                let member_inline_size =
12887                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12888                if inlined != (member_inline_size <= 4) {
12889                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12890                }
12891                let inner_offset;
12892                let mut inner_depth = depth.clone();
12893                if inlined {
12894                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12895                    inner_offset = next_offset;
12896                } else {
12897                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12898                    inner_depth.increment()?;
12899                }
12900                let val_ref =
12901                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12902                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12904                {
12905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12906                }
12907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12909                }
12910            }
12911
12912            next_offset += envelope_size;
12913            _next_ordinal_to_read += 1;
12914            if next_offset >= end_offset {
12915                return Ok(());
12916            }
12917
12918            // Decode unknown envelopes for gaps in ordinals.
12919            while _next_ordinal_to_read < 5 {
12920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12921                _next_ordinal_to_read += 1;
12922                next_offset += envelope_size;
12923            }
12924
12925            let next_out_of_line = decoder.next_out_of_line();
12926            let handles_before = decoder.remaining_handles();
12927            if let Some((inlined, num_bytes, num_handles)) =
12928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12929            {
12930                let member_inline_size =
12931                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12932                if inlined != (member_inline_size <= 4) {
12933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12934                }
12935                let inner_offset;
12936                let mut inner_depth = depth.clone();
12937                if inlined {
12938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12939                    inner_offset = next_offset;
12940                } else {
12941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12942                    inner_depth.increment()?;
12943                }
12944                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12945                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12947                {
12948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12949                }
12950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12952                }
12953            }
12954
12955            next_offset += envelope_size;
12956            _next_ordinal_to_read += 1;
12957            if next_offset >= end_offset {
12958                return Ok(());
12959            }
12960
12961            // Decode unknown envelopes for gaps in ordinals.
12962            while _next_ordinal_to_read < 6 {
12963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12964                _next_ordinal_to_read += 1;
12965                next_offset += envelope_size;
12966            }
12967
12968            let next_out_of_line = decoder.next_out_of_line();
12969            let handles_before = decoder.remaining_handles();
12970            if let Some((inlined, num_bytes, num_handles)) =
12971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12972            {
12973                let member_inline_size =
12974                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12975                if inlined != (member_inline_size <= 4) {
12976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12977                }
12978                let inner_offset;
12979                let mut inner_depth = depth.clone();
12980                if inlined {
12981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12982                    inner_offset = next_offset;
12983                } else {
12984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12985                    inner_depth.increment()?;
12986                }
12987                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12988                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12990                {
12991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12992                }
12993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12995                }
12996            }
12997
12998            next_offset += envelope_size;
12999
13000            // Decode the remaining unknown envelopes.
13001            while next_offset < end_offset {
13002                _next_ordinal_to_read += 1;
13003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13004                next_offset += envelope_size;
13005            }
13006
13007            Ok(())
13008        }
13009    }
13010
13011    impl Telemetry {
13012        #[inline(always)]
13013        fn max_ordinal_present(&self) -> u64 {
13014            if let Some(_) = self.extended_pan_id {
13015                return 27;
13016            }
13017            if let Some(_) = self.multi_ail_detected {
13018                return 26;
13019            }
13020            if let Some(_) = self.border_agent_counters {
13021                return 25;
13022            }
13023            if let Some(_) = self.link_metrics_entries {
13024                return 24;
13025            }
13026            if let Some(_) = self.dhcp6pd_info {
13027                return 23;
13028            }
13029            if let Some(_) = self.upstream_dns_info {
13030                return 22;
13031            }
13032            if let Some(_) = self.trel_peers_info {
13033                return 21;
13034            }
13035            if let Some(_) = self.trel_counters {
13036                return 20;
13037            }
13038            if let Some(_) = self.nat64_info {
13039                return 19;
13040            }
13041            if let Some(_) = self.uptime {
13042                return 18;
13043            }
13044            if let Some(_) = self.leader_data {
13045                return 17;
13046            }
13047            if let Some(_) = self.dnssd_counters {
13048                return 16;
13049            }
13050            if let Some(_) = self.srp_server_info {
13051                return 15;
13052            }
13053            if let Some(_) = self.thread_border_routing_counters {
13054                return 14;
13055            }
13056            if let Some(_) = self.thread_stable_network_data {
13057                return 13;
13058            }
13059            if let Some(_) = self.thread_network_data {
13060                return 12;
13061            }
13062            if let Some(_) = self.thread_stable_network_data_version {
13063                return 11;
13064            }
13065            if let Some(_) = self.thread_network_data_version {
13066                return 10;
13067            }
13068            if let Some(_) = self.thread_rloc {
13069                return 9;
13070            }
13071            if let Some(_) = self.thread_router_id {
13072                return 8;
13073            }
13074            if let Some(_) = self.thread_link_mode {
13075                return 7;
13076            }
13077            if let Some(_) = self.rcp_version {
13078                return 6;
13079            }
13080            if let Some(_) = self.stack_version {
13081                return 5;
13082            }
13083            if let Some(_) = self.partition_id {
13084                return 4;
13085            }
13086            if let Some(_) = self.channel_index {
13087                return 3;
13088            }
13089            if let Some(_) = self.tx_power {
13090                return 2;
13091            }
13092            if let Some(_) = self.rssi {
13093                return 1;
13094            }
13095            0
13096        }
13097    }
13098
13099    impl fidl::encoding::ValueTypeMarker for Telemetry {
13100        type Borrowed<'a> = &'a Self;
13101        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13102            value
13103        }
13104    }
13105
13106    unsafe impl fidl::encoding::TypeMarker for Telemetry {
13107        type Owned = Self;
13108
13109        #[inline(always)]
13110        fn inline_align(_context: fidl::encoding::Context) -> usize {
13111            8
13112        }
13113
13114        #[inline(always)]
13115        fn inline_size(_context: fidl::encoding::Context) -> usize {
13116            16
13117        }
13118    }
13119
13120    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
13121        for &Telemetry
13122    {
13123        unsafe fn encode(
13124            self,
13125            encoder: &mut fidl::encoding::Encoder<'_, D>,
13126            offset: usize,
13127            mut depth: fidl::encoding::Depth,
13128        ) -> fidl::Result<()> {
13129            encoder.debug_check_bounds::<Telemetry>(offset);
13130            // Vector header
13131            let max_ordinal: u64 = self.max_ordinal_present();
13132            encoder.write_num(max_ordinal, offset);
13133            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13134            // Calling encoder.out_of_line_offset(0) is not allowed.
13135            if max_ordinal == 0 {
13136                return Ok(());
13137            }
13138            depth.increment()?;
13139            let envelope_size = 8;
13140            let bytes_len = max_ordinal as usize * envelope_size;
13141            #[allow(unused_variables)]
13142            let offset = encoder.out_of_line_offset(bytes_len);
13143            let mut _prev_end_offset: usize = 0;
13144            if 1 > max_ordinal {
13145                return Ok(());
13146            }
13147
13148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13149            // are envelope_size bytes.
13150            let cur_offset: usize = (1 - 1) * envelope_size;
13151
13152            // Zero reserved fields.
13153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13154
13155            // Safety:
13156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13158            //   envelope_size bytes, there is always sufficient room.
13159            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13160                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13161                encoder,
13162                offset + cur_offset,
13163                depth,
13164            )?;
13165
13166            _prev_end_offset = cur_offset + envelope_size;
13167            if 2 > max_ordinal {
13168                return Ok(());
13169            }
13170
13171            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13172            // are envelope_size bytes.
13173            let cur_offset: usize = (2 - 1) * envelope_size;
13174
13175            // Zero reserved fields.
13176            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13177
13178            // Safety:
13179            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13180            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13181            //   envelope_size bytes, there is always sufficient room.
13182            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13183                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13184                encoder,
13185                offset + cur_offset,
13186                depth,
13187            )?;
13188
13189            _prev_end_offset = cur_offset + envelope_size;
13190            if 3 > max_ordinal {
13191                return Ok(());
13192            }
13193
13194            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13195            // are envelope_size bytes.
13196            let cur_offset: usize = (3 - 1) * envelope_size;
13197
13198            // Zero reserved fields.
13199            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13200
13201            // Safety:
13202            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13203            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13204            //   envelope_size bytes, there is always sufficient room.
13205            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13206                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13207                encoder,
13208                offset + cur_offset,
13209                depth,
13210            )?;
13211
13212            _prev_end_offset = cur_offset + envelope_size;
13213            if 4 > max_ordinal {
13214                return Ok(());
13215            }
13216
13217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13218            // are envelope_size bytes.
13219            let cur_offset: usize = (4 - 1) * envelope_size;
13220
13221            // Zero reserved fields.
13222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13223
13224            // Safety:
13225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13227            //   envelope_size bytes, there is always sufficient room.
13228            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13229                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13230                encoder,
13231                offset + cur_offset,
13232                depth,
13233            )?;
13234
13235            _prev_end_offset = cur_offset + envelope_size;
13236            if 5 > max_ordinal {
13237                return Ok(());
13238            }
13239
13240            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13241            // are envelope_size bytes.
13242            let cur_offset: usize = (5 - 1) * envelope_size;
13243
13244            // Zero reserved fields.
13245            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13246
13247            // Safety:
13248            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13249            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13250            //   envelope_size bytes, there is always sufficient room.
13251            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13252                self.stack_version.as_ref().map(
13253                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13254                ),
13255                encoder,
13256                offset + cur_offset,
13257                depth,
13258            )?;
13259
13260            _prev_end_offset = cur_offset + envelope_size;
13261            if 6 > max_ordinal {
13262                return Ok(());
13263            }
13264
13265            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13266            // are envelope_size bytes.
13267            let cur_offset: usize = (6 - 1) * envelope_size;
13268
13269            // Zero reserved fields.
13270            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13271
13272            // Safety:
13273            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13274            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13275            //   envelope_size bytes, there is always sufficient room.
13276            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13277                self.rcp_version.as_ref().map(
13278                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13279                ),
13280                encoder,
13281                offset + cur_offset,
13282                depth,
13283            )?;
13284
13285            _prev_end_offset = cur_offset + envelope_size;
13286            if 7 > max_ordinal {
13287                return Ok(());
13288            }
13289
13290            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13291            // are envelope_size bytes.
13292            let cur_offset: usize = (7 - 1) * envelope_size;
13293
13294            // Zero reserved fields.
13295            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13296
13297            // Safety:
13298            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13299            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13300            //   envelope_size bytes, there is always sufficient room.
13301            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13302                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13303                encoder,
13304                offset + cur_offset,
13305                depth,
13306            )?;
13307
13308            _prev_end_offset = cur_offset + envelope_size;
13309            if 8 > max_ordinal {
13310                return Ok(());
13311            }
13312
13313            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13314            // are envelope_size bytes.
13315            let cur_offset: usize = (8 - 1) * envelope_size;
13316
13317            // Zero reserved fields.
13318            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13319
13320            // Safety:
13321            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13322            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13323            //   envelope_size bytes, there is always sufficient room.
13324            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13325                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13326                encoder,
13327                offset + cur_offset,
13328                depth,
13329            )?;
13330
13331            _prev_end_offset = cur_offset + envelope_size;
13332            if 9 > max_ordinal {
13333                return Ok(());
13334            }
13335
13336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13337            // are envelope_size bytes.
13338            let cur_offset: usize = (9 - 1) * envelope_size;
13339
13340            // Zero reserved fields.
13341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13342
13343            // Safety:
13344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13346            //   envelope_size bytes, there is always sufficient room.
13347            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13348                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13349                encoder,
13350                offset + cur_offset,
13351                depth,
13352            )?;
13353
13354            _prev_end_offset = cur_offset + envelope_size;
13355            if 10 > max_ordinal {
13356                return Ok(());
13357            }
13358
13359            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13360            // are envelope_size bytes.
13361            let cur_offset: usize = (10 - 1) * envelope_size;
13362
13363            // Zero reserved fields.
13364            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13365
13366            // Safety:
13367            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13368            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13369            //   envelope_size bytes, there is always sufficient room.
13370            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13371                self.thread_network_data_version
13372                    .as_ref()
13373                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13374                encoder,
13375                offset + cur_offset,
13376                depth,
13377            )?;
13378
13379            _prev_end_offset = cur_offset + envelope_size;
13380            if 11 > max_ordinal {
13381                return Ok(());
13382            }
13383
13384            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13385            // are envelope_size bytes.
13386            let cur_offset: usize = (11 - 1) * envelope_size;
13387
13388            // Zero reserved fields.
13389            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13390
13391            // Safety:
13392            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13393            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13394            //   envelope_size bytes, there is always sufficient room.
13395            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13396                self.thread_stable_network_data_version
13397                    .as_ref()
13398                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13399                encoder,
13400                offset + cur_offset,
13401                depth,
13402            )?;
13403
13404            _prev_end_offset = cur_offset + envelope_size;
13405            if 12 > max_ordinal {
13406                return Ok(());
13407            }
13408
13409            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13410            // are envelope_size bytes.
13411            let cur_offset: usize = (12 - 1) * envelope_size;
13412
13413            // Zero reserved fields.
13414            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13415
13416            // Safety:
13417            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13418            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13419            //   envelope_size bytes, there is always sufficient room.
13420            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13421                self.thread_network_data.as_ref().map(
13422                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13423                ),
13424                encoder,
13425                offset + cur_offset,
13426                depth,
13427            )?;
13428
13429            _prev_end_offset = cur_offset + envelope_size;
13430            if 13 > max_ordinal {
13431                return Ok(());
13432            }
13433
13434            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13435            // are envelope_size bytes.
13436            let cur_offset: usize = (13 - 1) * envelope_size;
13437
13438            // Zero reserved fields.
13439            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13440
13441            // Safety:
13442            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13443            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13444            //   envelope_size bytes, there is always sufficient room.
13445            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13446                self.thread_stable_network_data.as_ref().map(
13447                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13448                ),
13449                encoder,
13450                offset + cur_offset,
13451                depth,
13452            )?;
13453
13454            _prev_end_offset = cur_offset + envelope_size;
13455            if 14 > max_ordinal {
13456                return Ok(());
13457            }
13458
13459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13460            // are envelope_size bytes.
13461            let cur_offset: usize = (14 - 1) * envelope_size;
13462
13463            // Zero reserved fields.
13464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13465
13466            // Safety:
13467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13469            //   envelope_size bytes, there is always sufficient room.
13470            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
13471                self.thread_border_routing_counters
13472                    .as_ref()
13473                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
13474                encoder,
13475                offset + cur_offset,
13476                depth,
13477            )?;
13478
13479            _prev_end_offset = cur_offset + envelope_size;
13480            if 15 > max_ordinal {
13481                return Ok(());
13482            }
13483
13484            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13485            // are envelope_size bytes.
13486            let cur_offset: usize = (15 - 1) * envelope_size;
13487
13488            // Zero reserved fields.
13489            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13490
13491            // Safety:
13492            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13493            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13494            //   envelope_size bytes, there is always sufficient room.
13495            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
13496                self.srp_server_info
13497                    .as_ref()
13498                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
13499                encoder,
13500                offset + cur_offset,
13501                depth,
13502            )?;
13503
13504            _prev_end_offset = cur_offset + envelope_size;
13505            if 16 > max_ordinal {
13506                return Ok(());
13507            }
13508
13509            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13510            // are envelope_size bytes.
13511            let cur_offset: usize = (16 - 1) * envelope_size;
13512
13513            // Zero reserved fields.
13514            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13515
13516            // Safety:
13517            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13518            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13519            //   envelope_size bytes, there is always sufficient room.
13520            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
13521                self.dnssd_counters
13522                    .as_ref()
13523                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
13524                encoder,
13525                offset + cur_offset,
13526                depth,
13527            )?;
13528
13529            _prev_end_offset = cur_offset + envelope_size;
13530            if 17 > max_ordinal {
13531                return Ok(());
13532            }
13533
13534            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13535            // are envelope_size bytes.
13536            let cur_offset: usize = (17 - 1) * envelope_size;
13537
13538            // Zero reserved fields.
13539            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13540
13541            // Safety:
13542            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13543            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13544            //   envelope_size bytes, there is always sufficient room.
13545            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
13546                self.leader_data
13547                    .as_ref()
13548                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
13549                encoder,
13550                offset + cur_offset,
13551                depth,
13552            )?;
13553
13554            _prev_end_offset = cur_offset + envelope_size;
13555            if 18 > max_ordinal {
13556                return Ok(());
13557            }
13558
13559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13560            // are envelope_size bytes.
13561            let cur_offset: usize = (18 - 1) * envelope_size;
13562
13563            // Zero reserved fields.
13564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13565
13566            // Safety:
13567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13569            //   envelope_size bytes, there is always sufficient room.
13570            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13571                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13572                encoder,
13573                offset + cur_offset,
13574                depth,
13575            )?;
13576
13577            _prev_end_offset = cur_offset + envelope_size;
13578            if 19 > max_ordinal {
13579                return Ok(());
13580            }
13581
13582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13583            // are envelope_size bytes.
13584            let cur_offset: usize = (19 - 1) * envelope_size;
13585
13586            // Zero reserved fields.
13587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13588
13589            // Safety:
13590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13592            //   envelope_size bytes, there is always sufficient room.
13593            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
13594                self.nat64_info
13595                    .as_ref()
13596                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
13597                encoder,
13598                offset + cur_offset,
13599                depth,
13600            )?;
13601
13602            _prev_end_offset = cur_offset + envelope_size;
13603            if 20 > max_ordinal {
13604                return Ok(());
13605            }
13606
13607            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13608            // are envelope_size bytes.
13609            let cur_offset: usize = (20 - 1) * envelope_size;
13610
13611            // Zero reserved fields.
13612            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13613
13614            // Safety:
13615            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13616            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13617            //   envelope_size bytes, there is always sufficient room.
13618            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
13619                self.trel_counters
13620                    .as_ref()
13621                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
13622                encoder,
13623                offset + cur_offset,
13624                depth,
13625            )?;
13626
13627            _prev_end_offset = cur_offset + envelope_size;
13628            if 21 > max_ordinal {
13629                return Ok(());
13630            }
13631
13632            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13633            // are envelope_size bytes.
13634            let cur_offset: usize = (21 - 1) * envelope_size;
13635
13636            // Zero reserved fields.
13637            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13638
13639            // Safety:
13640            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13641            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13642            //   envelope_size bytes, there is always sufficient room.
13643            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
13644                self.trel_peers_info
13645                    .as_ref()
13646                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
13647                encoder,
13648                offset + cur_offset,
13649                depth,
13650            )?;
13651
13652            _prev_end_offset = cur_offset + envelope_size;
13653            if 22 > max_ordinal {
13654                return Ok(());
13655            }
13656
13657            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13658            // are envelope_size bytes.
13659            let cur_offset: usize = (22 - 1) * envelope_size;
13660
13661            // Zero reserved fields.
13662            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13663
13664            // Safety:
13665            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13666            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13667            //   envelope_size bytes, there is always sufficient room.
13668            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
13669                self.upstream_dns_info
13670                    .as_ref()
13671                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
13672                encoder,
13673                offset + cur_offset,
13674                depth,
13675            )?;
13676
13677            _prev_end_offset = cur_offset + envelope_size;
13678            if 23 > max_ordinal {
13679                return Ok(());
13680            }
13681
13682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13683            // are envelope_size bytes.
13684            let cur_offset: usize = (23 - 1) * envelope_size;
13685
13686            // Zero reserved fields.
13687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13688
13689            // Safety:
13690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13692            //   envelope_size bytes, there is always sufficient room.
13693            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
13694                self.dhcp6pd_info
13695                    .as_ref()
13696                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
13697                encoder,
13698                offset + cur_offset,
13699                depth,
13700            )?;
13701
13702            _prev_end_offset = cur_offset + envelope_size;
13703            if 24 > max_ordinal {
13704                return Ok(());
13705            }
13706
13707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13708            // are envelope_size bytes.
13709            let cur_offset: usize = (24 - 1) * envelope_size;
13710
13711            // Zero reserved fields.
13712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13713
13714            // Safety:
13715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13717            //   envelope_size bytes, there is always sufficient room.
13718            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
13719            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
13720            encoder, offset + cur_offset, depth
13721        )?;
13722
13723            _prev_end_offset = cur_offset + envelope_size;
13724            if 25 > max_ordinal {
13725                return Ok(());
13726            }
13727
13728            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13729            // are envelope_size bytes.
13730            let cur_offset: usize = (25 - 1) * envelope_size;
13731
13732            // Zero reserved fields.
13733            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13734
13735            // Safety:
13736            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13737            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13738            //   envelope_size bytes, there is always sufficient room.
13739            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
13740            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
13741            encoder, offset + cur_offset, depth
13742        )?;
13743
13744            _prev_end_offset = cur_offset + envelope_size;
13745            if 26 > max_ordinal {
13746                return Ok(());
13747            }
13748
13749            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13750            // are envelope_size bytes.
13751            let cur_offset: usize = (26 - 1) * envelope_size;
13752
13753            // Zero reserved fields.
13754            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13755
13756            // Safety:
13757            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13758            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13759            //   envelope_size bytes, there is always sufficient room.
13760            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13761                self.multi_ail_detected
13762                    .as_ref()
13763                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13764                encoder,
13765                offset + cur_offset,
13766                depth,
13767            )?;
13768
13769            _prev_end_offset = cur_offset + envelope_size;
13770            if 27 > max_ordinal {
13771                return Ok(());
13772            }
13773
13774            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13775            // are envelope_size bytes.
13776            let cur_offset: usize = (27 - 1) * envelope_size;
13777
13778            // Zero reserved fields.
13779            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13780
13781            // Safety:
13782            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13783            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13784            //   envelope_size bytes, there is always sufficient room.
13785            fidl::encoding::encode_in_envelope_optional::<u64, D>(
13786                self.extended_pan_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
13787                encoder,
13788                offset + cur_offset,
13789                depth,
13790            )?;
13791
13792            _prev_end_offset = cur_offset + envelope_size;
13793
13794            Ok(())
13795        }
13796    }
13797
13798    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
13799        #[inline(always)]
13800        fn new_empty() -> Self {
13801            Self::default()
13802        }
13803
13804        unsafe fn decode(
13805            &mut self,
13806            decoder: &mut fidl::encoding::Decoder<'_, D>,
13807            offset: usize,
13808            mut depth: fidl::encoding::Depth,
13809        ) -> fidl::Result<()> {
13810            decoder.debug_check_bounds::<Self>(offset);
13811            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13812                None => return Err(fidl::Error::NotNullable),
13813                Some(len) => len,
13814            };
13815            // Calling decoder.out_of_line_offset(0) is not allowed.
13816            if len == 0 {
13817                return Ok(());
13818            };
13819            depth.increment()?;
13820            let envelope_size = 8;
13821            let bytes_len = len * envelope_size;
13822            let offset = decoder.out_of_line_offset(bytes_len)?;
13823            // Decode the envelope for each type.
13824            let mut _next_ordinal_to_read = 0;
13825            let mut next_offset = offset;
13826            let end_offset = offset + bytes_len;
13827            _next_ordinal_to_read += 1;
13828            if next_offset >= end_offset {
13829                return Ok(());
13830            }
13831
13832            // Decode unknown envelopes for gaps in ordinals.
13833            while _next_ordinal_to_read < 1 {
13834                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13835                _next_ordinal_to_read += 1;
13836                next_offset += envelope_size;
13837            }
13838
13839            let next_out_of_line = decoder.next_out_of_line();
13840            let handles_before = decoder.remaining_handles();
13841            if let Some((inlined, num_bytes, num_handles)) =
13842                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13843            {
13844                let member_inline_size =
13845                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13846                if inlined != (member_inline_size <= 4) {
13847                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13848                }
13849                let inner_offset;
13850                let mut inner_depth = depth.clone();
13851                if inlined {
13852                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13853                    inner_offset = next_offset;
13854                } else {
13855                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13856                    inner_depth.increment()?;
13857                }
13858                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
13859                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13861                {
13862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13863                }
13864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13866                }
13867            }
13868
13869            next_offset += envelope_size;
13870            _next_ordinal_to_read += 1;
13871            if next_offset >= end_offset {
13872                return Ok(());
13873            }
13874
13875            // Decode unknown envelopes for gaps in ordinals.
13876            while _next_ordinal_to_read < 2 {
13877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13878                _next_ordinal_to_read += 1;
13879                next_offset += envelope_size;
13880            }
13881
13882            let next_out_of_line = decoder.next_out_of_line();
13883            let handles_before = decoder.remaining_handles();
13884            if let Some((inlined, num_bytes, num_handles)) =
13885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13886            {
13887                let member_inline_size =
13888                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13889                if inlined != (member_inline_size <= 4) {
13890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13891                }
13892                let inner_offset;
13893                let mut inner_depth = depth.clone();
13894                if inlined {
13895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13896                    inner_offset = next_offset;
13897                } else {
13898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13899                    inner_depth.increment()?;
13900                }
13901                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
13902                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13904                {
13905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13906                }
13907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13909                }
13910            }
13911
13912            next_offset += envelope_size;
13913            _next_ordinal_to_read += 1;
13914            if next_offset >= end_offset {
13915                return Ok(());
13916            }
13917
13918            // Decode unknown envelopes for gaps in ordinals.
13919            while _next_ordinal_to_read < 3 {
13920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13921                _next_ordinal_to_read += 1;
13922                next_offset += envelope_size;
13923            }
13924
13925            let next_out_of_line = decoder.next_out_of_line();
13926            let handles_before = decoder.remaining_handles();
13927            if let Some((inlined, num_bytes, num_handles)) =
13928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13929            {
13930                let member_inline_size =
13931                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13932                if inlined != (member_inline_size <= 4) {
13933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13934                }
13935                let inner_offset;
13936                let mut inner_depth = depth.clone();
13937                if inlined {
13938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13939                    inner_offset = next_offset;
13940                } else {
13941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13942                    inner_depth.increment()?;
13943                }
13944                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
13945                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13947                {
13948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13949                }
13950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13952                }
13953            }
13954
13955            next_offset += envelope_size;
13956            _next_ordinal_to_read += 1;
13957            if next_offset >= end_offset {
13958                return Ok(());
13959            }
13960
13961            // Decode unknown envelopes for gaps in ordinals.
13962            while _next_ordinal_to_read < 4 {
13963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13964                _next_ordinal_to_read += 1;
13965                next_offset += envelope_size;
13966            }
13967
13968            let next_out_of_line = decoder.next_out_of_line();
13969            let handles_before = decoder.remaining_handles();
13970            if let Some((inlined, num_bytes, num_handles)) =
13971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13972            {
13973                let member_inline_size =
13974                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13975                if inlined != (member_inline_size <= 4) {
13976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13977                }
13978                let inner_offset;
13979                let mut inner_depth = depth.clone();
13980                if inlined {
13981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13982                    inner_offset = next_offset;
13983                } else {
13984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13985                    inner_depth.increment()?;
13986                }
13987                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
13988                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13990                {
13991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13992                }
13993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13995                }
13996            }
13997
13998            next_offset += envelope_size;
13999            _next_ordinal_to_read += 1;
14000            if next_offset >= end_offset {
14001                return Ok(());
14002            }
14003
14004            // Decode unknown envelopes for gaps in ordinals.
14005            while _next_ordinal_to_read < 5 {
14006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14007                _next_ordinal_to_read += 1;
14008                next_offset += envelope_size;
14009            }
14010
14011            let next_out_of_line = decoder.next_out_of_line();
14012            let handles_before = decoder.remaining_handles();
14013            if let Some((inlined, num_bytes, num_handles)) =
14014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14015            {
14016                let member_inline_size =
14017                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
14018                        decoder.context,
14019                    );
14020                if inlined != (member_inline_size <= 4) {
14021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14022                }
14023                let inner_offset;
14024                let mut inner_depth = depth.clone();
14025                if inlined {
14026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14027                    inner_offset = next_offset;
14028                } else {
14029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14030                    inner_depth.increment()?;
14031                }
14032                let val_ref = self
14033                    .stack_version
14034                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
14035                fidl::decode!(
14036                    fidl::encoding::BoundedString<256>,
14037                    D,
14038                    val_ref,
14039                    decoder,
14040                    inner_offset,
14041                    inner_depth
14042                )?;
14043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14044                {
14045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14046                }
14047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14049                }
14050            }
14051
14052            next_offset += envelope_size;
14053            _next_ordinal_to_read += 1;
14054            if next_offset >= end_offset {
14055                return Ok(());
14056            }
14057
14058            // Decode unknown envelopes for gaps in ordinals.
14059            while _next_ordinal_to_read < 6 {
14060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14061                _next_ordinal_to_read += 1;
14062                next_offset += envelope_size;
14063            }
14064
14065            let next_out_of_line = decoder.next_out_of_line();
14066            let handles_before = decoder.remaining_handles();
14067            if let Some((inlined, num_bytes, num_handles)) =
14068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14069            {
14070                let member_inline_size =
14071                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
14072                        decoder.context,
14073                    );
14074                if inlined != (member_inline_size <= 4) {
14075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14076                }
14077                let inner_offset;
14078                let mut inner_depth = depth.clone();
14079                if inlined {
14080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14081                    inner_offset = next_offset;
14082                } else {
14083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14084                    inner_depth.increment()?;
14085                }
14086                let val_ref = self
14087                    .rcp_version
14088                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
14089                fidl::decode!(
14090                    fidl::encoding::BoundedString<256>,
14091                    D,
14092                    val_ref,
14093                    decoder,
14094                    inner_offset,
14095                    inner_depth
14096                )?;
14097                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14098                {
14099                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14100                }
14101                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14102                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14103                }
14104            }
14105
14106            next_offset += envelope_size;
14107            _next_ordinal_to_read += 1;
14108            if next_offset >= end_offset {
14109                return Ok(());
14110            }
14111
14112            // Decode unknown envelopes for gaps in ordinals.
14113            while _next_ordinal_to_read < 7 {
14114                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14115                _next_ordinal_to_read += 1;
14116                next_offset += envelope_size;
14117            }
14118
14119            let next_out_of_line = decoder.next_out_of_line();
14120            let handles_before = decoder.remaining_handles();
14121            if let Some((inlined, num_bytes, num_handles)) =
14122                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14123            {
14124                let member_inline_size =
14125                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14126                if inlined != (member_inline_size <= 4) {
14127                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14128                }
14129                let inner_offset;
14130                let mut inner_depth = depth.clone();
14131                if inlined {
14132                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14133                    inner_offset = next_offset;
14134                } else {
14135                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14136                    inner_depth.increment()?;
14137                }
14138                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
14139                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14140                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14141                {
14142                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14143                }
14144                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14145                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14146                }
14147            }
14148
14149            next_offset += envelope_size;
14150            _next_ordinal_to_read += 1;
14151            if next_offset >= end_offset {
14152                return Ok(());
14153            }
14154
14155            // Decode unknown envelopes for gaps in ordinals.
14156            while _next_ordinal_to_read < 8 {
14157                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14158                _next_ordinal_to_read += 1;
14159                next_offset += envelope_size;
14160            }
14161
14162            let next_out_of_line = decoder.next_out_of_line();
14163            let handles_before = decoder.remaining_handles();
14164            if let Some((inlined, num_bytes, num_handles)) =
14165                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14166            {
14167                let member_inline_size =
14168                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14169                if inlined != (member_inline_size <= 4) {
14170                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14171                }
14172                let inner_offset;
14173                let mut inner_depth = depth.clone();
14174                if inlined {
14175                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14176                    inner_offset = next_offset;
14177                } else {
14178                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14179                    inner_depth.increment()?;
14180                }
14181                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
14182                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14183                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14184                {
14185                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14186                }
14187                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14188                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14189                }
14190            }
14191
14192            next_offset += envelope_size;
14193            _next_ordinal_to_read += 1;
14194            if next_offset >= end_offset {
14195                return Ok(());
14196            }
14197
14198            // Decode unknown envelopes for gaps in ordinals.
14199            while _next_ordinal_to_read < 9 {
14200                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14201                _next_ordinal_to_read += 1;
14202                next_offset += envelope_size;
14203            }
14204
14205            let next_out_of_line = decoder.next_out_of_line();
14206            let handles_before = decoder.remaining_handles();
14207            if let Some((inlined, num_bytes, num_handles)) =
14208                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14209            {
14210                let member_inline_size =
14211                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14212                if inlined != (member_inline_size <= 4) {
14213                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14214                }
14215                let inner_offset;
14216                let mut inner_depth = depth.clone();
14217                if inlined {
14218                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14219                    inner_offset = next_offset;
14220                } else {
14221                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14222                    inner_depth.increment()?;
14223                }
14224                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
14225                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14226                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14227                {
14228                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14229                }
14230                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14231                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14232                }
14233            }
14234
14235            next_offset += envelope_size;
14236            _next_ordinal_to_read += 1;
14237            if next_offset >= end_offset {
14238                return Ok(());
14239            }
14240
14241            // Decode unknown envelopes for gaps in ordinals.
14242            while _next_ordinal_to_read < 10 {
14243                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14244                _next_ordinal_to_read += 1;
14245                next_offset += envelope_size;
14246            }
14247
14248            let next_out_of_line = decoder.next_out_of_line();
14249            let handles_before = decoder.remaining_handles();
14250            if let Some((inlined, num_bytes, num_handles)) =
14251                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14252            {
14253                let member_inline_size =
14254                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14255                if inlined != (member_inline_size <= 4) {
14256                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14257                }
14258                let inner_offset;
14259                let mut inner_depth = depth.clone();
14260                if inlined {
14261                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14262                    inner_offset = next_offset;
14263                } else {
14264                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14265                    inner_depth.increment()?;
14266                }
14267                let val_ref =
14268                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
14269                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14271                {
14272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14273                }
14274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14276                }
14277            }
14278
14279            next_offset += envelope_size;
14280            _next_ordinal_to_read += 1;
14281            if next_offset >= end_offset {
14282                return Ok(());
14283            }
14284
14285            // Decode unknown envelopes for gaps in ordinals.
14286            while _next_ordinal_to_read < 11 {
14287                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14288                _next_ordinal_to_read += 1;
14289                next_offset += envelope_size;
14290            }
14291
14292            let next_out_of_line = decoder.next_out_of_line();
14293            let handles_before = decoder.remaining_handles();
14294            if let Some((inlined, num_bytes, num_handles)) =
14295                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14296            {
14297                let member_inline_size =
14298                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14299                if inlined != (member_inline_size <= 4) {
14300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14301                }
14302                let inner_offset;
14303                let mut inner_depth = depth.clone();
14304                if inlined {
14305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14306                    inner_offset = next_offset;
14307                } else {
14308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14309                    inner_depth.increment()?;
14310                }
14311                let val_ref = self
14312                    .thread_stable_network_data_version
14313                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
14314                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14315                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14316                {
14317                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14318                }
14319                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14320                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14321                }
14322            }
14323
14324            next_offset += envelope_size;
14325            _next_ordinal_to_read += 1;
14326            if next_offset >= end_offset {
14327                return Ok(());
14328            }
14329
14330            // Decode unknown envelopes for gaps in ordinals.
14331            while _next_ordinal_to_read < 12 {
14332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14333                _next_ordinal_to_read += 1;
14334                next_offset += envelope_size;
14335            }
14336
14337            let next_out_of_line = decoder.next_out_of_line();
14338            let handles_before = decoder.remaining_handles();
14339            if let Some((inlined, num_bytes, num_handles)) =
14340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14341            {
14342                let member_inline_size =
14343                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14344                        decoder.context,
14345                    );
14346                if inlined != (member_inline_size <= 4) {
14347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14348                }
14349                let inner_offset;
14350                let mut inner_depth = depth.clone();
14351                if inlined {
14352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14353                    inner_offset = next_offset;
14354                } else {
14355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14356                    inner_depth.increment()?;
14357                }
14358                let val_ref = self
14359                    .thread_network_data
14360                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14361                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14362                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14363                {
14364                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14365                }
14366                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14367                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14368                }
14369            }
14370
14371            next_offset += envelope_size;
14372            _next_ordinal_to_read += 1;
14373            if next_offset >= end_offset {
14374                return Ok(());
14375            }
14376
14377            // Decode unknown envelopes for gaps in ordinals.
14378            while _next_ordinal_to_read < 13 {
14379                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14380                _next_ordinal_to_read += 1;
14381                next_offset += envelope_size;
14382            }
14383
14384            let next_out_of_line = decoder.next_out_of_line();
14385            let handles_before = decoder.remaining_handles();
14386            if let Some((inlined, num_bytes, num_handles)) =
14387                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14388            {
14389                let member_inline_size =
14390                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14391                        decoder.context,
14392                    );
14393                if inlined != (member_inline_size <= 4) {
14394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14395                }
14396                let inner_offset;
14397                let mut inner_depth = depth.clone();
14398                if inlined {
14399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14400                    inner_offset = next_offset;
14401                } else {
14402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14403                    inner_depth.increment()?;
14404                }
14405                let val_ref = self
14406                    .thread_stable_network_data
14407                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14408                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14410                {
14411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14412                }
14413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14415                }
14416            }
14417
14418            next_offset += envelope_size;
14419            _next_ordinal_to_read += 1;
14420            if next_offset >= end_offset {
14421                return Ok(());
14422            }
14423
14424            // Decode unknown envelopes for gaps in ordinals.
14425            while _next_ordinal_to_read < 14 {
14426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14427                _next_ordinal_to_read += 1;
14428                next_offset += envelope_size;
14429            }
14430
14431            let next_out_of_line = decoder.next_out_of_line();
14432            let handles_before = decoder.remaining_handles();
14433            if let Some((inlined, num_bytes, num_handles)) =
14434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14435            {
14436                let member_inline_size =
14437                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
14438                        decoder.context,
14439                    );
14440                if inlined != (member_inline_size <= 4) {
14441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14442                }
14443                let inner_offset;
14444                let mut inner_depth = depth.clone();
14445                if inlined {
14446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14447                    inner_offset = next_offset;
14448                } else {
14449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14450                    inner_depth.increment()?;
14451                }
14452                let val_ref = self
14453                    .thread_border_routing_counters
14454                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
14455                fidl::decode!(
14456                    BorderRoutingCounters,
14457                    D,
14458                    val_ref,
14459                    decoder,
14460                    inner_offset,
14461                    inner_depth
14462                )?;
14463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14464                {
14465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14466                }
14467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14469                }
14470            }
14471
14472            next_offset += envelope_size;
14473            _next_ordinal_to_read += 1;
14474            if next_offset >= end_offset {
14475                return Ok(());
14476            }
14477
14478            // Decode unknown envelopes for gaps in ordinals.
14479            while _next_ordinal_to_read < 15 {
14480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14481                _next_ordinal_to_read += 1;
14482                next_offset += envelope_size;
14483            }
14484
14485            let next_out_of_line = decoder.next_out_of_line();
14486            let handles_before = decoder.remaining_handles();
14487            if let Some((inlined, num_bytes, num_handles)) =
14488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14489            {
14490                let member_inline_size =
14491                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14492                if inlined != (member_inline_size <= 4) {
14493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14494                }
14495                let inner_offset;
14496                let mut inner_depth = depth.clone();
14497                if inlined {
14498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14499                    inner_offset = next_offset;
14500                } else {
14501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14502                    inner_depth.increment()?;
14503                }
14504                let val_ref =
14505                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
14506                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14507                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14508                {
14509                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14510                }
14511                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14512                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14513                }
14514            }
14515
14516            next_offset += envelope_size;
14517            _next_ordinal_to_read += 1;
14518            if next_offset >= end_offset {
14519                return Ok(());
14520            }
14521
14522            // Decode unknown envelopes for gaps in ordinals.
14523            while _next_ordinal_to_read < 16 {
14524                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14525                _next_ordinal_to_read += 1;
14526                next_offset += envelope_size;
14527            }
14528
14529            let next_out_of_line = decoder.next_out_of_line();
14530            let handles_before = decoder.remaining_handles();
14531            if let Some((inlined, num_bytes, num_handles)) =
14532                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14533            {
14534                let member_inline_size =
14535                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14536                if inlined != (member_inline_size <= 4) {
14537                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14538                }
14539                let inner_offset;
14540                let mut inner_depth = depth.clone();
14541                if inlined {
14542                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14543                    inner_offset = next_offset;
14544                } else {
14545                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14546                    inner_depth.increment()?;
14547                }
14548                let val_ref =
14549                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
14550                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14551                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14552                {
14553                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14554                }
14555                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14556                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14557                }
14558            }
14559
14560            next_offset += envelope_size;
14561            _next_ordinal_to_read += 1;
14562            if next_offset >= end_offset {
14563                return Ok(());
14564            }
14565
14566            // Decode unknown envelopes for gaps in ordinals.
14567            while _next_ordinal_to_read < 17 {
14568                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14569                _next_ordinal_to_read += 1;
14570                next_offset += envelope_size;
14571            }
14572
14573            let next_out_of_line = decoder.next_out_of_line();
14574            let handles_before = decoder.remaining_handles();
14575            if let Some((inlined, num_bytes, num_handles)) =
14576                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14577            {
14578                let member_inline_size =
14579                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14580                if inlined != (member_inline_size <= 4) {
14581                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14582                }
14583                let inner_offset;
14584                let mut inner_depth = depth.clone();
14585                if inlined {
14586                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14587                    inner_offset = next_offset;
14588                } else {
14589                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14590                    inner_depth.increment()?;
14591                }
14592                let val_ref =
14593                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
14594                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
14595                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14596                {
14597                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14598                }
14599                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14600                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14601                }
14602            }
14603
14604            next_offset += envelope_size;
14605            _next_ordinal_to_read += 1;
14606            if next_offset >= end_offset {
14607                return Ok(());
14608            }
14609
14610            // Decode unknown envelopes for gaps in ordinals.
14611            while _next_ordinal_to_read < 18 {
14612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14613                _next_ordinal_to_read += 1;
14614                next_offset += envelope_size;
14615            }
14616
14617            let next_out_of_line = decoder.next_out_of_line();
14618            let handles_before = decoder.remaining_handles();
14619            if let Some((inlined, num_bytes, num_handles)) =
14620                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14621            {
14622                let member_inline_size =
14623                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14624                if inlined != (member_inline_size <= 4) {
14625                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14626                }
14627                let inner_offset;
14628                let mut inner_depth = depth.clone();
14629                if inlined {
14630                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14631                    inner_offset = next_offset;
14632                } else {
14633                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14634                    inner_depth.increment()?;
14635                }
14636                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
14637                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
14638                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14639                {
14640                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14641                }
14642                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14643                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14644                }
14645            }
14646
14647            next_offset += envelope_size;
14648            _next_ordinal_to_read += 1;
14649            if next_offset >= end_offset {
14650                return Ok(());
14651            }
14652
14653            // Decode unknown envelopes for gaps in ordinals.
14654            while _next_ordinal_to_read < 19 {
14655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14656                _next_ordinal_to_read += 1;
14657                next_offset += envelope_size;
14658            }
14659
14660            let next_out_of_line = decoder.next_out_of_line();
14661            let handles_before = decoder.remaining_handles();
14662            if let Some((inlined, num_bytes, num_handles)) =
14663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14664            {
14665                let member_inline_size =
14666                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14667                if inlined != (member_inline_size <= 4) {
14668                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14669                }
14670                let inner_offset;
14671                let mut inner_depth = depth.clone();
14672                if inlined {
14673                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14674                    inner_offset = next_offset;
14675                } else {
14676                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14677                    inner_depth.increment()?;
14678                }
14679                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
14680                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
14681                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14682                {
14683                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14684                }
14685                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14686                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14687                }
14688            }
14689
14690            next_offset += envelope_size;
14691            _next_ordinal_to_read += 1;
14692            if next_offset >= end_offset {
14693                return Ok(());
14694            }
14695
14696            // Decode unknown envelopes for gaps in ordinals.
14697            while _next_ordinal_to_read < 20 {
14698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14699                _next_ordinal_to_read += 1;
14700                next_offset += envelope_size;
14701            }
14702
14703            let next_out_of_line = decoder.next_out_of_line();
14704            let handles_before = decoder.remaining_handles();
14705            if let Some((inlined, num_bytes, num_handles)) =
14706                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14707            {
14708                let member_inline_size =
14709                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14710                if inlined != (member_inline_size <= 4) {
14711                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14712                }
14713                let inner_offset;
14714                let mut inner_depth = depth.clone();
14715                if inlined {
14716                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14717                    inner_offset = next_offset;
14718                } else {
14719                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14720                    inner_depth.increment()?;
14721                }
14722                let val_ref =
14723                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
14724                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14725                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14726                {
14727                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14728                }
14729                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14730                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14731                }
14732            }
14733
14734            next_offset += envelope_size;
14735            _next_ordinal_to_read += 1;
14736            if next_offset >= end_offset {
14737                return Ok(());
14738            }
14739
14740            // Decode unknown envelopes for gaps in ordinals.
14741            while _next_ordinal_to_read < 21 {
14742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14743                _next_ordinal_to_read += 1;
14744                next_offset += envelope_size;
14745            }
14746
14747            let next_out_of_line = decoder.next_out_of_line();
14748            let handles_before = decoder.remaining_handles();
14749            if let Some((inlined, num_bytes, num_handles)) =
14750                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14751            {
14752                let member_inline_size =
14753                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14754                if inlined != (member_inline_size <= 4) {
14755                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14756                }
14757                let inner_offset;
14758                let mut inner_depth = depth.clone();
14759                if inlined {
14760                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14761                    inner_offset = next_offset;
14762                } else {
14763                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14764                    inner_depth.increment()?;
14765                }
14766                let val_ref =
14767                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
14768                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14769                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14770                {
14771                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14772                }
14773                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14774                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14775                }
14776            }
14777
14778            next_offset += envelope_size;
14779            _next_ordinal_to_read += 1;
14780            if next_offset >= end_offset {
14781                return Ok(());
14782            }
14783
14784            // Decode unknown envelopes for gaps in ordinals.
14785            while _next_ordinal_to_read < 22 {
14786                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14787                _next_ordinal_to_read += 1;
14788                next_offset += envelope_size;
14789            }
14790
14791            let next_out_of_line = decoder.next_out_of_line();
14792            let handles_before = decoder.remaining_handles();
14793            if let Some((inlined, num_bytes, num_handles)) =
14794                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14795            {
14796                let member_inline_size =
14797                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14798                if inlined != (member_inline_size <= 4) {
14799                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14800                }
14801                let inner_offset;
14802                let mut inner_depth = depth.clone();
14803                if inlined {
14804                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14805                    inner_offset = next_offset;
14806                } else {
14807                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14808                    inner_depth.increment()?;
14809                }
14810                let val_ref = self
14811                    .upstream_dns_info
14812                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
14813                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14814                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14815                {
14816                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14817                }
14818                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14819                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14820                }
14821            }
14822
14823            next_offset += envelope_size;
14824            _next_ordinal_to_read += 1;
14825            if next_offset >= end_offset {
14826                return Ok(());
14827            }
14828
14829            // Decode unknown envelopes for gaps in ordinals.
14830            while _next_ordinal_to_read < 23 {
14831                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14832                _next_ordinal_to_read += 1;
14833                next_offset += envelope_size;
14834            }
14835
14836            let next_out_of_line = decoder.next_out_of_line();
14837            let handles_before = decoder.remaining_handles();
14838            if let Some((inlined, num_bytes, num_handles)) =
14839                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14840            {
14841                let member_inline_size =
14842                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14843                if inlined != (member_inline_size <= 4) {
14844                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14845                }
14846                let inner_offset;
14847                let mut inner_depth = depth.clone();
14848                if inlined {
14849                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14850                    inner_offset = next_offset;
14851                } else {
14852                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14853                    inner_depth.increment()?;
14854                }
14855                let val_ref =
14856                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
14857                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14858                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14859                {
14860                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14861                }
14862                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14863                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14864                }
14865            }
14866
14867            next_offset += envelope_size;
14868            _next_ordinal_to_read += 1;
14869            if next_offset >= end_offset {
14870                return Ok(());
14871            }
14872
14873            // Decode unknown envelopes for gaps in ordinals.
14874            while _next_ordinal_to_read < 24 {
14875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14876                _next_ordinal_to_read += 1;
14877                next_offset += envelope_size;
14878            }
14879
14880            let next_out_of_line = decoder.next_out_of_line();
14881            let handles_before = decoder.remaining_handles();
14882            if let Some((inlined, num_bytes, num_handles)) =
14883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14884            {
14885                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14886                if inlined != (member_inline_size <= 4) {
14887                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14888                }
14889                let inner_offset;
14890                let mut inner_depth = depth.clone();
14891                if inlined {
14892                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14893                    inner_offset = next_offset;
14894                } else {
14895                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14896                    inner_depth.increment()?;
14897                }
14898                let val_ref = self.link_metrics_entries.get_or_insert_with(
14899                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
14900                );
14901                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
14902                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14903                {
14904                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14905                }
14906                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14907                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14908                }
14909            }
14910
14911            next_offset += envelope_size;
14912            _next_ordinal_to_read += 1;
14913            if next_offset >= end_offset {
14914                return Ok(());
14915            }
14916
14917            // Decode unknown envelopes for gaps in ordinals.
14918            while _next_ordinal_to_read < 25 {
14919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14920                _next_ordinal_to_read += 1;
14921                next_offset += envelope_size;
14922            }
14923
14924            let next_out_of_line = decoder.next_out_of_line();
14925            let handles_before = decoder.remaining_handles();
14926            if let Some((inlined, num_bytes, num_handles)) =
14927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14928            {
14929                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14930                if inlined != (member_inline_size <= 4) {
14931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14932                }
14933                let inner_offset;
14934                let mut inner_depth = depth.clone();
14935                if inlined {
14936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14937                    inner_offset = next_offset;
14938                } else {
14939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14940                    inner_depth.increment()?;
14941                }
14942                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
14943                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
14944                });
14945                fidl::decode!(
14946                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
14947                    D,
14948                    val_ref,
14949                    decoder,
14950                    inner_offset,
14951                    inner_depth
14952                )?;
14953                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14954                {
14955                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14956                }
14957                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14958                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14959                }
14960            }
14961
14962            next_offset += envelope_size;
14963            _next_ordinal_to_read += 1;
14964            if next_offset >= end_offset {
14965                return Ok(());
14966            }
14967
14968            // Decode unknown envelopes for gaps in ordinals.
14969            while _next_ordinal_to_read < 26 {
14970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14971                _next_ordinal_to_read += 1;
14972                next_offset += envelope_size;
14973            }
14974
14975            let next_out_of_line = decoder.next_out_of_line();
14976            let handles_before = decoder.remaining_handles();
14977            if let Some((inlined, num_bytes, num_handles)) =
14978                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14979            {
14980                let member_inline_size =
14981                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14982                if inlined != (member_inline_size <= 4) {
14983                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14984                }
14985                let inner_offset;
14986                let mut inner_depth = depth.clone();
14987                if inlined {
14988                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14989                    inner_offset = next_offset;
14990                } else {
14991                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14992                    inner_depth.increment()?;
14993                }
14994                let val_ref =
14995                    self.multi_ail_detected.get_or_insert_with(|| fidl::new_empty!(bool, D));
14996                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14997                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14998                {
14999                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15000                }
15001                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15002                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15003                }
15004            }
15005
15006            next_offset += envelope_size;
15007            _next_ordinal_to_read += 1;
15008            if next_offset >= end_offset {
15009                return Ok(());
15010            }
15011
15012            // Decode unknown envelopes for gaps in ordinals.
15013            while _next_ordinal_to_read < 27 {
15014                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15015                _next_ordinal_to_read += 1;
15016                next_offset += envelope_size;
15017            }
15018
15019            let next_out_of_line = decoder.next_out_of_line();
15020            let handles_before = decoder.remaining_handles();
15021            if let Some((inlined, num_bytes, num_handles)) =
15022                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15023            {
15024                let member_inline_size =
15025                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15026                if inlined != (member_inline_size <= 4) {
15027                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15028                }
15029                let inner_offset;
15030                let mut inner_depth = depth.clone();
15031                if inlined {
15032                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15033                    inner_offset = next_offset;
15034                } else {
15035                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15036                    inner_depth.increment()?;
15037                }
15038                let val_ref = self.extended_pan_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
15039                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15040                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15041                {
15042                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15043                }
15044                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15045                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15046                }
15047            }
15048
15049            next_offset += envelope_size;
15050
15051            // Decode the remaining unknown envelopes.
15052            while next_offset < end_offset {
15053                _next_ordinal_to_read += 1;
15054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15055                next_offset += envelope_size;
15056            }
15057
15058            Ok(())
15059        }
15060    }
15061
15062    impl TrelCounters {
15063        #[inline(always)]
15064        fn max_ordinal_present(&self) -> u64 {
15065            if let Some(_) = self.tx_packets {
15066                return 5;
15067            }
15068            if let Some(_) = self.tx_failure {
15069                return 4;
15070            }
15071            if let Some(_) = self.tx_bytes {
15072                return 3;
15073            }
15074            if let Some(_) = self.rx_packets {
15075                return 2;
15076            }
15077            if let Some(_) = self.rx_bytes {
15078                return 1;
15079            }
15080            0
15081        }
15082    }
15083
15084    impl fidl::encoding::ValueTypeMarker for TrelCounters {
15085        type Borrowed<'a> = &'a Self;
15086        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15087            value
15088        }
15089    }
15090
15091    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
15092        type Owned = Self;
15093
15094        #[inline(always)]
15095        fn inline_align(_context: fidl::encoding::Context) -> usize {
15096            8
15097        }
15098
15099        #[inline(always)]
15100        fn inline_size(_context: fidl::encoding::Context) -> usize {
15101            16
15102        }
15103    }
15104
15105    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
15106        for &TrelCounters
15107    {
15108        unsafe fn encode(
15109            self,
15110            encoder: &mut fidl::encoding::Encoder<'_, D>,
15111            offset: usize,
15112            mut depth: fidl::encoding::Depth,
15113        ) -> fidl::Result<()> {
15114            encoder.debug_check_bounds::<TrelCounters>(offset);
15115            // Vector header
15116            let max_ordinal: u64 = self.max_ordinal_present();
15117            encoder.write_num(max_ordinal, offset);
15118            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15119            // Calling encoder.out_of_line_offset(0) is not allowed.
15120            if max_ordinal == 0 {
15121                return Ok(());
15122            }
15123            depth.increment()?;
15124            let envelope_size = 8;
15125            let bytes_len = max_ordinal as usize * envelope_size;
15126            #[allow(unused_variables)]
15127            let offset = encoder.out_of_line_offset(bytes_len);
15128            let mut _prev_end_offset: usize = 0;
15129            if 1 > max_ordinal {
15130                return Ok(());
15131            }
15132
15133            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15134            // are envelope_size bytes.
15135            let cur_offset: usize = (1 - 1) * envelope_size;
15136
15137            // Zero reserved fields.
15138            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15139
15140            // Safety:
15141            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15142            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15143            //   envelope_size bytes, there is always sufficient room.
15144            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15145                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15146                encoder,
15147                offset + cur_offset,
15148                depth,
15149            )?;
15150
15151            _prev_end_offset = cur_offset + envelope_size;
15152            if 2 > max_ordinal {
15153                return Ok(());
15154            }
15155
15156            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15157            // are envelope_size bytes.
15158            let cur_offset: usize = (2 - 1) * envelope_size;
15159
15160            // Zero reserved fields.
15161            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15162
15163            // Safety:
15164            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15165            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15166            //   envelope_size bytes, there is always sufficient room.
15167            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15168                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15169                encoder,
15170                offset + cur_offset,
15171                depth,
15172            )?;
15173
15174            _prev_end_offset = cur_offset + envelope_size;
15175            if 3 > max_ordinal {
15176                return Ok(());
15177            }
15178
15179            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15180            // are envelope_size bytes.
15181            let cur_offset: usize = (3 - 1) * envelope_size;
15182
15183            // Zero reserved fields.
15184            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15185
15186            // Safety:
15187            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15188            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15189            //   envelope_size bytes, there is always sufficient room.
15190            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15191                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15192                encoder,
15193                offset + cur_offset,
15194                depth,
15195            )?;
15196
15197            _prev_end_offset = cur_offset + envelope_size;
15198            if 4 > max_ordinal {
15199                return Ok(());
15200            }
15201
15202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15203            // are envelope_size bytes.
15204            let cur_offset: usize = (4 - 1) * envelope_size;
15205
15206            // Zero reserved fields.
15207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15208
15209            // Safety:
15210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15212            //   envelope_size bytes, there is always sufficient room.
15213            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15214                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15215                encoder,
15216                offset + cur_offset,
15217                depth,
15218            )?;
15219
15220            _prev_end_offset = cur_offset + envelope_size;
15221            if 5 > max_ordinal {
15222                return Ok(());
15223            }
15224
15225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15226            // are envelope_size bytes.
15227            let cur_offset: usize = (5 - 1) * envelope_size;
15228
15229            // Zero reserved fields.
15230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15231
15232            // Safety:
15233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15235            //   envelope_size bytes, there is always sufficient room.
15236            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15237                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15238                encoder,
15239                offset + cur_offset,
15240                depth,
15241            )?;
15242
15243            _prev_end_offset = cur_offset + envelope_size;
15244
15245            Ok(())
15246        }
15247    }
15248
15249    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
15250        #[inline(always)]
15251        fn new_empty() -> Self {
15252            Self::default()
15253        }
15254
15255        unsafe fn decode(
15256            &mut self,
15257            decoder: &mut fidl::encoding::Decoder<'_, D>,
15258            offset: usize,
15259            mut depth: fidl::encoding::Depth,
15260        ) -> fidl::Result<()> {
15261            decoder.debug_check_bounds::<Self>(offset);
15262            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15263                None => return Err(fidl::Error::NotNullable),
15264                Some(len) => len,
15265            };
15266            // Calling decoder.out_of_line_offset(0) is not allowed.
15267            if len == 0 {
15268                return Ok(());
15269            };
15270            depth.increment()?;
15271            let envelope_size = 8;
15272            let bytes_len = len * envelope_size;
15273            let offset = decoder.out_of_line_offset(bytes_len)?;
15274            // Decode the envelope for each type.
15275            let mut _next_ordinal_to_read = 0;
15276            let mut next_offset = offset;
15277            let end_offset = offset + bytes_len;
15278            _next_ordinal_to_read += 1;
15279            if next_offset >= end_offset {
15280                return Ok(());
15281            }
15282
15283            // Decode unknown envelopes for gaps in ordinals.
15284            while _next_ordinal_to_read < 1 {
15285                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15286                _next_ordinal_to_read += 1;
15287                next_offset += envelope_size;
15288            }
15289
15290            let next_out_of_line = decoder.next_out_of_line();
15291            let handles_before = decoder.remaining_handles();
15292            if let Some((inlined, num_bytes, num_handles)) =
15293                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15294            {
15295                let member_inline_size =
15296                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15297                if inlined != (member_inline_size <= 4) {
15298                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15299                }
15300                let inner_offset;
15301                let mut inner_depth = depth.clone();
15302                if inlined {
15303                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15304                    inner_offset = next_offset;
15305                } else {
15306                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15307                    inner_depth.increment()?;
15308                }
15309                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15310                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15312                {
15313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15314                }
15315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15317                }
15318            }
15319
15320            next_offset += envelope_size;
15321            _next_ordinal_to_read += 1;
15322            if next_offset >= end_offset {
15323                return Ok(());
15324            }
15325
15326            // Decode unknown envelopes for gaps in ordinals.
15327            while _next_ordinal_to_read < 2 {
15328                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15329                _next_ordinal_to_read += 1;
15330                next_offset += envelope_size;
15331            }
15332
15333            let next_out_of_line = decoder.next_out_of_line();
15334            let handles_before = decoder.remaining_handles();
15335            if let Some((inlined, num_bytes, num_handles)) =
15336                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15337            {
15338                let member_inline_size =
15339                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15340                if inlined != (member_inline_size <= 4) {
15341                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15342                }
15343                let inner_offset;
15344                let mut inner_depth = depth.clone();
15345                if inlined {
15346                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15347                    inner_offset = next_offset;
15348                } else {
15349                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15350                    inner_depth.increment()?;
15351                }
15352                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15353                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15354                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15355                {
15356                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15357                }
15358                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15359                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15360                }
15361            }
15362
15363            next_offset += envelope_size;
15364            _next_ordinal_to_read += 1;
15365            if next_offset >= end_offset {
15366                return Ok(());
15367            }
15368
15369            // Decode unknown envelopes for gaps in ordinals.
15370            while _next_ordinal_to_read < 3 {
15371                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15372                _next_ordinal_to_read += 1;
15373                next_offset += envelope_size;
15374            }
15375
15376            let next_out_of_line = decoder.next_out_of_line();
15377            let handles_before = decoder.remaining_handles();
15378            if let Some((inlined, num_bytes, num_handles)) =
15379                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15380            {
15381                let member_inline_size =
15382                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15383                if inlined != (member_inline_size <= 4) {
15384                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15385                }
15386                let inner_offset;
15387                let mut inner_depth = depth.clone();
15388                if inlined {
15389                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15390                    inner_offset = next_offset;
15391                } else {
15392                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15393                    inner_depth.increment()?;
15394                }
15395                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15396                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15397                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15398                {
15399                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15400                }
15401                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15402                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15403                }
15404            }
15405
15406            next_offset += envelope_size;
15407            _next_ordinal_to_read += 1;
15408            if next_offset >= end_offset {
15409                return Ok(());
15410            }
15411
15412            // Decode unknown envelopes for gaps in ordinals.
15413            while _next_ordinal_to_read < 4 {
15414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15415                _next_ordinal_to_read += 1;
15416                next_offset += envelope_size;
15417            }
15418
15419            let next_out_of_line = decoder.next_out_of_line();
15420            let handles_before = decoder.remaining_handles();
15421            if let Some((inlined, num_bytes, num_handles)) =
15422                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15423            {
15424                let member_inline_size =
15425                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15426                if inlined != (member_inline_size <= 4) {
15427                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15428                }
15429                let inner_offset;
15430                let mut inner_depth = depth.clone();
15431                if inlined {
15432                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15433                    inner_offset = next_offset;
15434                } else {
15435                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15436                    inner_depth.increment()?;
15437                }
15438                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
15439                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15440                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15441                {
15442                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15443                }
15444                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15445                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15446                }
15447            }
15448
15449            next_offset += envelope_size;
15450            _next_ordinal_to_read += 1;
15451            if next_offset >= end_offset {
15452                return Ok(());
15453            }
15454
15455            // Decode unknown envelopes for gaps in ordinals.
15456            while _next_ordinal_to_read < 5 {
15457                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15458                _next_ordinal_to_read += 1;
15459                next_offset += envelope_size;
15460            }
15461
15462            let next_out_of_line = decoder.next_out_of_line();
15463            let handles_before = decoder.remaining_handles();
15464            if let Some((inlined, num_bytes, num_handles)) =
15465                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15466            {
15467                let member_inline_size =
15468                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15469                if inlined != (member_inline_size <= 4) {
15470                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15471                }
15472                let inner_offset;
15473                let mut inner_depth = depth.clone();
15474                if inlined {
15475                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15476                    inner_offset = next_offset;
15477                } else {
15478                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15479                    inner_depth.increment()?;
15480                }
15481                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15482                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15483                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15484                {
15485                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15486                }
15487                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15488                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15489                }
15490            }
15491
15492            next_offset += envelope_size;
15493
15494            // Decode the remaining unknown envelopes.
15495            while next_offset < end_offset {
15496                _next_ordinal_to_read += 1;
15497                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15498                next_offset += envelope_size;
15499            }
15500
15501            Ok(())
15502        }
15503    }
15504
15505    impl TrelPeersInfo {
15506        #[inline(always)]
15507        fn max_ordinal_present(&self) -> u64 {
15508            if let Some(_) = self.num_trel_peers {
15509                return 1;
15510            }
15511            0
15512        }
15513    }
15514
15515    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
15516        type Borrowed<'a> = &'a Self;
15517        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15518            value
15519        }
15520    }
15521
15522    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
15523        type Owned = Self;
15524
15525        #[inline(always)]
15526        fn inline_align(_context: fidl::encoding::Context) -> usize {
15527            8
15528        }
15529
15530        #[inline(always)]
15531        fn inline_size(_context: fidl::encoding::Context) -> usize {
15532            16
15533        }
15534    }
15535
15536    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
15537        for &TrelPeersInfo
15538    {
15539        unsafe fn encode(
15540            self,
15541            encoder: &mut fidl::encoding::Encoder<'_, D>,
15542            offset: usize,
15543            mut depth: fidl::encoding::Depth,
15544        ) -> fidl::Result<()> {
15545            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
15546            // Vector header
15547            let max_ordinal: u64 = self.max_ordinal_present();
15548            encoder.write_num(max_ordinal, offset);
15549            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15550            // Calling encoder.out_of_line_offset(0) is not allowed.
15551            if max_ordinal == 0 {
15552                return Ok(());
15553            }
15554            depth.increment()?;
15555            let envelope_size = 8;
15556            let bytes_len = max_ordinal as usize * envelope_size;
15557            #[allow(unused_variables)]
15558            let offset = encoder.out_of_line_offset(bytes_len);
15559            let mut _prev_end_offset: usize = 0;
15560            if 1 > max_ordinal {
15561                return Ok(());
15562            }
15563
15564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15565            // are envelope_size bytes.
15566            let cur_offset: usize = (1 - 1) * envelope_size;
15567
15568            // Zero reserved fields.
15569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15570
15571            // Safety:
15572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15574            //   envelope_size bytes, there is always sufficient room.
15575            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15576                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15577                encoder,
15578                offset + cur_offset,
15579                depth,
15580            )?;
15581
15582            _prev_end_offset = cur_offset + envelope_size;
15583
15584            Ok(())
15585        }
15586    }
15587
15588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
15589        #[inline(always)]
15590        fn new_empty() -> Self {
15591            Self::default()
15592        }
15593
15594        unsafe fn decode(
15595            &mut self,
15596            decoder: &mut fidl::encoding::Decoder<'_, D>,
15597            offset: usize,
15598            mut depth: fidl::encoding::Depth,
15599        ) -> fidl::Result<()> {
15600            decoder.debug_check_bounds::<Self>(offset);
15601            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15602                None => return Err(fidl::Error::NotNullable),
15603                Some(len) => len,
15604            };
15605            // Calling decoder.out_of_line_offset(0) is not allowed.
15606            if len == 0 {
15607                return Ok(());
15608            };
15609            depth.increment()?;
15610            let envelope_size = 8;
15611            let bytes_len = len * envelope_size;
15612            let offset = decoder.out_of_line_offset(bytes_len)?;
15613            // Decode the envelope for each type.
15614            let mut _next_ordinal_to_read = 0;
15615            let mut next_offset = offset;
15616            let end_offset = offset + bytes_len;
15617            _next_ordinal_to_read += 1;
15618            if next_offset >= end_offset {
15619                return Ok(());
15620            }
15621
15622            // Decode unknown envelopes for gaps in ordinals.
15623            while _next_ordinal_to_read < 1 {
15624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15625                _next_ordinal_to_read += 1;
15626                next_offset += envelope_size;
15627            }
15628
15629            let next_out_of_line = decoder.next_out_of_line();
15630            let handles_before = decoder.remaining_handles();
15631            if let Some((inlined, num_bytes, num_handles)) =
15632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15633            {
15634                let member_inline_size =
15635                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15636                if inlined != (member_inline_size <= 4) {
15637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15638                }
15639                let inner_offset;
15640                let mut inner_depth = depth.clone();
15641                if inlined {
15642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15643                    inner_offset = next_offset;
15644                } else {
15645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15646                    inner_depth.increment()?;
15647                }
15648                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
15649                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15651                {
15652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15653                }
15654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15656                }
15657            }
15658
15659            next_offset += envelope_size;
15660
15661            // Decode the remaining unknown envelopes.
15662            while next_offset < end_offset {
15663                _next_ordinal_to_read += 1;
15664                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15665                next_offset += envelope_size;
15666            }
15667
15668            Ok(())
15669        }
15670    }
15671
15672    impl UpstreamDnsCounters {
15673        #[inline(always)]
15674        fn max_ordinal_present(&self) -> u64 {
15675            if let Some(_) = self.failures {
15676                return 3;
15677            }
15678            if let Some(_) = self.responses {
15679                return 2;
15680            }
15681            if let Some(_) = self.queries {
15682                return 1;
15683            }
15684            0
15685        }
15686    }
15687
15688    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
15689        type Borrowed<'a> = &'a Self;
15690        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15691            value
15692        }
15693    }
15694
15695    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
15696        type Owned = Self;
15697
15698        #[inline(always)]
15699        fn inline_align(_context: fidl::encoding::Context) -> usize {
15700            8
15701        }
15702
15703        #[inline(always)]
15704        fn inline_size(_context: fidl::encoding::Context) -> usize {
15705            16
15706        }
15707    }
15708
15709    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
15710        for &UpstreamDnsCounters
15711    {
15712        unsafe fn encode(
15713            self,
15714            encoder: &mut fidl::encoding::Encoder<'_, D>,
15715            offset: usize,
15716            mut depth: fidl::encoding::Depth,
15717        ) -> fidl::Result<()> {
15718            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
15719            // Vector header
15720            let max_ordinal: u64 = self.max_ordinal_present();
15721            encoder.write_num(max_ordinal, offset);
15722            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15723            // Calling encoder.out_of_line_offset(0) is not allowed.
15724            if max_ordinal == 0 {
15725                return Ok(());
15726            }
15727            depth.increment()?;
15728            let envelope_size = 8;
15729            let bytes_len = max_ordinal as usize * envelope_size;
15730            #[allow(unused_variables)]
15731            let offset = encoder.out_of_line_offset(bytes_len);
15732            let mut _prev_end_offset: usize = 0;
15733            if 1 > max_ordinal {
15734                return Ok(());
15735            }
15736
15737            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15738            // are envelope_size bytes.
15739            let cur_offset: usize = (1 - 1) * envelope_size;
15740
15741            // Zero reserved fields.
15742            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15743
15744            // Safety:
15745            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15746            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15747            //   envelope_size bytes, there is always sufficient room.
15748            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15749                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15750                encoder,
15751                offset + cur_offset,
15752                depth,
15753            )?;
15754
15755            _prev_end_offset = cur_offset + envelope_size;
15756            if 2 > max_ordinal {
15757                return Ok(());
15758            }
15759
15760            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15761            // are envelope_size bytes.
15762            let cur_offset: usize = (2 - 1) * envelope_size;
15763
15764            // Zero reserved fields.
15765            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15766
15767            // Safety:
15768            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15769            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15770            //   envelope_size bytes, there is always sufficient room.
15771            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15772                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15773                encoder,
15774                offset + cur_offset,
15775                depth,
15776            )?;
15777
15778            _prev_end_offset = cur_offset + envelope_size;
15779            if 3 > max_ordinal {
15780                return Ok(());
15781            }
15782
15783            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15784            // are envelope_size bytes.
15785            let cur_offset: usize = (3 - 1) * envelope_size;
15786
15787            // Zero reserved fields.
15788            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15789
15790            // Safety:
15791            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15792            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15793            //   envelope_size bytes, there is always sufficient room.
15794            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15795                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15796                encoder,
15797                offset + cur_offset,
15798                depth,
15799            )?;
15800
15801            _prev_end_offset = cur_offset + envelope_size;
15802
15803            Ok(())
15804        }
15805    }
15806
15807    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
15808        #[inline(always)]
15809        fn new_empty() -> Self {
15810            Self::default()
15811        }
15812
15813        unsafe fn decode(
15814            &mut self,
15815            decoder: &mut fidl::encoding::Decoder<'_, D>,
15816            offset: usize,
15817            mut depth: fidl::encoding::Depth,
15818        ) -> fidl::Result<()> {
15819            decoder.debug_check_bounds::<Self>(offset);
15820            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15821                None => return Err(fidl::Error::NotNullable),
15822                Some(len) => len,
15823            };
15824            // Calling decoder.out_of_line_offset(0) is not allowed.
15825            if len == 0 {
15826                return Ok(());
15827            };
15828            depth.increment()?;
15829            let envelope_size = 8;
15830            let bytes_len = len * envelope_size;
15831            let offset = decoder.out_of_line_offset(bytes_len)?;
15832            // Decode the envelope for each type.
15833            let mut _next_ordinal_to_read = 0;
15834            let mut next_offset = offset;
15835            let end_offset = offset + bytes_len;
15836            _next_ordinal_to_read += 1;
15837            if next_offset >= end_offset {
15838                return Ok(());
15839            }
15840
15841            // Decode unknown envelopes for gaps in ordinals.
15842            while _next_ordinal_to_read < 1 {
15843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15844                _next_ordinal_to_read += 1;
15845                next_offset += envelope_size;
15846            }
15847
15848            let next_out_of_line = decoder.next_out_of_line();
15849            let handles_before = decoder.remaining_handles();
15850            if let Some((inlined, num_bytes, num_handles)) =
15851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15852            {
15853                let member_inline_size =
15854                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15855                if inlined != (member_inline_size <= 4) {
15856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15857                }
15858                let inner_offset;
15859                let mut inner_depth = depth.clone();
15860                if inlined {
15861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15862                    inner_offset = next_offset;
15863                } else {
15864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15865                    inner_depth.increment()?;
15866                }
15867                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
15868                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15870                {
15871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15872                }
15873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15875                }
15876            }
15877
15878            next_offset += envelope_size;
15879            _next_ordinal_to_read += 1;
15880            if next_offset >= end_offset {
15881                return Ok(());
15882            }
15883
15884            // Decode unknown envelopes for gaps in ordinals.
15885            while _next_ordinal_to_read < 2 {
15886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15887                _next_ordinal_to_read += 1;
15888                next_offset += envelope_size;
15889            }
15890
15891            let next_out_of_line = decoder.next_out_of_line();
15892            let handles_before = decoder.remaining_handles();
15893            if let Some((inlined, num_bytes, num_handles)) =
15894                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15895            {
15896                let member_inline_size =
15897                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15898                if inlined != (member_inline_size <= 4) {
15899                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15900                }
15901                let inner_offset;
15902                let mut inner_depth = depth.clone();
15903                if inlined {
15904                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15905                    inner_offset = next_offset;
15906                } else {
15907                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15908                    inner_depth.increment()?;
15909                }
15910                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
15911                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15912                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15913                {
15914                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15915                }
15916                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15917                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15918                }
15919            }
15920
15921            next_offset += envelope_size;
15922            _next_ordinal_to_read += 1;
15923            if next_offset >= end_offset {
15924                return Ok(());
15925            }
15926
15927            // Decode unknown envelopes for gaps in ordinals.
15928            while _next_ordinal_to_read < 3 {
15929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15930                _next_ordinal_to_read += 1;
15931                next_offset += envelope_size;
15932            }
15933
15934            let next_out_of_line = decoder.next_out_of_line();
15935            let handles_before = decoder.remaining_handles();
15936            if let Some((inlined, num_bytes, num_handles)) =
15937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15938            {
15939                let member_inline_size =
15940                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15941                if inlined != (member_inline_size <= 4) {
15942                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15943                }
15944                let inner_offset;
15945                let mut inner_depth = depth.clone();
15946                if inlined {
15947                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15948                    inner_offset = next_offset;
15949                } else {
15950                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15951                    inner_depth.increment()?;
15952                }
15953                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
15954                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15955                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15956                {
15957                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15958                }
15959                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15960                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15961                }
15962            }
15963
15964            next_offset += envelope_size;
15965
15966            // Decode the remaining unknown envelopes.
15967            while next_offset < end_offset {
15968                _next_ordinal_to_read += 1;
15969                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15970                next_offset += envelope_size;
15971            }
15972
15973            Ok(())
15974        }
15975    }
15976
15977    impl UpstreamDnsInfo {
15978        #[inline(always)]
15979        fn max_ordinal_present(&self) -> u64 {
15980            if let Some(_) = self.upstream_dns_query_state {
15981                return 1;
15982            }
15983            0
15984        }
15985    }
15986
15987    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
15988        type Borrowed<'a> = &'a Self;
15989        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15990            value
15991        }
15992    }
15993
15994    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
15995        type Owned = Self;
15996
15997        #[inline(always)]
15998        fn inline_align(_context: fidl::encoding::Context) -> usize {
15999            8
16000        }
16001
16002        #[inline(always)]
16003        fn inline_size(_context: fidl::encoding::Context) -> usize {
16004            16
16005        }
16006    }
16007
16008    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
16009        for &UpstreamDnsInfo
16010    {
16011        unsafe fn encode(
16012            self,
16013            encoder: &mut fidl::encoding::Encoder<'_, D>,
16014            offset: usize,
16015            mut depth: fidl::encoding::Depth,
16016        ) -> fidl::Result<()> {
16017            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
16018            // Vector header
16019            let max_ordinal: u64 = self.max_ordinal_present();
16020            encoder.write_num(max_ordinal, offset);
16021            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16022            // Calling encoder.out_of_line_offset(0) is not allowed.
16023            if max_ordinal == 0 {
16024                return Ok(());
16025            }
16026            depth.increment()?;
16027            let envelope_size = 8;
16028            let bytes_len = max_ordinal as usize * envelope_size;
16029            #[allow(unused_variables)]
16030            let offset = encoder.out_of_line_offset(bytes_len);
16031            let mut _prev_end_offset: usize = 0;
16032            if 1 > max_ordinal {
16033                return Ok(());
16034            }
16035
16036            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16037            // are envelope_size bytes.
16038            let cur_offset: usize = (1 - 1) * envelope_size;
16039
16040            // Zero reserved fields.
16041            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16042
16043            // Safety:
16044            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16045            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16046            //   envelope_size bytes, there is always sufficient room.
16047            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
16048                self.upstream_dns_query_state
16049                    .as_ref()
16050                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
16051                encoder,
16052                offset + cur_offset,
16053                depth,
16054            )?;
16055
16056            _prev_end_offset = cur_offset + envelope_size;
16057
16058            Ok(())
16059        }
16060    }
16061
16062    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
16063        #[inline(always)]
16064        fn new_empty() -> Self {
16065            Self::default()
16066        }
16067
16068        unsafe fn decode(
16069            &mut self,
16070            decoder: &mut fidl::encoding::Decoder<'_, D>,
16071            offset: usize,
16072            mut depth: fidl::encoding::Depth,
16073        ) -> fidl::Result<()> {
16074            decoder.debug_check_bounds::<Self>(offset);
16075            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16076                None => return Err(fidl::Error::NotNullable),
16077                Some(len) => len,
16078            };
16079            // Calling decoder.out_of_line_offset(0) is not allowed.
16080            if len == 0 {
16081                return Ok(());
16082            };
16083            depth.increment()?;
16084            let envelope_size = 8;
16085            let bytes_len = len * envelope_size;
16086            let offset = decoder.out_of_line_offset(bytes_len)?;
16087            // Decode the envelope for each type.
16088            let mut _next_ordinal_to_read = 0;
16089            let mut next_offset = offset;
16090            let end_offset = offset + bytes_len;
16091            _next_ordinal_to_read += 1;
16092            if next_offset >= end_offset {
16093                return Ok(());
16094            }
16095
16096            // Decode unknown envelopes for gaps in ordinals.
16097            while _next_ordinal_to_read < 1 {
16098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16099                _next_ordinal_to_read += 1;
16100                next_offset += envelope_size;
16101            }
16102
16103            let next_out_of_line = decoder.next_out_of_line();
16104            let handles_before = decoder.remaining_handles();
16105            if let Some((inlined, num_bytes, num_handles)) =
16106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16107            {
16108                let member_inline_size =
16109                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
16110                        decoder.context,
16111                    );
16112                if inlined != (member_inline_size <= 4) {
16113                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16114                }
16115                let inner_offset;
16116                let mut inner_depth = depth.clone();
16117                if inlined {
16118                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16119                    inner_offset = next_offset;
16120                } else {
16121                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16122                    inner_depth.increment()?;
16123                }
16124                let val_ref = self
16125                    .upstream_dns_query_state
16126                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
16127                fidl::decode!(
16128                    UpstreamDnsQueryState,
16129                    D,
16130                    val_ref,
16131                    decoder,
16132                    inner_offset,
16133                    inner_depth
16134                )?;
16135                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16136                {
16137                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16138                }
16139                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16140                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16141                }
16142            }
16143
16144            next_offset += envelope_size;
16145
16146            // Decode the remaining unknown envelopes.
16147            while next_offset < end_offset {
16148                _next_ordinal_to_read += 1;
16149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16150                next_offset += envelope_size;
16151            }
16152
16153            Ok(())
16154        }
16155    }
16156
16157    impl fidl::encoding::ValueTypeMarker for JoinParams {
16158        type Borrowed<'a> = &'a Self;
16159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16160            value
16161        }
16162    }
16163
16164    unsafe impl fidl::encoding::TypeMarker for JoinParams {
16165        type Owned = Self;
16166
16167        #[inline(always)]
16168        fn inline_align(_context: fidl::encoding::Context) -> usize {
16169            8
16170        }
16171
16172        #[inline(always)]
16173        fn inline_size(_context: fidl::encoding::Context) -> usize {
16174            16
16175        }
16176    }
16177
16178    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
16179        for &JoinParams
16180    {
16181        #[inline]
16182        unsafe fn encode(
16183            self,
16184            encoder: &mut fidl::encoding::Encoder<'_, D>,
16185            offset: usize,
16186            _depth: fidl::encoding::Depth,
16187        ) -> fidl::Result<()> {
16188            encoder.debug_check_bounds::<JoinParams>(offset);
16189            encoder.write_num::<u64>(self.ordinal(), offset);
16190            match self {
16191            JoinParams::ProvisioningParameter(ref val) => {
16192                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
16193                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16194                    encoder, offset + 8, _depth
16195                )
16196            }
16197            JoinParams::JoinerParameter(ref val) => {
16198                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
16199                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16200                    encoder, offset + 8, _depth
16201                )
16202            }
16203            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16204        }
16205        }
16206    }
16207
16208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
16209        #[inline(always)]
16210        fn new_empty() -> Self {
16211            Self::__SourceBreaking { unknown_ordinal: 0 }
16212        }
16213
16214        #[inline]
16215        unsafe fn decode(
16216            &mut self,
16217            decoder: &mut fidl::encoding::Decoder<'_, D>,
16218            offset: usize,
16219            mut depth: fidl::encoding::Depth,
16220        ) -> fidl::Result<()> {
16221            decoder.debug_check_bounds::<Self>(offset);
16222            #[allow(unused_variables)]
16223            let next_out_of_line = decoder.next_out_of_line();
16224            let handles_before = decoder.remaining_handles();
16225            let (ordinal, inlined, num_bytes, num_handles) =
16226                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16227
16228            let member_inline_size = match ordinal {
16229            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16230            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16231            0 => return Err(fidl::Error::UnknownUnionTag),
16232            _ => num_bytes as usize,
16233        };
16234
16235            if inlined != (member_inline_size <= 4) {
16236                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16237            }
16238            let _inner_offset;
16239            if inlined {
16240                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16241                _inner_offset = offset + 8;
16242            } else {
16243                depth.increment()?;
16244                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16245            }
16246            match ordinal {
16247                1 => {
16248                    #[allow(irrefutable_let_patterns)]
16249                    if let JoinParams::ProvisioningParameter(_) = self {
16250                        // Do nothing, read the value into the object
16251                    } else {
16252                        // Initialize `self` to the right variant
16253                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
16254                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16255                            D
16256                        ));
16257                    }
16258                    #[allow(irrefutable_let_patterns)]
16259                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
16260                        fidl::decode!(
16261                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16262                            D,
16263                            val,
16264                            decoder,
16265                            _inner_offset,
16266                            depth
16267                        )?;
16268                    } else {
16269                        unreachable!()
16270                    }
16271                }
16272                2 => {
16273                    #[allow(irrefutable_let_patterns)]
16274                    if let JoinParams::JoinerParameter(_) = self {
16275                        // Do nothing, read the value into the object
16276                    } else {
16277                        // Initialize `self` to the right variant
16278                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
16279                            JoinerCommissioningParams,
16280                            D
16281                        ));
16282                    }
16283                    #[allow(irrefutable_let_patterns)]
16284                    if let JoinParams::JoinerParameter(ref mut val) = self {
16285                        fidl::decode!(
16286                            JoinerCommissioningParams,
16287                            D,
16288                            val,
16289                            decoder,
16290                            _inner_offset,
16291                            depth
16292                        )?;
16293                    } else {
16294                        unreachable!()
16295                    }
16296                }
16297                #[allow(deprecated)]
16298                ordinal => {
16299                    for _ in 0..num_handles {
16300                        decoder.drop_next_handle()?;
16301                    }
16302                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
16303                }
16304            }
16305            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16306                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16307            }
16308            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16309                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16310            }
16311            Ok(())
16312        }
16313    }
16314
16315    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
16316        type Borrowed<'a> = &'a Self;
16317        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16318            value
16319        }
16320    }
16321
16322    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
16323        type Owned = Self;
16324
16325        #[inline(always)]
16326        fn inline_align(_context: fidl::encoding::Context) -> usize {
16327            8
16328        }
16329
16330        #[inline(always)]
16331        fn inline_size(_context: fidl::encoding::Context) -> usize {
16332            16
16333        }
16334    }
16335
16336    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
16337        for &ProvisioningProgress
16338    {
16339        #[inline]
16340        unsafe fn encode(
16341            self,
16342            encoder: &mut fidl::encoding::Encoder<'_, D>,
16343            offset: usize,
16344            _depth: fidl::encoding::Depth,
16345        ) -> fidl::Result<()> {
16346            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
16347            encoder.write_num::<u64>(self.ordinal(), offset);
16348            match self {
16349            ProvisioningProgress::Progress(ref val) => {
16350                fidl::encoding::encode_in_envelope::<f32, D>(
16351                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
16352                    encoder, offset + 8, _depth
16353                )
16354            }
16355            ProvisioningProgress::Identity(ref val) => {
16356                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
16357                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
16358                    encoder, offset + 8, _depth
16359                )
16360            }
16361            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16362        }
16363        }
16364    }
16365
16366    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
16367        #[inline(always)]
16368        fn new_empty() -> Self {
16369            Self::__SourceBreaking { unknown_ordinal: 0 }
16370        }
16371
16372        #[inline]
16373        unsafe fn decode(
16374            &mut self,
16375            decoder: &mut fidl::encoding::Decoder<'_, D>,
16376            offset: usize,
16377            mut depth: fidl::encoding::Depth,
16378        ) -> fidl::Result<()> {
16379            decoder.debug_check_bounds::<Self>(offset);
16380            #[allow(unused_variables)]
16381            let next_out_of_line = decoder.next_out_of_line();
16382            let handles_before = decoder.remaining_handles();
16383            let (ordinal, inlined, num_bytes, num_handles) =
16384                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16385
16386            let member_inline_size = match ordinal {
16387            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16388            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16389            0 => return Err(fidl::Error::UnknownUnionTag),
16390            _ => num_bytes as usize,
16391        };
16392
16393            if inlined != (member_inline_size <= 4) {
16394                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16395            }
16396            let _inner_offset;
16397            if inlined {
16398                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16399                _inner_offset = offset + 8;
16400            } else {
16401                depth.increment()?;
16402                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16403            }
16404            match ordinal {
16405                1 => {
16406                    #[allow(irrefutable_let_patterns)]
16407                    if let ProvisioningProgress::Progress(_) = self {
16408                        // Do nothing, read the value into the object
16409                    } else {
16410                        // Initialize `self` to the right variant
16411                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
16412                    }
16413                    #[allow(irrefutable_let_patterns)]
16414                    if let ProvisioningProgress::Progress(ref mut val) = self {
16415                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
16416                    } else {
16417                        unreachable!()
16418                    }
16419                }
16420                2 => {
16421                    #[allow(irrefutable_let_patterns)]
16422                    if let ProvisioningProgress::Identity(_) = self {
16423                        // Do nothing, read the value into the object
16424                    } else {
16425                        // Initialize `self` to the right variant
16426                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
16427                            fidl_fuchsia_lowpan_device__common::Identity,
16428                            D
16429                        ));
16430                    }
16431                    #[allow(irrefutable_let_patterns)]
16432                    if let ProvisioningProgress::Identity(ref mut val) = self {
16433                        fidl::decode!(
16434                            fidl_fuchsia_lowpan_device__common::Identity,
16435                            D,
16436                            val,
16437                            decoder,
16438                            _inner_offset,
16439                            depth
16440                        )?;
16441                    } else {
16442                        unreachable!()
16443                    }
16444                }
16445                #[allow(deprecated)]
16446                ordinal => {
16447                    for _ in 0..num_handles {
16448                        decoder.drop_next_handle()?;
16449                    }
16450                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
16451                }
16452            }
16453            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16454                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16455            }
16456            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16457                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16458            }
16459            Ok(())
16460        }
16461    }
16462}