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    #[doc(hidden)]
1215    pub __source_breaking: fidl::marker::SourceBreaking,
1216}
1217
1218impl fidl::Persistable for Telemetry {}
1219
1220/// Represents a group of TREL related counters in the platform layer.
1221///
1222/// Derived from [`otPlatTrelCounters`](https://openthread.io/reference/struct/ot-plat-trel-counters).
1223#[derive(Clone, Debug, Default, PartialEq)]
1224pub struct TrelCounters {
1225    /// Sum of size of packets received through TREL.
1226    pub rx_bytes: Option<u64>,
1227    /// Number of packets received through TREL.
1228    pub rx_packets: Option<u64>,
1229    /// Sum of size of packets successfully transmitted through TREL.
1230    pub tx_bytes: Option<u64>,
1231    /// Number of packet transmission failures through TREL.
1232    pub tx_failure: Option<u64>,
1233    /// Number of packets successfully transmitted through TREL.
1234    pub tx_packets: Option<u64>,
1235    #[doc(hidden)]
1236    pub __source_breaking: fidl::marker::SourceBreaking,
1237}
1238
1239impl fidl::Persistable for TrelCounters {}
1240
1241/// Represents the TREL peer related info.
1242///
1243/// The info is available in OpenThread via https://openthread.io/reference/group/api-trel
1244/// More fields may be added per request.
1245#[derive(Clone, Debug, Default, PartialEq)]
1246pub struct TrelPeersInfo {
1247    /// Number of TREL peers for this Thread Border Router.
1248    ///
1249    /// Required.
1250    pub num_trel_peers: Option<u16>,
1251    #[doc(hidden)]
1252    pub __source_breaking: fidl::marker::SourceBreaking,
1253}
1254
1255impl fidl::Persistable for TrelPeersInfo {}
1256
1257/// Represents the count of queries, responses, failures handled by upstream DNS server
1258///
1259/// Derived from `otUpstreamDnsCounters`(https://openthread.io/reference/group/api-dnssd-server)
1260#[derive(Clone, Debug, Default, PartialEq)]
1261pub struct UpstreamDnsCounters {
1262    /// The number of queries forwarded
1263    ///
1264    /// Required.
1265    pub queries: Option<u32>,
1266    /// The number of responses forwarded
1267    ///
1268    /// Required.
1269    pub responses: Option<u32>,
1270    /// The number of upstream DNS failures
1271    ///
1272    /// Required.
1273    pub failures: Option<u32>,
1274    #[doc(hidden)]
1275    pub __source_breaking: fidl::marker::SourceBreaking,
1276}
1277
1278impl fidl::Persistable for UpstreamDnsCounters {}
1279
1280/// Represents the Upstream DNS related info.
1281///
1282/// The info is available in OpenThread via https://openthread.io/reference/group/api-dnssd-server
1283/// More fields may be added per request.
1284#[derive(Clone, Debug, Default, PartialEq)]
1285pub struct UpstreamDnsInfo {
1286    /// State of upstream DNS query.
1287    ///
1288    /// Required.
1289    pub upstream_dns_query_state: Option<UpstreamDnsQueryState>,
1290    #[doc(hidden)]
1291    pub __source_breaking: fidl::marker::SourceBreaking,
1292}
1293
1294impl fidl::Persistable for UpstreamDnsInfo {}
1295
1296/// Parameters for DeviceExtra::JoinNetwork command.
1297#[derive(Clone, Debug)]
1298pub enum JoinParams {
1299    /// Attempts to find and join a known pre-existing network.
1300    ProvisioningParameter(fidl_fuchsia_lowpan_device__common::ProvisioningParams),
1301    /// Attempts to find and join an unknown pre-existing network
1302    /// that is configured to accept and provision devices with
1303    /// the given shared secret, or PSKd. This allows new devices to
1304    /// join existing networks without knowing the credentials for
1305    /// the specific network.
1306    JoinerParameter(JoinerCommissioningParams),
1307    #[doc(hidden)]
1308    __SourceBreaking { unknown_ordinal: u64 },
1309}
1310
1311/// Pattern that matches an unknown `JoinParams` member.
1312#[macro_export]
1313macro_rules! JoinParamsUnknown {
1314    () => {
1315        _
1316    };
1317}
1318
1319// Custom PartialEq so that unknown variants are not equal to themselves.
1320impl PartialEq for JoinParams {
1321    fn eq(&self, other: &Self) -> bool {
1322        match (self, other) {
1323            (Self::ProvisioningParameter(x), Self::ProvisioningParameter(y)) => *x == *y,
1324            (Self::JoinerParameter(x), Self::JoinerParameter(y)) => *x == *y,
1325            _ => false,
1326        }
1327    }
1328}
1329
1330impl JoinParams {
1331    #[inline]
1332    pub fn ordinal(&self) -> u64 {
1333        match *self {
1334            Self::ProvisioningParameter(_) => 1,
1335            Self::JoinerParameter(_) => 2,
1336            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1337        }
1338    }
1339
1340    #[inline]
1341    pub fn unknown_variant_for_testing() -> Self {
1342        Self::__SourceBreaking { unknown_ordinal: 0 }
1343    }
1344
1345    #[inline]
1346    pub fn is_unknown(&self) -> bool {
1347        match self {
1348            Self::__SourceBreaking { .. } => true,
1349            _ => false,
1350        }
1351    }
1352}
1353
1354impl fidl::Persistable for JoinParams {}
1355
1356/// Indicates the current status of the form/join operation.
1357///
1358/// Returned by [`ProvisioningMonitor.WatchProgress`].
1359#[derive(Clone, Debug)]
1360pub enum ProvisioningProgress {
1361    /// Approximate percent complete indication for a user interface.
1362    Progress(f32),
1363    /// The final Identity when the operation has completed successfully.
1364    Identity(fidl_fuchsia_lowpan_device__common::Identity),
1365    #[doc(hidden)]
1366    __SourceBreaking { unknown_ordinal: u64 },
1367}
1368
1369/// Pattern that matches an unknown `ProvisioningProgress` member.
1370#[macro_export]
1371macro_rules! ProvisioningProgressUnknown {
1372    () => {
1373        _
1374    };
1375}
1376
1377// Custom PartialEq so that unknown variants are not equal to themselves.
1378impl PartialEq for ProvisioningProgress {
1379    fn eq(&self, other: &Self) -> bool {
1380        match (self, other) {
1381            (Self::Progress(x), Self::Progress(y)) => *x == *y,
1382            (Self::Identity(x), Self::Identity(y)) => *x == *y,
1383            _ => false,
1384        }
1385    }
1386}
1387
1388impl ProvisioningProgress {
1389    #[inline]
1390    pub fn ordinal(&self) -> u64 {
1391        match *self {
1392            Self::Progress(_) => 1,
1393            Self::Identity(_) => 2,
1394            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1395        }
1396    }
1397
1398    #[inline]
1399    pub fn unknown_variant_for_testing() -> Self {
1400        Self::__SourceBreaking { unknown_ordinal: 0 }
1401    }
1402
1403    #[inline]
1404    pub fn is_unknown(&self) -> bool {
1405        match self {
1406            Self::__SourceBreaking { .. } => true,
1407            _ => false,
1408        }
1409    }
1410}
1411
1412impl fidl::Persistable for ProvisioningProgress {}
1413
1414pub mod beacon_info_stream_ordinals {
1415    pub const NEXT: u64 = 0x367a557363a340b6;
1416}
1417
1418pub mod device_ordinals {
1419    pub const GET_SUPPORTED_CHANNELS: u64 = 0x2d8b969a9bd70f23;
1420}
1421
1422pub mod device_connector_ordinals {
1423    pub const CONNECT: u64 = 0x296896c9304836cd;
1424}
1425
1426pub mod device_extra_ordinals {
1427    pub const FORM_NETWORK: u64 = 0x6a8135f84bfc90e;
1428    pub const JOIN_NETWORK: u64 = 0x3ea583bab79f81c0;
1429    pub const START_NETWORK_SCAN: u64 = 0x6288c73b79188b40;
1430}
1431
1432pub mod device_extra_connector_ordinals {
1433    pub const CONNECT: u64 = 0x3fcb37e4226c81e9;
1434}
1435
1436pub mod device_route_ordinals {
1437    pub const REGISTER_ON_MESH_PREFIX: u64 = 0x2c4135231eb97f61;
1438    pub const UNREGISTER_ON_MESH_PREFIX: u64 = 0x82d5184028b797f;
1439    pub const REGISTER_EXTERNAL_ROUTE: u64 = 0x75f70f0fc34a5a73;
1440    pub const UNREGISTER_EXTERNAL_ROUTE: u64 = 0x3769be353b1d7088;
1441}
1442
1443pub mod device_route_connector_ordinals {
1444    pub const CONNECT: u64 = 0x19cd5fdcb971f4ac;
1445}
1446
1447pub mod device_route_extra_ordinals {
1448    pub const GET_LOCAL_ON_MESH_PREFIXES: u64 = 0xf192c43311c811;
1449    pub const GET_LOCAL_EXTERNAL_ROUTES: u64 = 0x5a688c2e62c766a6;
1450}
1451
1452pub mod device_route_extra_connector_ordinals {
1453    pub const CONNECT: u64 = 0x12f72df7b1348fe2;
1454}
1455
1456pub mod legacy_joining_ordinals {
1457    pub const MAKE_JOINABLE: u64 = 0x1739a6ae36d5c5aa;
1458}
1459
1460pub mod legacy_joining_connector_ordinals {
1461    pub const CONNECT: u64 = 0x3c8dfeb943bb8d06;
1462}
1463
1464pub mod provisioning_monitor_ordinals {
1465    pub const WATCH_PROGRESS: u64 = 0xc35336fc43ac0c;
1466}
1467
1468pub mod telemetry_provider_ordinals {
1469    pub const GET_TELEMETRY: u64 = 0xc34f2fff7dacc41;
1470}
1471
1472pub mod telemetry_provider_connector_ordinals {
1473    pub const CONNECT: u64 = 0x24a5bf1be73e2fad;
1474}
1475
1476mod internal {
1477    use super::*;
1478    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdState {
1479        type Owned = Self;
1480
1481        #[inline(always)]
1482        fn inline_align(_context: fidl::encoding::Context) -> usize {
1483            std::mem::align_of::<u32>()
1484        }
1485
1486        #[inline(always)]
1487        fn inline_size(_context: fidl::encoding::Context) -> usize {
1488            std::mem::size_of::<u32>()
1489        }
1490
1491        #[inline(always)]
1492        fn encode_is_copy() -> bool {
1493            false
1494        }
1495
1496        #[inline(always)]
1497        fn decode_is_copy() -> bool {
1498            false
1499        }
1500    }
1501
1502    impl fidl::encoding::ValueTypeMarker for Dhcp6PdState {
1503        type Borrowed<'a> = Self;
1504        #[inline(always)]
1505        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1506            *value
1507        }
1508    }
1509
1510    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Dhcp6PdState {
1511        #[inline]
1512        unsafe fn encode(
1513            self,
1514            encoder: &mut fidl::encoding::Encoder<'_, D>,
1515            offset: usize,
1516            _depth: fidl::encoding::Depth,
1517        ) -> fidl::Result<()> {
1518            encoder.debug_check_bounds::<Self>(offset);
1519            encoder.write_num(self.into_primitive(), offset);
1520            Ok(())
1521        }
1522    }
1523
1524    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdState {
1525        #[inline(always)]
1526        fn new_empty() -> Self {
1527            Self::unknown()
1528        }
1529
1530        #[inline]
1531        unsafe fn decode(
1532            &mut self,
1533            decoder: &mut fidl::encoding::Decoder<'_, D>,
1534            offset: usize,
1535            _depth: fidl::encoding::Depth,
1536        ) -> fidl::Result<()> {
1537            decoder.debug_check_bounds::<Self>(offset);
1538            let prim = decoder.read_num::<u32>(offset);
1539
1540            *self = Self::from_primitive_allow_unknown(prim);
1541            Ok(())
1542        }
1543    }
1544    unsafe impl fidl::encoding::TypeMarker for Nat64State {
1545        type Owned = Self;
1546
1547        #[inline(always)]
1548        fn inline_align(_context: fidl::encoding::Context) -> usize {
1549            std::mem::align_of::<u32>()
1550        }
1551
1552        #[inline(always)]
1553        fn inline_size(_context: fidl::encoding::Context) -> usize {
1554            std::mem::size_of::<u32>()
1555        }
1556
1557        #[inline(always)]
1558        fn encode_is_copy() -> bool {
1559            false
1560        }
1561
1562        #[inline(always)]
1563        fn decode_is_copy() -> bool {
1564            false
1565        }
1566    }
1567
1568    impl fidl::encoding::ValueTypeMarker for Nat64State {
1569        type Borrowed<'a> = Self;
1570        #[inline(always)]
1571        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1572            *value
1573        }
1574    }
1575
1576    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Nat64State {
1577        #[inline]
1578        unsafe fn encode(
1579            self,
1580            encoder: &mut fidl::encoding::Encoder<'_, D>,
1581            offset: usize,
1582            _depth: fidl::encoding::Depth,
1583        ) -> fidl::Result<()> {
1584            encoder.debug_check_bounds::<Self>(offset);
1585            encoder.write_num(self.into_primitive(), offset);
1586            Ok(())
1587        }
1588    }
1589
1590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64State {
1591        #[inline(always)]
1592        fn new_empty() -> Self {
1593            Self::unknown()
1594        }
1595
1596        #[inline]
1597        unsafe fn decode(
1598            &mut self,
1599            decoder: &mut fidl::encoding::Decoder<'_, D>,
1600            offset: usize,
1601            _depth: fidl::encoding::Depth,
1602        ) -> fidl::Result<()> {
1603            decoder.debug_check_bounds::<Self>(offset);
1604            let prim = decoder.read_num::<u32>(offset);
1605
1606            *self = Self::from_primitive_allow_unknown(prim);
1607            Ok(())
1608        }
1609    }
1610    unsafe impl fidl::encoding::TypeMarker for ProvisionError {
1611        type Owned = Self;
1612
1613        #[inline(always)]
1614        fn inline_align(_context: fidl::encoding::Context) -> usize {
1615            std::mem::align_of::<i32>()
1616        }
1617
1618        #[inline(always)]
1619        fn inline_size(_context: fidl::encoding::Context) -> usize {
1620            std::mem::size_of::<i32>()
1621        }
1622
1623        #[inline(always)]
1624        fn encode_is_copy() -> bool {
1625            false
1626        }
1627
1628        #[inline(always)]
1629        fn decode_is_copy() -> bool {
1630            false
1631        }
1632    }
1633
1634    impl fidl::encoding::ValueTypeMarker for ProvisionError {
1635        type Borrowed<'a> = Self;
1636        #[inline(always)]
1637        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1638            *value
1639        }
1640    }
1641
1642    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ProvisionError {
1643        #[inline]
1644        unsafe fn encode(
1645            self,
1646            encoder: &mut fidl::encoding::Encoder<'_, D>,
1647            offset: usize,
1648            _depth: fidl::encoding::Depth,
1649        ) -> fidl::Result<()> {
1650            encoder.debug_check_bounds::<Self>(offset);
1651            encoder.write_num(self.into_primitive(), offset);
1652            Ok(())
1653        }
1654    }
1655
1656    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisionError {
1657        #[inline(always)]
1658        fn new_empty() -> Self {
1659            Self::unknown()
1660        }
1661
1662        #[inline]
1663        unsafe fn decode(
1664            &mut self,
1665            decoder: &mut fidl::encoding::Decoder<'_, D>,
1666            offset: usize,
1667            _depth: fidl::encoding::Depth,
1668        ) -> fidl::Result<()> {
1669            decoder.debug_check_bounds::<Self>(offset);
1670            let prim = decoder.read_num::<i32>(offset);
1671
1672            *self = Self::from_primitive_allow_unknown(prim);
1673            Ok(())
1674        }
1675    }
1676    unsafe impl fidl::encoding::TypeMarker for RoutePreference {
1677        type Owned = Self;
1678
1679        #[inline(always)]
1680        fn inline_align(_context: fidl::encoding::Context) -> usize {
1681            std::mem::align_of::<i8>()
1682        }
1683
1684        #[inline(always)]
1685        fn inline_size(_context: fidl::encoding::Context) -> usize {
1686            std::mem::size_of::<i8>()
1687        }
1688
1689        #[inline(always)]
1690        fn encode_is_copy() -> bool {
1691            true
1692        }
1693
1694        #[inline(always)]
1695        fn decode_is_copy() -> bool {
1696            false
1697        }
1698    }
1699
1700    impl fidl::encoding::ValueTypeMarker for RoutePreference {
1701        type Borrowed<'a> = Self;
1702        #[inline(always)]
1703        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1704            *value
1705        }
1706    }
1707
1708    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1709        for RoutePreference
1710    {
1711        #[inline]
1712        unsafe fn encode(
1713            self,
1714            encoder: &mut fidl::encoding::Encoder<'_, D>,
1715            offset: usize,
1716            _depth: fidl::encoding::Depth,
1717        ) -> fidl::Result<()> {
1718            encoder.debug_check_bounds::<Self>(offset);
1719            encoder.write_num(self.into_primitive(), offset);
1720            Ok(())
1721        }
1722    }
1723
1724    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RoutePreference {
1725        #[inline(always)]
1726        fn new_empty() -> Self {
1727            Self::Low
1728        }
1729
1730        #[inline]
1731        unsafe fn decode(
1732            &mut self,
1733            decoder: &mut fidl::encoding::Decoder<'_, D>,
1734            offset: usize,
1735            _depth: fidl::encoding::Depth,
1736        ) -> fidl::Result<()> {
1737            decoder.debug_check_bounds::<Self>(offset);
1738            let prim = decoder.read_num::<i8>(offset);
1739
1740            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1741            Ok(())
1742        }
1743    }
1744    unsafe impl fidl::encoding::TypeMarker for SrpServerAddressMode {
1745        type Owned = Self;
1746
1747        #[inline(always)]
1748        fn inline_align(_context: fidl::encoding::Context) -> usize {
1749            std::mem::align_of::<u32>()
1750        }
1751
1752        #[inline(always)]
1753        fn inline_size(_context: fidl::encoding::Context) -> usize {
1754            std::mem::size_of::<u32>()
1755        }
1756
1757        #[inline(always)]
1758        fn encode_is_copy() -> bool {
1759            true
1760        }
1761
1762        #[inline(always)]
1763        fn decode_is_copy() -> bool {
1764            false
1765        }
1766    }
1767
1768    impl fidl::encoding::ValueTypeMarker for SrpServerAddressMode {
1769        type Borrowed<'a> = Self;
1770        #[inline(always)]
1771        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1772            *value
1773        }
1774    }
1775
1776    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1777        for SrpServerAddressMode
1778    {
1779        #[inline]
1780        unsafe fn encode(
1781            self,
1782            encoder: &mut fidl::encoding::Encoder<'_, D>,
1783            offset: usize,
1784            _depth: fidl::encoding::Depth,
1785        ) -> fidl::Result<()> {
1786            encoder.debug_check_bounds::<Self>(offset);
1787            encoder.write_num(self.into_primitive(), offset);
1788            Ok(())
1789        }
1790    }
1791
1792    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerAddressMode {
1793        #[inline(always)]
1794        fn new_empty() -> Self {
1795            Self::Unicast
1796        }
1797
1798        #[inline]
1799        unsafe fn decode(
1800            &mut self,
1801            decoder: &mut fidl::encoding::Decoder<'_, D>,
1802            offset: usize,
1803            _depth: fidl::encoding::Depth,
1804        ) -> fidl::Result<()> {
1805            decoder.debug_check_bounds::<Self>(offset);
1806            let prim = decoder.read_num::<u32>(offset);
1807
1808            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1809            Ok(())
1810        }
1811    }
1812    unsafe impl fidl::encoding::TypeMarker for SrpServerState {
1813        type Owned = Self;
1814
1815        #[inline(always)]
1816        fn inline_align(_context: fidl::encoding::Context) -> usize {
1817            std::mem::align_of::<u32>()
1818        }
1819
1820        #[inline(always)]
1821        fn inline_size(_context: fidl::encoding::Context) -> usize {
1822            std::mem::size_of::<u32>()
1823        }
1824
1825        #[inline(always)]
1826        fn encode_is_copy() -> bool {
1827            true
1828        }
1829
1830        #[inline(always)]
1831        fn decode_is_copy() -> bool {
1832            false
1833        }
1834    }
1835
1836    impl fidl::encoding::ValueTypeMarker for SrpServerState {
1837        type Borrowed<'a> = Self;
1838        #[inline(always)]
1839        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1840            *value
1841        }
1842    }
1843
1844    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SrpServerState {
1845        #[inline]
1846        unsafe fn encode(
1847            self,
1848            encoder: &mut fidl::encoding::Encoder<'_, D>,
1849            offset: usize,
1850            _depth: fidl::encoding::Depth,
1851        ) -> fidl::Result<()> {
1852            encoder.debug_check_bounds::<Self>(offset);
1853            encoder.write_num(self.into_primitive(), offset);
1854            Ok(())
1855        }
1856    }
1857
1858    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerState {
1859        #[inline(always)]
1860        fn new_empty() -> Self {
1861            Self::Disabled
1862        }
1863
1864        #[inline]
1865        unsafe fn decode(
1866            &mut self,
1867            decoder: &mut fidl::encoding::Decoder<'_, D>,
1868            offset: usize,
1869            _depth: fidl::encoding::Depth,
1870        ) -> fidl::Result<()> {
1871            decoder.debug_check_bounds::<Self>(offset);
1872            let prim = decoder.read_num::<u32>(offset);
1873
1874            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1875            Ok(())
1876        }
1877    }
1878    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsQueryState {
1879        type Owned = Self;
1880
1881        #[inline(always)]
1882        fn inline_align(_context: fidl::encoding::Context) -> usize {
1883            std::mem::align_of::<u32>()
1884        }
1885
1886        #[inline(always)]
1887        fn inline_size(_context: fidl::encoding::Context) -> usize {
1888            std::mem::size_of::<u32>()
1889        }
1890
1891        #[inline(always)]
1892        fn encode_is_copy() -> bool {
1893            false
1894        }
1895
1896        #[inline(always)]
1897        fn decode_is_copy() -> bool {
1898            false
1899        }
1900    }
1901
1902    impl fidl::encoding::ValueTypeMarker for UpstreamDnsQueryState {
1903        type Borrowed<'a> = Self;
1904        #[inline(always)]
1905        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1906            *value
1907        }
1908    }
1909
1910    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1911        for UpstreamDnsQueryState
1912    {
1913        #[inline]
1914        unsafe fn encode(
1915            self,
1916            encoder: &mut fidl::encoding::Encoder<'_, D>,
1917            offset: usize,
1918            _depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            encoder.debug_check_bounds::<Self>(offset);
1921            encoder.write_num(self.into_primitive(), offset);
1922            Ok(())
1923        }
1924    }
1925
1926    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsQueryState {
1927        #[inline(always)]
1928        fn new_empty() -> Self {
1929            Self::unknown()
1930        }
1931
1932        #[inline]
1933        unsafe fn decode(
1934            &mut self,
1935            decoder: &mut fidl::encoding::Decoder<'_, D>,
1936            offset: usize,
1937            _depth: fidl::encoding::Depth,
1938        ) -> fidl::Result<()> {
1939            decoder.debug_check_bounds::<Self>(offset);
1940            let prim = decoder.read_num::<u32>(offset);
1941
1942            *self = Self::from_primitive_allow_unknown(prim);
1943            Ok(())
1944        }
1945    }
1946
1947    impl fidl::encoding::ValueTypeMarker for BeaconInfoStreamNextResponse {
1948        type Borrowed<'a> = &'a Self;
1949        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1950            value
1951        }
1952    }
1953
1954    unsafe impl fidl::encoding::TypeMarker for BeaconInfoStreamNextResponse {
1955        type Owned = Self;
1956
1957        #[inline(always)]
1958        fn inline_align(_context: fidl::encoding::Context) -> usize {
1959            8
1960        }
1961
1962        #[inline(always)]
1963        fn inline_size(_context: fidl::encoding::Context) -> usize {
1964            16
1965        }
1966    }
1967
1968    unsafe impl<D: fidl::encoding::ResourceDialect>
1969        fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for &BeaconInfoStreamNextResponse
1970    {
1971        #[inline]
1972        unsafe fn encode(
1973            self,
1974            encoder: &mut fidl::encoding::Encoder<'_, D>,
1975            offset: usize,
1976            _depth: fidl::encoding::Depth,
1977        ) -> fidl::Result<()> {
1978            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
1979            // Delegate to tuple encoding.
1980            fidl::encoding::Encode::<BeaconInfoStreamNextResponse, D>::encode(
1981                (
1982                    <fidl::encoding::Vector<BeaconInfo, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.beacons),
1983                ),
1984                encoder, offset, _depth
1985            )
1986        }
1987    }
1988    unsafe impl<
1989        D: fidl::encoding::ResourceDialect,
1990        T0: fidl::encoding::Encode<fidl::encoding::Vector<BeaconInfo, 32>, D>,
1991    > fidl::encoding::Encode<BeaconInfoStreamNextResponse, D> for (T0,)
1992    {
1993        #[inline]
1994        unsafe fn encode(
1995            self,
1996            encoder: &mut fidl::encoding::Encoder<'_, D>,
1997            offset: usize,
1998            depth: fidl::encoding::Depth,
1999        ) -> fidl::Result<()> {
2000            encoder.debug_check_bounds::<BeaconInfoStreamNextResponse>(offset);
2001            // Zero out padding regions. There's no need to apply masks
2002            // because the unmasked parts will be overwritten by fields.
2003            // Write the fields.
2004            self.0.encode(encoder, offset + 0, depth)?;
2005            Ok(())
2006        }
2007    }
2008
2009    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2010        for BeaconInfoStreamNextResponse
2011    {
2012        #[inline(always)]
2013        fn new_empty() -> Self {
2014            Self { beacons: fidl::new_empty!(fidl::encoding::Vector<BeaconInfo, 32>, D) }
2015        }
2016
2017        #[inline]
2018        unsafe fn decode(
2019            &mut self,
2020            decoder: &mut fidl::encoding::Decoder<'_, D>,
2021            offset: usize,
2022            _depth: fidl::encoding::Depth,
2023        ) -> fidl::Result<()> {
2024            decoder.debug_check_bounds::<Self>(offset);
2025            // Verify that padding bytes are zero.
2026            fidl::decode!(fidl::encoding::Vector<BeaconInfo, 32>, D, &mut self.beacons, decoder, offset + 0, _depth)?;
2027            Ok(())
2028        }
2029    }
2030
2031    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedChannelsResponse {
2032        type Borrowed<'a> = &'a Self;
2033        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2034            value
2035        }
2036    }
2037
2038    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedChannelsResponse {
2039        type Owned = Self;
2040
2041        #[inline(always)]
2042        fn inline_align(_context: fidl::encoding::Context) -> usize {
2043            8
2044        }
2045
2046        #[inline(always)]
2047        fn inline_size(_context: fidl::encoding::Context) -> usize {
2048            16
2049        }
2050    }
2051
2052    unsafe impl<D: fidl::encoding::ResourceDialect>
2053        fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D>
2054        for &DeviceGetSupportedChannelsResponse
2055    {
2056        #[inline]
2057        unsafe fn encode(
2058            self,
2059            encoder: &mut fidl::encoding::Encoder<'_, D>,
2060            offset: usize,
2061            _depth: fidl::encoding::Depth,
2062        ) -> fidl::Result<()> {
2063            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2064            // Delegate to tuple encoding.
2065            fidl::encoding::Encode::<DeviceGetSupportedChannelsResponse, D>::encode(
2066                (
2067                    <fidl::encoding::Vector<ChannelInfo, 200> as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_info),
2068                ),
2069                encoder, offset, _depth
2070            )
2071        }
2072    }
2073    unsafe impl<
2074        D: fidl::encoding::ResourceDialect,
2075        T0: fidl::encoding::Encode<fidl::encoding::Vector<ChannelInfo, 200>, D>,
2076    > fidl::encoding::Encode<DeviceGetSupportedChannelsResponse, D> for (T0,)
2077    {
2078        #[inline]
2079        unsafe fn encode(
2080            self,
2081            encoder: &mut fidl::encoding::Encoder<'_, D>,
2082            offset: usize,
2083            depth: fidl::encoding::Depth,
2084        ) -> fidl::Result<()> {
2085            encoder.debug_check_bounds::<DeviceGetSupportedChannelsResponse>(offset);
2086            // Zero out padding regions. There's no need to apply masks
2087            // because the unmasked parts will be overwritten by fields.
2088            // Write the fields.
2089            self.0.encode(encoder, offset + 0, depth)?;
2090            Ok(())
2091        }
2092    }
2093
2094    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2095        for DeviceGetSupportedChannelsResponse
2096    {
2097        #[inline(always)]
2098        fn new_empty() -> Self {
2099            Self { channels_info: fidl::new_empty!(fidl::encoding::Vector<ChannelInfo, 200>, D) }
2100        }
2101
2102        #[inline]
2103        unsafe fn decode(
2104            &mut self,
2105            decoder: &mut fidl::encoding::Decoder<'_, D>,
2106            offset: usize,
2107            _depth: fidl::encoding::Depth,
2108        ) -> fidl::Result<()> {
2109            decoder.debug_check_bounds::<Self>(offset);
2110            // Verify that padding bytes are zero.
2111            fidl::decode!(fidl::encoding::Vector<ChannelInfo, 200>, D, &mut self.channels_info, decoder, offset + 0, _depth)?;
2112            Ok(())
2113        }
2114    }
2115
2116    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2117        type Borrowed<'a> = &'a Self;
2118        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2119            value
2120        }
2121    }
2122
2123    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalExternalRoutesResponse {
2124        type Owned = Self;
2125
2126        #[inline(always)]
2127        fn inline_align(_context: fidl::encoding::Context) -> usize {
2128            8
2129        }
2130
2131        #[inline(always)]
2132        fn inline_size(_context: fidl::encoding::Context) -> usize {
2133            16
2134        }
2135    }
2136
2137    unsafe impl<D: fidl::encoding::ResourceDialect>
2138        fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D>
2139        for &DeviceRouteExtraGetLocalExternalRoutesResponse
2140    {
2141        #[inline]
2142        unsafe fn encode(
2143            self,
2144            encoder: &mut fidl::encoding::Encoder<'_, D>,
2145            offset: usize,
2146            _depth: fidl::encoding::Depth,
2147        ) -> fidl::Result<()> {
2148            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2149            // Delegate to tuple encoding.
2150            fidl::encoding::Encode::<DeviceRouteExtraGetLocalExternalRoutesResponse, D>::encode(
2151                (
2152                    <fidl::encoding::Vector<ExternalRoute, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.external_routes),
2153                ),
2154                encoder, offset, _depth
2155            )
2156        }
2157    }
2158    unsafe impl<
2159        D: fidl::encoding::ResourceDialect,
2160        T0: fidl::encoding::Encode<fidl::encoding::Vector<ExternalRoute, 32>, D>,
2161    > fidl::encoding::Encode<DeviceRouteExtraGetLocalExternalRoutesResponse, D> for (T0,)
2162    {
2163        #[inline]
2164        unsafe fn encode(
2165            self,
2166            encoder: &mut fidl::encoding::Encoder<'_, D>,
2167            offset: usize,
2168            depth: fidl::encoding::Depth,
2169        ) -> fidl::Result<()> {
2170            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalExternalRoutesResponse>(offset);
2171            // Zero out padding regions. There's no need to apply masks
2172            // because the unmasked parts will be overwritten by fields.
2173            // Write the fields.
2174            self.0.encode(encoder, offset + 0, depth)?;
2175            Ok(())
2176        }
2177    }
2178
2179    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2180        for DeviceRouteExtraGetLocalExternalRoutesResponse
2181    {
2182        #[inline(always)]
2183        fn new_empty() -> Self {
2184            Self { external_routes: fidl::new_empty!(fidl::encoding::Vector<ExternalRoute, 32>, D) }
2185        }
2186
2187        #[inline]
2188        unsafe fn decode(
2189            &mut self,
2190            decoder: &mut fidl::encoding::Decoder<'_, D>,
2191            offset: usize,
2192            _depth: fidl::encoding::Depth,
2193        ) -> fidl::Result<()> {
2194            decoder.debug_check_bounds::<Self>(offset);
2195            // Verify that padding bytes are zero.
2196            fidl::decode!(fidl::encoding::Vector<ExternalRoute, 32>, D, &mut self.external_routes, decoder, offset + 0, _depth)?;
2197            Ok(())
2198        }
2199    }
2200
2201    impl fidl::encoding::ValueTypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2202        type Borrowed<'a> = &'a Self;
2203        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2204            value
2205        }
2206    }
2207
2208    unsafe impl fidl::encoding::TypeMarker for DeviceRouteExtraGetLocalOnMeshPrefixesResponse {
2209        type Owned = Self;
2210
2211        #[inline(always)]
2212        fn inline_align(_context: fidl::encoding::Context) -> usize {
2213            8
2214        }
2215
2216        #[inline(always)]
2217        fn inline_size(_context: fidl::encoding::Context) -> usize {
2218            16
2219        }
2220    }
2221
2222    unsafe impl<D: fidl::encoding::ResourceDialect>
2223        fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>
2224        for &DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2225    {
2226        #[inline]
2227        unsafe fn encode(
2228            self,
2229            encoder: &mut fidl::encoding::Encoder<'_, D>,
2230            offset: usize,
2231            _depth: fidl::encoding::Depth,
2232        ) -> fidl::Result<()> {
2233            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2234            // Delegate to tuple encoding.
2235            fidl::encoding::Encode::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D>::encode(
2236                (
2237                    <fidl::encoding::Vector<OnMeshPrefix, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.prefixes),
2238                ),
2239                encoder, offset, _depth
2240            )
2241        }
2242    }
2243    unsafe impl<
2244        D: fidl::encoding::ResourceDialect,
2245        T0: fidl::encoding::Encode<fidl::encoding::Vector<OnMeshPrefix, 32>, D>,
2246    > fidl::encoding::Encode<DeviceRouteExtraGetLocalOnMeshPrefixesResponse, D> for (T0,)
2247    {
2248        #[inline]
2249        unsafe fn encode(
2250            self,
2251            encoder: &mut fidl::encoding::Encoder<'_, D>,
2252            offset: usize,
2253            depth: fidl::encoding::Depth,
2254        ) -> fidl::Result<()> {
2255            encoder.debug_check_bounds::<DeviceRouteExtraGetLocalOnMeshPrefixesResponse>(offset);
2256            // Zero out padding regions. There's no need to apply masks
2257            // because the unmasked parts will be overwritten by fields.
2258            // Write the fields.
2259            self.0.encode(encoder, offset + 0, depth)?;
2260            Ok(())
2261        }
2262    }
2263
2264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2265        for DeviceRouteExtraGetLocalOnMeshPrefixesResponse
2266    {
2267        #[inline(always)]
2268        fn new_empty() -> Self {
2269            Self { prefixes: fidl::new_empty!(fidl::encoding::Vector<OnMeshPrefix, 32>, D) }
2270        }
2271
2272        #[inline]
2273        unsafe fn decode(
2274            &mut self,
2275            decoder: &mut fidl::encoding::Decoder<'_, D>,
2276            offset: usize,
2277            _depth: fidl::encoding::Depth,
2278        ) -> fidl::Result<()> {
2279            decoder.debug_check_bounds::<Self>(offset);
2280            // Verify that padding bytes are zero.
2281            fidl::decode!(fidl::encoding::Vector<OnMeshPrefix, 32>, D, &mut self.prefixes, decoder, offset + 0, _depth)?;
2282            Ok(())
2283        }
2284    }
2285
2286    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterExternalRouteRequest {
2287        type Borrowed<'a> = &'a Self;
2288        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2289            value
2290        }
2291    }
2292
2293    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterExternalRouteRequest {
2294        type Owned = Self;
2295
2296        #[inline(always)]
2297        fn inline_align(_context: fidl::encoding::Context) -> usize {
2298            8
2299        }
2300
2301        #[inline(always)]
2302        fn inline_size(_context: fidl::encoding::Context) -> usize {
2303            16
2304        }
2305    }
2306
2307    unsafe impl<D: fidl::encoding::ResourceDialect>
2308        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D>
2309        for &DeviceRouteRegisterExternalRouteRequest
2310    {
2311        #[inline]
2312        unsafe fn encode(
2313            self,
2314            encoder: &mut fidl::encoding::Encoder<'_, D>,
2315            offset: usize,
2316            _depth: fidl::encoding::Depth,
2317        ) -> fidl::Result<()> {
2318            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2319            // Delegate to tuple encoding.
2320            fidl::encoding::Encode::<DeviceRouteRegisterExternalRouteRequest, D>::encode(
2321                (<ExternalRoute as fidl::encoding::ValueTypeMarker>::borrow(&self.external_route),),
2322                encoder,
2323                offset,
2324                _depth,
2325            )
2326        }
2327    }
2328    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ExternalRoute, D>>
2329        fidl::encoding::Encode<DeviceRouteRegisterExternalRouteRequest, D> for (T0,)
2330    {
2331        #[inline]
2332        unsafe fn encode(
2333            self,
2334            encoder: &mut fidl::encoding::Encoder<'_, D>,
2335            offset: usize,
2336            depth: fidl::encoding::Depth,
2337        ) -> fidl::Result<()> {
2338            encoder.debug_check_bounds::<DeviceRouteRegisterExternalRouteRequest>(offset);
2339            // Zero out padding regions. There's no need to apply masks
2340            // because the unmasked parts will be overwritten by fields.
2341            // Write the fields.
2342            self.0.encode(encoder, offset + 0, depth)?;
2343            Ok(())
2344        }
2345    }
2346
2347    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2348        for DeviceRouteRegisterExternalRouteRequest
2349    {
2350        #[inline(always)]
2351        fn new_empty() -> Self {
2352            Self { external_route: fidl::new_empty!(ExternalRoute, D) }
2353        }
2354
2355        #[inline]
2356        unsafe fn decode(
2357            &mut self,
2358            decoder: &mut fidl::encoding::Decoder<'_, D>,
2359            offset: usize,
2360            _depth: fidl::encoding::Depth,
2361        ) -> fidl::Result<()> {
2362            decoder.debug_check_bounds::<Self>(offset);
2363            // Verify that padding bytes are zero.
2364            fidl::decode!(ExternalRoute, D, &mut self.external_route, decoder, offset + 0, _depth)?;
2365            Ok(())
2366        }
2367    }
2368
2369    impl fidl::encoding::ValueTypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2370        type Borrowed<'a> = &'a Self;
2371        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2372            value
2373        }
2374    }
2375
2376    unsafe impl fidl::encoding::TypeMarker for DeviceRouteRegisterOnMeshPrefixRequest {
2377        type Owned = Self;
2378
2379        #[inline(always)]
2380        fn inline_align(_context: fidl::encoding::Context) -> usize {
2381            8
2382        }
2383
2384        #[inline(always)]
2385        fn inline_size(_context: fidl::encoding::Context) -> usize {
2386            16
2387        }
2388    }
2389
2390    unsafe impl<D: fidl::encoding::ResourceDialect>
2391        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D>
2392        for &DeviceRouteRegisterOnMeshPrefixRequest
2393    {
2394        #[inline]
2395        unsafe fn encode(
2396            self,
2397            encoder: &mut fidl::encoding::Encoder<'_, D>,
2398            offset: usize,
2399            _depth: fidl::encoding::Depth,
2400        ) -> fidl::Result<()> {
2401            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2402            // Delegate to tuple encoding.
2403            fidl::encoding::Encode::<DeviceRouteRegisterOnMeshPrefixRequest, D>::encode(
2404                (<OnMeshPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.prefix),),
2405                encoder,
2406                offset,
2407                _depth,
2408            )
2409        }
2410    }
2411    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<OnMeshPrefix, D>>
2412        fidl::encoding::Encode<DeviceRouteRegisterOnMeshPrefixRequest, D> for (T0,)
2413    {
2414        #[inline]
2415        unsafe fn encode(
2416            self,
2417            encoder: &mut fidl::encoding::Encoder<'_, D>,
2418            offset: usize,
2419            depth: fidl::encoding::Depth,
2420        ) -> fidl::Result<()> {
2421            encoder.debug_check_bounds::<DeviceRouteRegisterOnMeshPrefixRequest>(offset);
2422            // Zero out padding regions. There's no need to apply masks
2423            // because the unmasked parts will be overwritten by fields.
2424            // Write the fields.
2425            self.0.encode(encoder, offset + 0, depth)?;
2426            Ok(())
2427        }
2428    }
2429
2430    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2431        for DeviceRouteRegisterOnMeshPrefixRequest
2432    {
2433        #[inline(always)]
2434        fn new_empty() -> Self {
2435            Self { prefix: fidl::new_empty!(OnMeshPrefix, D) }
2436        }
2437
2438        #[inline]
2439        unsafe fn decode(
2440            &mut self,
2441            decoder: &mut fidl::encoding::Decoder<'_, D>,
2442            offset: usize,
2443            _depth: fidl::encoding::Depth,
2444        ) -> fidl::Result<()> {
2445            decoder.debug_check_bounds::<Self>(offset);
2446            // Verify that padding bytes are zero.
2447            fidl::decode!(OnMeshPrefix, D, &mut self.prefix, decoder, offset + 0, _depth)?;
2448            Ok(())
2449        }
2450    }
2451
2452    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2453        type Borrowed<'a> = &'a Self;
2454        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2455            value
2456        }
2457    }
2458
2459    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterExternalRouteRequest {
2460        type Owned = Self;
2461
2462        #[inline(always)]
2463        fn inline_align(_context: fidl::encoding::Context) -> usize {
2464            1
2465        }
2466
2467        #[inline(always)]
2468        fn inline_size(_context: fidl::encoding::Context) -> usize {
2469            17
2470        }
2471    }
2472
2473    unsafe impl<D: fidl::encoding::ResourceDialect>
2474        fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D>
2475        for &DeviceRouteUnregisterExternalRouteRequest
2476    {
2477        #[inline]
2478        unsafe fn encode(
2479            self,
2480            encoder: &mut fidl::encoding::Encoder<'_, D>,
2481            offset: usize,
2482            _depth: fidl::encoding::Depth,
2483        ) -> fidl::Result<()> {
2484            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2485            // Delegate to tuple encoding.
2486            fidl::encoding::Encode::<DeviceRouteUnregisterExternalRouteRequest, D>::encode(
2487                (
2488                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2489                ),
2490                encoder, offset, _depth
2491            )
2492        }
2493    }
2494    unsafe impl<
2495        D: fidl::encoding::ResourceDialect,
2496        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2497    > fidl::encoding::Encode<DeviceRouteUnregisterExternalRouteRequest, D> for (T0,)
2498    {
2499        #[inline]
2500        unsafe fn encode(
2501            self,
2502            encoder: &mut fidl::encoding::Encoder<'_, D>,
2503            offset: usize,
2504            depth: fidl::encoding::Depth,
2505        ) -> fidl::Result<()> {
2506            encoder.debug_check_bounds::<DeviceRouteUnregisterExternalRouteRequest>(offset);
2507            // Zero out padding regions. There's no need to apply masks
2508            // because the unmasked parts will be overwritten by fields.
2509            // Write the fields.
2510            self.0.encode(encoder, offset + 0, depth)?;
2511            Ok(())
2512        }
2513    }
2514
2515    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2516        for DeviceRouteUnregisterExternalRouteRequest
2517    {
2518        #[inline(always)]
2519        fn new_empty() -> Self {
2520            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2521        }
2522
2523        #[inline]
2524        unsafe fn decode(
2525            &mut self,
2526            decoder: &mut fidl::encoding::Decoder<'_, D>,
2527            offset: usize,
2528            _depth: fidl::encoding::Depth,
2529        ) -> fidl::Result<()> {
2530            decoder.debug_check_bounds::<Self>(offset);
2531            // Verify that padding bytes are zero.
2532            fidl::decode!(
2533                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2534                D,
2535                &mut self.subnet,
2536                decoder,
2537                offset + 0,
2538                _depth
2539            )?;
2540            Ok(())
2541        }
2542    }
2543
2544    impl fidl::encoding::ValueTypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2545        type Borrowed<'a> = &'a Self;
2546        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2547            value
2548        }
2549    }
2550
2551    unsafe impl fidl::encoding::TypeMarker for DeviceRouteUnregisterOnMeshPrefixRequest {
2552        type Owned = Self;
2553
2554        #[inline(always)]
2555        fn inline_align(_context: fidl::encoding::Context) -> usize {
2556            1
2557        }
2558
2559        #[inline(always)]
2560        fn inline_size(_context: fidl::encoding::Context) -> usize {
2561            17
2562        }
2563    }
2564
2565    unsafe impl<D: fidl::encoding::ResourceDialect>
2566        fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D>
2567        for &DeviceRouteUnregisterOnMeshPrefixRequest
2568    {
2569        #[inline]
2570        unsafe fn encode(
2571            self,
2572            encoder: &mut fidl::encoding::Encoder<'_, D>,
2573            offset: usize,
2574            _depth: fidl::encoding::Depth,
2575        ) -> fidl::Result<()> {
2576            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2577            // Delegate to tuple encoding.
2578            fidl::encoding::Encode::<DeviceRouteUnregisterOnMeshPrefixRequest, D>::encode(
2579                (
2580                    <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow(&self.subnet),
2581                ),
2582                encoder, offset, _depth
2583            )
2584        }
2585    }
2586    unsafe impl<
2587        D: fidl::encoding::ResourceDialect,
2588        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>,
2589    > fidl::encoding::Encode<DeviceRouteUnregisterOnMeshPrefixRequest, D> for (T0,)
2590    {
2591        #[inline]
2592        unsafe fn encode(
2593            self,
2594            encoder: &mut fidl::encoding::Encoder<'_, D>,
2595            offset: usize,
2596            depth: fidl::encoding::Depth,
2597        ) -> fidl::Result<()> {
2598            encoder.debug_check_bounds::<DeviceRouteUnregisterOnMeshPrefixRequest>(offset);
2599            // Zero out padding regions. There's no need to apply masks
2600            // because the unmasked parts will be overwritten by fields.
2601            // Write the fields.
2602            self.0.encode(encoder, offset + 0, depth)?;
2603            Ok(())
2604        }
2605    }
2606
2607    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2608        for DeviceRouteUnregisterOnMeshPrefixRequest
2609    {
2610        #[inline(always)]
2611        fn new_empty() -> Self {
2612            Self { subnet: fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D) }
2613        }
2614
2615        #[inline]
2616        unsafe fn decode(
2617            &mut self,
2618            decoder: &mut fidl::encoding::Decoder<'_, D>,
2619            offset: usize,
2620            _depth: fidl::encoding::Depth,
2621        ) -> fidl::Result<()> {
2622            decoder.debug_check_bounds::<Self>(offset);
2623            // Verify that padding bytes are zero.
2624            fidl::decode!(
2625                fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
2626                D,
2627                &mut self.subnet,
2628                decoder,
2629                offset + 0,
2630                _depth
2631            )?;
2632            Ok(())
2633        }
2634    }
2635
2636    impl fidl::encoding::ValueTypeMarker for LegacyJoiningMakeJoinableRequest {
2637        type Borrowed<'a> = &'a Self;
2638        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2639            value
2640        }
2641    }
2642
2643    unsafe impl fidl::encoding::TypeMarker for LegacyJoiningMakeJoinableRequest {
2644        type Owned = Self;
2645
2646        #[inline(always)]
2647        fn inline_align(_context: fidl::encoding::Context) -> usize {
2648            8
2649        }
2650
2651        #[inline(always)]
2652        fn inline_size(_context: fidl::encoding::Context) -> usize {
2653            16
2654        }
2655    }
2656
2657    unsafe impl<D: fidl::encoding::ResourceDialect>
2658        fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D>
2659        for &LegacyJoiningMakeJoinableRequest
2660    {
2661        #[inline]
2662        unsafe fn encode(
2663            self,
2664            encoder: &mut fidl::encoding::Encoder<'_, D>,
2665            offset: usize,
2666            _depth: fidl::encoding::Depth,
2667        ) -> fidl::Result<()> {
2668            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2669            unsafe {
2670                // Copy the object into the buffer.
2671                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2672                (buf_ptr as *mut LegacyJoiningMakeJoinableRequest)
2673                    .write_unaligned((self as *const LegacyJoiningMakeJoinableRequest).read());
2674                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2675                // done second because the memcpy will write garbage to these bytes.
2676                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2677                let padding_mask = 0xffffffffffff0000u64;
2678                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2679            }
2680            Ok(())
2681        }
2682    }
2683    unsafe impl<
2684        D: fidl::encoding::ResourceDialect,
2685        T0: fidl::encoding::Encode<i64, D>,
2686        T1: fidl::encoding::Encode<u16, D>,
2687    > fidl::encoding::Encode<LegacyJoiningMakeJoinableRequest, D> for (T0, T1)
2688    {
2689        #[inline]
2690        unsafe fn encode(
2691            self,
2692            encoder: &mut fidl::encoding::Encoder<'_, D>,
2693            offset: usize,
2694            depth: fidl::encoding::Depth,
2695        ) -> fidl::Result<()> {
2696            encoder.debug_check_bounds::<LegacyJoiningMakeJoinableRequest>(offset);
2697            // Zero out padding regions. There's no need to apply masks
2698            // because the unmasked parts will be overwritten by fields.
2699            unsafe {
2700                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2701                (ptr as *mut u64).write_unaligned(0);
2702            }
2703            // Write the fields.
2704            self.0.encode(encoder, offset + 0, depth)?;
2705            self.1.encode(encoder, offset + 8, depth)?;
2706            Ok(())
2707        }
2708    }
2709
2710    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2711        for LegacyJoiningMakeJoinableRequest
2712    {
2713        #[inline(always)]
2714        fn new_empty() -> Self {
2715            Self { duration: fidl::new_empty!(i64, D), port: fidl::new_empty!(u16, D) }
2716        }
2717
2718        #[inline]
2719        unsafe fn decode(
2720            &mut self,
2721            decoder: &mut fidl::encoding::Decoder<'_, D>,
2722            offset: usize,
2723            _depth: fidl::encoding::Depth,
2724        ) -> fidl::Result<()> {
2725            decoder.debug_check_bounds::<Self>(offset);
2726            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2727            // Verify that padding bytes are zero.
2728            let ptr = unsafe { buf_ptr.offset(8) };
2729            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2730            let mask = 0xffffffffffff0000u64;
2731            let maskedval = padval & mask;
2732            if maskedval != 0 {
2733                return Err(fidl::Error::NonZeroPadding {
2734                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2735                });
2736            }
2737            // Copy from the buffer into the object.
2738            unsafe {
2739                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2740            }
2741            Ok(())
2742        }
2743    }
2744
2745    impl fidl::encoding::ValueTypeMarker for ProvisioningMonitorWatchProgressResponse {
2746        type Borrowed<'a> = &'a Self;
2747        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2748            value
2749        }
2750    }
2751
2752    unsafe impl fidl::encoding::TypeMarker for ProvisioningMonitorWatchProgressResponse {
2753        type Owned = Self;
2754
2755        #[inline(always)]
2756        fn inline_align(_context: fidl::encoding::Context) -> usize {
2757            8
2758        }
2759
2760        #[inline(always)]
2761        fn inline_size(_context: fidl::encoding::Context) -> usize {
2762            16
2763        }
2764    }
2765
2766    unsafe impl<D: fidl::encoding::ResourceDialect>
2767        fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D>
2768        for &ProvisioningMonitorWatchProgressResponse
2769    {
2770        #[inline]
2771        unsafe fn encode(
2772            self,
2773            encoder: &mut fidl::encoding::Encoder<'_, D>,
2774            offset: usize,
2775            _depth: fidl::encoding::Depth,
2776        ) -> fidl::Result<()> {
2777            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2778            // Delegate to tuple encoding.
2779            fidl::encoding::Encode::<ProvisioningMonitorWatchProgressResponse, D>::encode(
2780                (<ProvisioningProgress as fidl::encoding::ValueTypeMarker>::borrow(&self.progress),),
2781                encoder,
2782                offset,
2783                _depth,
2784            )
2785        }
2786    }
2787    unsafe impl<
2788        D: fidl::encoding::ResourceDialect,
2789        T0: fidl::encoding::Encode<ProvisioningProgress, D>,
2790    > fidl::encoding::Encode<ProvisioningMonitorWatchProgressResponse, D> for (T0,)
2791    {
2792        #[inline]
2793        unsafe fn encode(
2794            self,
2795            encoder: &mut fidl::encoding::Encoder<'_, D>,
2796            offset: usize,
2797            depth: fidl::encoding::Depth,
2798        ) -> fidl::Result<()> {
2799            encoder.debug_check_bounds::<ProvisioningMonitorWatchProgressResponse>(offset);
2800            // Zero out padding regions. There's no need to apply masks
2801            // because the unmasked parts will be overwritten by fields.
2802            // Write the fields.
2803            self.0.encode(encoder, offset + 0, depth)?;
2804            Ok(())
2805        }
2806    }
2807
2808    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2809        for ProvisioningMonitorWatchProgressResponse
2810    {
2811        #[inline(always)]
2812        fn new_empty() -> Self {
2813            Self { progress: fidl::new_empty!(ProvisioningProgress, D) }
2814        }
2815
2816        #[inline]
2817        unsafe fn decode(
2818            &mut self,
2819            decoder: &mut fidl::encoding::Decoder<'_, D>,
2820            offset: usize,
2821            _depth: fidl::encoding::Depth,
2822        ) -> fidl::Result<()> {
2823            decoder.debug_check_bounds::<Self>(offset);
2824            // Verify that padding bytes are zero.
2825            fidl::decode!(
2826                ProvisioningProgress,
2827                D,
2828                &mut self.progress,
2829                decoder,
2830                offset + 0,
2831                _depth
2832            )?;
2833            Ok(())
2834        }
2835    }
2836
2837    impl fidl::encoding::ValueTypeMarker for TelemetryProviderGetTelemetryResponse {
2838        type Borrowed<'a> = &'a Self;
2839        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2840            value
2841        }
2842    }
2843
2844    unsafe impl fidl::encoding::TypeMarker for TelemetryProviderGetTelemetryResponse {
2845        type Owned = Self;
2846
2847        #[inline(always)]
2848        fn inline_align(_context: fidl::encoding::Context) -> usize {
2849            8
2850        }
2851
2852        #[inline(always)]
2853        fn inline_size(_context: fidl::encoding::Context) -> usize {
2854            16
2855        }
2856    }
2857
2858    unsafe impl<D: fidl::encoding::ResourceDialect>
2859        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D>
2860        for &TelemetryProviderGetTelemetryResponse
2861    {
2862        #[inline]
2863        unsafe fn encode(
2864            self,
2865            encoder: &mut fidl::encoding::Encoder<'_, D>,
2866            offset: usize,
2867            _depth: fidl::encoding::Depth,
2868        ) -> fidl::Result<()> {
2869            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2870            // Delegate to tuple encoding.
2871            fidl::encoding::Encode::<TelemetryProviderGetTelemetryResponse, D>::encode(
2872                (<Telemetry as fidl::encoding::ValueTypeMarker>::borrow(&self.telemetry),),
2873                encoder,
2874                offset,
2875                _depth,
2876            )
2877        }
2878    }
2879    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Telemetry, D>>
2880        fidl::encoding::Encode<TelemetryProviderGetTelemetryResponse, D> for (T0,)
2881    {
2882        #[inline]
2883        unsafe fn encode(
2884            self,
2885            encoder: &mut fidl::encoding::Encoder<'_, D>,
2886            offset: usize,
2887            depth: fidl::encoding::Depth,
2888        ) -> fidl::Result<()> {
2889            encoder.debug_check_bounds::<TelemetryProviderGetTelemetryResponse>(offset);
2890            // Zero out padding regions. There's no need to apply masks
2891            // because the unmasked parts will be overwritten by fields.
2892            // Write the fields.
2893            self.0.encode(encoder, offset + 0, depth)?;
2894            Ok(())
2895        }
2896    }
2897
2898    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2899        for TelemetryProviderGetTelemetryResponse
2900    {
2901        #[inline(always)]
2902        fn new_empty() -> Self {
2903            Self { telemetry: fidl::new_empty!(Telemetry, D) }
2904        }
2905
2906        #[inline]
2907        unsafe fn decode(
2908            &mut self,
2909            decoder: &mut fidl::encoding::Decoder<'_, D>,
2910            offset: usize,
2911            _depth: fidl::encoding::Depth,
2912        ) -> fidl::Result<()> {
2913            decoder.debug_check_bounds::<Self>(offset);
2914            // Verify that padding bytes are zero.
2915            fidl::decode!(Telemetry, D, &mut self.telemetry, decoder, offset + 0, _depth)?;
2916            Ok(())
2917        }
2918    }
2919
2920    impl BeaconInfo {
2921        #[inline(always)]
2922        fn max_ordinal_present(&self) -> u64 {
2923            if let Some(_) = self.lqi {
2924                return 4;
2925            }
2926            if let Some(_) = self.rssi {
2927                return 3;
2928            }
2929            if let Some(_) = self.identity {
2930                return 2;
2931            }
2932            if let Some(_) = self.address {
2933                return 1;
2934            }
2935            0
2936        }
2937    }
2938
2939    impl fidl::encoding::ValueTypeMarker for BeaconInfo {
2940        type Borrowed<'a> = &'a Self;
2941        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2942            value
2943        }
2944    }
2945
2946    unsafe impl fidl::encoding::TypeMarker for BeaconInfo {
2947        type Owned = Self;
2948
2949        #[inline(always)]
2950        fn inline_align(_context: fidl::encoding::Context) -> usize {
2951            8
2952        }
2953
2954        #[inline(always)]
2955        fn inline_size(_context: fidl::encoding::Context) -> usize {
2956            16
2957        }
2958    }
2959
2960    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BeaconInfo, D>
2961        for &BeaconInfo
2962    {
2963        unsafe fn encode(
2964            self,
2965            encoder: &mut fidl::encoding::Encoder<'_, D>,
2966            offset: usize,
2967            mut depth: fidl::encoding::Depth,
2968        ) -> fidl::Result<()> {
2969            encoder.debug_check_bounds::<BeaconInfo>(offset);
2970            // Vector header
2971            let max_ordinal: u64 = self.max_ordinal_present();
2972            encoder.write_num(max_ordinal, offset);
2973            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2974            // Calling encoder.out_of_line_offset(0) is not allowed.
2975            if max_ordinal == 0 {
2976                return Ok(());
2977            }
2978            depth.increment()?;
2979            let envelope_size = 8;
2980            let bytes_len = max_ordinal as usize * envelope_size;
2981            #[allow(unused_variables)]
2982            let offset = encoder.out_of_line_offset(bytes_len);
2983            let mut _prev_end_offset: usize = 0;
2984            if 1 > max_ordinal {
2985                return Ok(());
2986            }
2987
2988            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2989            // are envelope_size bytes.
2990            let cur_offset: usize = (1 - 1) * envelope_size;
2991
2992            // Zero reserved fields.
2993            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2994
2995            // Safety:
2996            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2997            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2998            //   envelope_size bytes, there is always sufficient room.
2999            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan__common::MacAddress, D>(
3000            self.address.as_ref().map(<fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow),
3001            encoder, offset + cur_offset, depth
3002        )?;
3003
3004            _prev_end_offset = cur_offset + envelope_size;
3005            if 2 > max_ordinal {
3006                return Ok(());
3007            }
3008
3009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3010            // are envelope_size bytes.
3011            let cur_offset: usize = (2 - 1) * envelope_size;
3012
3013            // Zero reserved fields.
3014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3015
3016            // Safety:
3017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3019            //   envelope_size bytes, there is always sufficient room.
3020            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::Identity, D>(
3021            self.identity.as_ref().map(<fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow),
3022            encoder, offset + cur_offset, depth
3023        )?;
3024
3025            _prev_end_offset = cur_offset + envelope_size;
3026            if 3 > max_ordinal {
3027                return Ok(());
3028            }
3029
3030            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3031            // are envelope_size bytes.
3032            let cur_offset: usize = (3 - 1) * envelope_size;
3033
3034            // Zero reserved fields.
3035            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3036
3037            // Safety:
3038            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3039            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3040            //   envelope_size bytes, there is always sufficient room.
3041            fidl::encoding::encode_in_envelope_optional::<i8, D>(
3042                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
3043                encoder,
3044                offset + cur_offset,
3045                depth,
3046            )?;
3047
3048            _prev_end_offset = cur_offset + envelope_size;
3049            if 4 > max_ordinal {
3050                return Ok(());
3051            }
3052
3053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3054            // are envelope_size bytes.
3055            let cur_offset: usize = (4 - 1) * envelope_size;
3056
3057            // Zero reserved fields.
3058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3059
3060            // Safety:
3061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3063            //   envelope_size bytes, there is always sufficient room.
3064            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3065                self.lqi.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3066                encoder,
3067                offset + cur_offset,
3068                depth,
3069            )?;
3070
3071            _prev_end_offset = cur_offset + envelope_size;
3072
3073            Ok(())
3074        }
3075    }
3076
3077    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BeaconInfo {
3078        #[inline(always)]
3079        fn new_empty() -> Self {
3080            Self::default()
3081        }
3082
3083        unsafe fn decode(
3084            &mut self,
3085            decoder: &mut fidl::encoding::Decoder<'_, D>,
3086            offset: usize,
3087            mut depth: fidl::encoding::Depth,
3088        ) -> fidl::Result<()> {
3089            decoder.debug_check_bounds::<Self>(offset);
3090            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3091                None => return Err(fidl::Error::NotNullable),
3092                Some(len) => len,
3093            };
3094            // Calling decoder.out_of_line_offset(0) is not allowed.
3095            if len == 0 {
3096                return Ok(());
3097            };
3098            depth.increment()?;
3099            let envelope_size = 8;
3100            let bytes_len = len * envelope_size;
3101            let offset = decoder.out_of_line_offset(bytes_len)?;
3102            // Decode the envelope for each type.
3103            let mut _next_ordinal_to_read = 0;
3104            let mut next_offset = offset;
3105            let end_offset = offset + bytes_len;
3106            _next_ordinal_to_read += 1;
3107            if next_offset >= end_offset {
3108                return Ok(());
3109            }
3110
3111            // Decode unknown envelopes for gaps in ordinals.
3112            while _next_ordinal_to_read < 1 {
3113                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3114                _next_ordinal_to_read += 1;
3115                next_offset += envelope_size;
3116            }
3117
3118            let next_out_of_line = decoder.next_out_of_line();
3119            let handles_before = decoder.remaining_handles();
3120            if let Some((inlined, num_bytes, num_handles)) =
3121                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3122            {
3123                let member_inline_size = <fidl_fuchsia_lowpan__common::MacAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3124                if inlined != (member_inline_size <= 4) {
3125                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3126                }
3127                let inner_offset;
3128                let mut inner_depth = depth.clone();
3129                if inlined {
3130                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3131                    inner_offset = next_offset;
3132                } else {
3133                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3134                    inner_depth.increment()?;
3135                }
3136                let val_ref = self.address.get_or_insert_with(|| {
3137                    fidl::new_empty!(fidl_fuchsia_lowpan__common::MacAddress, D)
3138                });
3139                fidl::decode!(
3140                    fidl_fuchsia_lowpan__common::MacAddress,
3141                    D,
3142                    val_ref,
3143                    decoder,
3144                    inner_offset,
3145                    inner_depth
3146                )?;
3147                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3148                {
3149                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3150                }
3151                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3152                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3153                }
3154            }
3155
3156            next_offset += envelope_size;
3157            _next_ordinal_to_read += 1;
3158            if next_offset >= end_offset {
3159                return Ok(());
3160            }
3161
3162            // Decode unknown envelopes for gaps in ordinals.
3163            while _next_ordinal_to_read < 2 {
3164                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3165                _next_ordinal_to_read += 1;
3166                next_offset += envelope_size;
3167            }
3168
3169            let next_out_of_line = decoder.next_out_of_line();
3170            let handles_before = decoder.remaining_handles();
3171            if let Some((inlined, num_bytes, num_handles)) =
3172                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3173            {
3174                let member_inline_size = <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3175                if inlined != (member_inline_size <= 4) {
3176                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3177                }
3178                let inner_offset;
3179                let mut inner_depth = depth.clone();
3180                if inlined {
3181                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3182                    inner_offset = next_offset;
3183                } else {
3184                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3185                    inner_depth.increment()?;
3186                }
3187                let val_ref = self.identity.get_or_insert_with(|| {
3188                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::Identity, D)
3189                });
3190                fidl::decode!(
3191                    fidl_fuchsia_lowpan_device__common::Identity,
3192                    D,
3193                    val_ref,
3194                    decoder,
3195                    inner_offset,
3196                    inner_depth
3197                )?;
3198                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3199                {
3200                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3201                }
3202                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3203                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3204                }
3205            }
3206
3207            next_offset += envelope_size;
3208            _next_ordinal_to_read += 1;
3209            if next_offset >= end_offset {
3210                return Ok(());
3211            }
3212
3213            // Decode unknown envelopes for gaps in ordinals.
3214            while _next_ordinal_to_read < 3 {
3215                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3216                _next_ordinal_to_read += 1;
3217                next_offset += envelope_size;
3218            }
3219
3220            let next_out_of_line = decoder.next_out_of_line();
3221            let handles_before = decoder.remaining_handles();
3222            if let Some((inlined, num_bytes, num_handles)) =
3223                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3224            {
3225                let member_inline_size =
3226                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3227                if inlined != (member_inline_size <= 4) {
3228                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3229                }
3230                let inner_offset;
3231                let mut inner_depth = depth.clone();
3232                if inlined {
3233                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3234                    inner_offset = next_offset;
3235                } else {
3236                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3237                    inner_depth.increment()?;
3238                }
3239                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
3240                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
3241                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3242                {
3243                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3244                }
3245                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3246                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3247                }
3248            }
3249
3250            next_offset += envelope_size;
3251            _next_ordinal_to_read += 1;
3252            if next_offset >= end_offset {
3253                return Ok(());
3254            }
3255
3256            // Decode unknown envelopes for gaps in ordinals.
3257            while _next_ordinal_to_read < 4 {
3258                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3259                _next_ordinal_to_read += 1;
3260                next_offset += envelope_size;
3261            }
3262
3263            let next_out_of_line = decoder.next_out_of_line();
3264            let handles_before = decoder.remaining_handles();
3265            if let Some((inlined, num_bytes, num_handles)) =
3266                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3267            {
3268                let member_inline_size =
3269                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3270                if inlined != (member_inline_size <= 4) {
3271                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3272                }
3273                let inner_offset;
3274                let mut inner_depth = depth.clone();
3275                if inlined {
3276                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3277                    inner_offset = next_offset;
3278                } else {
3279                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3280                    inner_depth.increment()?;
3281                }
3282                let val_ref = self.lqi.get_or_insert_with(|| fidl::new_empty!(u8, D));
3283                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3285                {
3286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3287                }
3288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3290                }
3291            }
3292
3293            next_offset += envelope_size;
3294
3295            // Decode the remaining unknown envelopes.
3296            while next_offset < end_offset {
3297                _next_ordinal_to_read += 1;
3298                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3299                next_offset += envelope_size;
3300            }
3301
3302            Ok(())
3303        }
3304    }
3305
3306    impl BorderRoutingCounters {
3307        #[inline(always)]
3308        fn max_ordinal_present(&self) -> u64 {
3309            if let Some(_) = self.outbound_internet_bytes {
3310                return 18;
3311            }
3312            if let Some(_) = self.outbound_internet_packets {
3313                return 17;
3314            }
3315            if let Some(_) = self.inbound_internet_bytes {
3316                return 16;
3317            }
3318            if let Some(_) = self.inbound_internet_packets {
3319                return 15;
3320            }
3321            if let Some(_) = self.rs_tx_failure {
3322                return 14;
3323            }
3324            if let Some(_) = self.rs_tx_success {
3325                return 13;
3326            }
3327            if let Some(_) = self.rs_rx {
3328                return 12;
3329            }
3330            if let Some(_) = self.ra_tx_failure {
3331                return 11;
3332            }
3333            if let Some(_) = self.ra_tx_success {
3334                return 10;
3335            }
3336            if let Some(_) = self.ra_rx {
3337                return 9;
3338            }
3339            if let Some(_) = self.outbound_multicast_bytes {
3340                return 8;
3341            }
3342            if let Some(_) = self.outbound_multicast_packets {
3343                return 7;
3344            }
3345            if let Some(_) = self.outbound_unicast_bytes {
3346                return 6;
3347            }
3348            if let Some(_) = self.outbound_unicast_packets {
3349                return 5;
3350            }
3351            if let Some(_) = self.inbound_multicast_bytes {
3352                return 4;
3353            }
3354            if let Some(_) = self.inbound_multicast_packets {
3355                return 3;
3356            }
3357            if let Some(_) = self.inbound_unicast_bytes {
3358                return 2;
3359            }
3360            if let Some(_) = self.inbound_unicast_packets {
3361                return 1;
3362            }
3363            0
3364        }
3365    }
3366
3367    impl fidl::encoding::ValueTypeMarker for BorderRoutingCounters {
3368        type Borrowed<'a> = &'a Self;
3369        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3370            value
3371        }
3372    }
3373
3374    unsafe impl fidl::encoding::TypeMarker for BorderRoutingCounters {
3375        type Owned = Self;
3376
3377        #[inline(always)]
3378        fn inline_align(_context: fidl::encoding::Context) -> usize {
3379            8
3380        }
3381
3382        #[inline(always)]
3383        fn inline_size(_context: fidl::encoding::Context) -> usize {
3384            16
3385        }
3386    }
3387
3388    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BorderRoutingCounters, D>
3389        for &BorderRoutingCounters
3390    {
3391        unsafe fn encode(
3392            self,
3393            encoder: &mut fidl::encoding::Encoder<'_, D>,
3394            offset: usize,
3395            mut depth: fidl::encoding::Depth,
3396        ) -> fidl::Result<()> {
3397            encoder.debug_check_bounds::<BorderRoutingCounters>(offset);
3398            // Vector header
3399            let max_ordinal: u64 = self.max_ordinal_present();
3400            encoder.write_num(max_ordinal, offset);
3401            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3402            // Calling encoder.out_of_line_offset(0) is not allowed.
3403            if max_ordinal == 0 {
3404                return Ok(());
3405            }
3406            depth.increment()?;
3407            let envelope_size = 8;
3408            let bytes_len = max_ordinal as usize * envelope_size;
3409            #[allow(unused_variables)]
3410            let offset = encoder.out_of_line_offset(bytes_len);
3411            let mut _prev_end_offset: usize = 0;
3412            if 1 > max_ordinal {
3413                return Ok(());
3414            }
3415
3416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3417            // are envelope_size bytes.
3418            let cur_offset: usize = (1 - 1) * envelope_size;
3419
3420            // Zero reserved fields.
3421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3422
3423            // Safety:
3424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3426            //   envelope_size bytes, there is always sufficient room.
3427            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3428                self.inbound_unicast_packets
3429                    .as_ref()
3430                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3431                encoder,
3432                offset + cur_offset,
3433                depth,
3434            )?;
3435
3436            _prev_end_offset = cur_offset + envelope_size;
3437            if 2 > max_ordinal {
3438                return Ok(());
3439            }
3440
3441            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3442            // are envelope_size bytes.
3443            let cur_offset: usize = (2 - 1) * envelope_size;
3444
3445            // Zero reserved fields.
3446            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3447
3448            // Safety:
3449            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3450            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3451            //   envelope_size bytes, there is always sufficient room.
3452            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3453                self.inbound_unicast_bytes
3454                    .as_ref()
3455                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3456                encoder,
3457                offset + cur_offset,
3458                depth,
3459            )?;
3460
3461            _prev_end_offset = cur_offset + envelope_size;
3462            if 3 > max_ordinal {
3463                return Ok(());
3464            }
3465
3466            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3467            // are envelope_size bytes.
3468            let cur_offset: usize = (3 - 1) * envelope_size;
3469
3470            // Zero reserved fields.
3471            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3472
3473            // Safety:
3474            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3475            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3476            //   envelope_size bytes, there is always sufficient room.
3477            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3478                self.inbound_multicast_packets
3479                    .as_ref()
3480                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3481                encoder,
3482                offset + cur_offset,
3483                depth,
3484            )?;
3485
3486            _prev_end_offset = cur_offset + envelope_size;
3487            if 4 > max_ordinal {
3488                return Ok(());
3489            }
3490
3491            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3492            // are envelope_size bytes.
3493            let cur_offset: usize = (4 - 1) * envelope_size;
3494
3495            // Zero reserved fields.
3496            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3497
3498            // Safety:
3499            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3500            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3501            //   envelope_size bytes, there is always sufficient room.
3502            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3503                self.inbound_multicast_bytes
3504                    .as_ref()
3505                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3506                encoder,
3507                offset + cur_offset,
3508                depth,
3509            )?;
3510
3511            _prev_end_offset = cur_offset + envelope_size;
3512            if 5 > max_ordinal {
3513                return Ok(());
3514            }
3515
3516            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3517            // are envelope_size bytes.
3518            let cur_offset: usize = (5 - 1) * envelope_size;
3519
3520            // Zero reserved fields.
3521            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3522
3523            // Safety:
3524            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3525            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3526            //   envelope_size bytes, there is always sufficient room.
3527            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3528                self.outbound_unicast_packets
3529                    .as_ref()
3530                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3531                encoder,
3532                offset + cur_offset,
3533                depth,
3534            )?;
3535
3536            _prev_end_offset = cur_offset + envelope_size;
3537            if 6 > max_ordinal {
3538                return Ok(());
3539            }
3540
3541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3542            // are envelope_size bytes.
3543            let cur_offset: usize = (6 - 1) * envelope_size;
3544
3545            // Zero reserved fields.
3546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3547
3548            // Safety:
3549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3551            //   envelope_size bytes, there is always sufficient room.
3552            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3553                self.outbound_unicast_bytes
3554                    .as_ref()
3555                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3556                encoder,
3557                offset + cur_offset,
3558                depth,
3559            )?;
3560
3561            _prev_end_offset = cur_offset + envelope_size;
3562            if 7 > max_ordinal {
3563                return Ok(());
3564            }
3565
3566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3567            // are envelope_size bytes.
3568            let cur_offset: usize = (7 - 1) * envelope_size;
3569
3570            // Zero reserved fields.
3571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3572
3573            // Safety:
3574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3576            //   envelope_size bytes, there is always sufficient room.
3577            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3578                self.outbound_multicast_packets
3579                    .as_ref()
3580                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3581                encoder,
3582                offset + cur_offset,
3583                depth,
3584            )?;
3585
3586            _prev_end_offset = cur_offset + envelope_size;
3587            if 8 > max_ordinal {
3588                return Ok(());
3589            }
3590
3591            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3592            // are envelope_size bytes.
3593            let cur_offset: usize = (8 - 1) * envelope_size;
3594
3595            // Zero reserved fields.
3596            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3597
3598            // Safety:
3599            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3600            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3601            //   envelope_size bytes, there is always sufficient room.
3602            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3603                self.outbound_multicast_bytes
3604                    .as_ref()
3605                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3606                encoder,
3607                offset + cur_offset,
3608                depth,
3609            )?;
3610
3611            _prev_end_offset = cur_offset + envelope_size;
3612            if 9 > max_ordinal {
3613                return Ok(());
3614            }
3615
3616            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3617            // are envelope_size bytes.
3618            let cur_offset: usize = (9 - 1) * envelope_size;
3619
3620            // Zero reserved fields.
3621            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3622
3623            // Safety:
3624            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3625            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3626            //   envelope_size bytes, there is always sufficient room.
3627            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3628                self.ra_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3629                encoder,
3630                offset + cur_offset,
3631                depth,
3632            )?;
3633
3634            _prev_end_offset = cur_offset + envelope_size;
3635            if 10 > max_ordinal {
3636                return Ok(());
3637            }
3638
3639            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3640            // are envelope_size bytes.
3641            let cur_offset: usize = (10 - 1) * envelope_size;
3642
3643            // Zero reserved fields.
3644            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3645
3646            // Safety:
3647            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3648            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3649            //   envelope_size bytes, there is always sufficient room.
3650            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3651                self.ra_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3652                encoder,
3653                offset + cur_offset,
3654                depth,
3655            )?;
3656
3657            _prev_end_offset = cur_offset + envelope_size;
3658            if 11 > max_ordinal {
3659                return Ok(());
3660            }
3661
3662            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3663            // are envelope_size bytes.
3664            let cur_offset: usize = (11 - 1) * envelope_size;
3665
3666            // Zero reserved fields.
3667            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3668
3669            // Safety:
3670            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3671            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3672            //   envelope_size bytes, there is always sufficient room.
3673            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3674                self.ra_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3675                encoder,
3676                offset + cur_offset,
3677                depth,
3678            )?;
3679
3680            _prev_end_offset = cur_offset + envelope_size;
3681            if 12 > max_ordinal {
3682                return Ok(());
3683            }
3684
3685            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3686            // are envelope_size bytes.
3687            let cur_offset: usize = (12 - 1) * envelope_size;
3688
3689            // Zero reserved fields.
3690            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3691
3692            // Safety:
3693            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3694            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3695            //   envelope_size bytes, there is always sufficient room.
3696            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3697                self.rs_rx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3698                encoder,
3699                offset + cur_offset,
3700                depth,
3701            )?;
3702
3703            _prev_end_offset = cur_offset + envelope_size;
3704            if 13 > max_ordinal {
3705                return Ok(());
3706            }
3707
3708            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3709            // are envelope_size bytes.
3710            let cur_offset: usize = (13 - 1) * envelope_size;
3711
3712            // Zero reserved fields.
3713            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3714
3715            // Safety:
3716            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3717            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3718            //   envelope_size bytes, there is always sufficient room.
3719            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3720                self.rs_tx_success.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3721                encoder,
3722                offset + cur_offset,
3723                depth,
3724            )?;
3725
3726            _prev_end_offset = cur_offset + envelope_size;
3727            if 14 > max_ordinal {
3728                return Ok(());
3729            }
3730
3731            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3732            // are envelope_size bytes.
3733            let cur_offset: usize = (14 - 1) * envelope_size;
3734
3735            // Zero reserved fields.
3736            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3737
3738            // Safety:
3739            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3740            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3741            //   envelope_size bytes, there is always sufficient room.
3742            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3743                self.rs_tx_failure.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3744                encoder,
3745                offset + cur_offset,
3746                depth,
3747            )?;
3748
3749            _prev_end_offset = cur_offset + envelope_size;
3750            if 15 > max_ordinal {
3751                return Ok(());
3752            }
3753
3754            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3755            // are envelope_size bytes.
3756            let cur_offset: usize = (15 - 1) * envelope_size;
3757
3758            // Zero reserved fields.
3759            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3760
3761            // Safety:
3762            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3763            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3764            //   envelope_size bytes, there is always sufficient room.
3765            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3766                self.inbound_internet_packets
3767                    .as_ref()
3768                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3769                encoder,
3770                offset + cur_offset,
3771                depth,
3772            )?;
3773
3774            _prev_end_offset = cur_offset + envelope_size;
3775            if 16 > max_ordinal {
3776                return Ok(());
3777            }
3778
3779            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3780            // are envelope_size bytes.
3781            let cur_offset: usize = (16 - 1) * envelope_size;
3782
3783            // Zero reserved fields.
3784            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3785
3786            // Safety:
3787            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3788            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3789            //   envelope_size bytes, there is always sufficient room.
3790            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3791                self.inbound_internet_bytes
3792                    .as_ref()
3793                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3794                encoder,
3795                offset + cur_offset,
3796                depth,
3797            )?;
3798
3799            _prev_end_offset = cur_offset + envelope_size;
3800            if 17 > max_ordinal {
3801                return Ok(());
3802            }
3803
3804            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3805            // are envelope_size bytes.
3806            let cur_offset: usize = (17 - 1) * envelope_size;
3807
3808            // Zero reserved fields.
3809            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3810
3811            // Safety:
3812            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3813            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3814            //   envelope_size bytes, there is always sufficient room.
3815            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3816                self.outbound_internet_packets
3817                    .as_ref()
3818                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3819                encoder,
3820                offset + cur_offset,
3821                depth,
3822            )?;
3823
3824            _prev_end_offset = cur_offset + envelope_size;
3825            if 18 > max_ordinal {
3826                return Ok(());
3827            }
3828
3829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3830            // are envelope_size bytes.
3831            let cur_offset: usize = (18 - 1) * envelope_size;
3832
3833            // Zero reserved fields.
3834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3835
3836            // Safety:
3837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3839            //   envelope_size bytes, there is always sufficient room.
3840            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3841                self.outbound_internet_bytes
3842                    .as_ref()
3843                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3844                encoder,
3845                offset + cur_offset,
3846                depth,
3847            )?;
3848
3849            _prev_end_offset = cur_offset + envelope_size;
3850
3851            Ok(())
3852        }
3853    }
3854
3855    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BorderRoutingCounters {
3856        #[inline(always)]
3857        fn new_empty() -> Self {
3858            Self::default()
3859        }
3860
3861        unsafe fn decode(
3862            &mut self,
3863            decoder: &mut fidl::encoding::Decoder<'_, D>,
3864            offset: usize,
3865            mut depth: fidl::encoding::Depth,
3866        ) -> fidl::Result<()> {
3867            decoder.debug_check_bounds::<Self>(offset);
3868            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3869                None => return Err(fidl::Error::NotNullable),
3870                Some(len) => len,
3871            };
3872            // Calling decoder.out_of_line_offset(0) is not allowed.
3873            if len == 0 {
3874                return Ok(());
3875            };
3876            depth.increment()?;
3877            let envelope_size = 8;
3878            let bytes_len = len * envelope_size;
3879            let offset = decoder.out_of_line_offset(bytes_len)?;
3880            // Decode the envelope for each type.
3881            let mut _next_ordinal_to_read = 0;
3882            let mut next_offset = offset;
3883            let end_offset = offset + bytes_len;
3884            _next_ordinal_to_read += 1;
3885            if next_offset >= end_offset {
3886                return Ok(());
3887            }
3888
3889            // Decode unknown envelopes for gaps in ordinals.
3890            while _next_ordinal_to_read < 1 {
3891                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3892                _next_ordinal_to_read += 1;
3893                next_offset += envelope_size;
3894            }
3895
3896            let next_out_of_line = decoder.next_out_of_line();
3897            let handles_before = decoder.remaining_handles();
3898            if let Some((inlined, num_bytes, num_handles)) =
3899                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3900            {
3901                let member_inline_size =
3902                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3903                if inlined != (member_inline_size <= 4) {
3904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3905                }
3906                let inner_offset;
3907                let mut inner_depth = depth.clone();
3908                if inlined {
3909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3910                    inner_offset = next_offset;
3911                } else {
3912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3913                    inner_depth.increment()?;
3914                }
3915                let val_ref =
3916                    self.inbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
3917                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3918                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3919                {
3920                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3921                }
3922                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3923                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3924                }
3925            }
3926
3927            next_offset += envelope_size;
3928            _next_ordinal_to_read += 1;
3929            if next_offset >= end_offset {
3930                return Ok(());
3931            }
3932
3933            // Decode unknown envelopes for gaps in ordinals.
3934            while _next_ordinal_to_read < 2 {
3935                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3936                _next_ordinal_to_read += 1;
3937                next_offset += envelope_size;
3938            }
3939
3940            let next_out_of_line = decoder.next_out_of_line();
3941            let handles_before = decoder.remaining_handles();
3942            if let Some((inlined, num_bytes, num_handles)) =
3943                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3944            {
3945                let member_inline_size =
3946                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3947                if inlined != (member_inline_size <= 4) {
3948                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3949                }
3950                let inner_offset;
3951                let mut inner_depth = depth.clone();
3952                if inlined {
3953                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3954                    inner_offset = next_offset;
3955                } else {
3956                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3957                    inner_depth.increment()?;
3958                }
3959                let val_ref =
3960                    self.inbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
3961                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3962                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3963                {
3964                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3965                }
3966                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3967                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3968                }
3969            }
3970
3971            next_offset += envelope_size;
3972            _next_ordinal_to_read += 1;
3973            if next_offset >= end_offset {
3974                return Ok(());
3975            }
3976
3977            // Decode unknown envelopes for gaps in ordinals.
3978            while _next_ordinal_to_read < 3 {
3979                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3980                _next_ordinal_to_read += 1;
3981                next_offset += envelope_size;
3982            }
3983
3984            let next_out_of_line = decoder.next_out_of_line();
3985            let handles_before = decoder.remaining_handles();
3986            if let Some((inlined, num_bytes, num_handles)) =
3987                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3988            {
3989                let member_inline_size =
3990                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3991                if inlined != (member_inline_size <= 4) {
3992                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3993                }
3994                let inner_offset;
3995                let mut inner_depth = depth.clone();
3996                if inlined {
3997                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3998                    inner_offset = next_offset;
3999                } else {
4000                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4001                    inner_depth.increment()?;
4002                }
4003                let val_ref =
4004                    self.inbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4005                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4007                {
4008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4009                }
4010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4012                }
4013            }
4014
4015            next_offset += envelope_size;
4016            _next_ordinal_to_read += 1;
4017            if next_offset >= end_offset {
4018                return Ok(());
4019            }
4020
4021            // Decode unknown envelopes for gaps in ordinals.
4022            while _next_ordinal_to_read < 4 {
4023                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4024                _next_ordinal_to_read += 1;
4025                next_offset += envelope_size;
4026            }
4027
4028            let next_out_of_line = decoder.next_out_of_line();
4029            let handles_before = decoder.remaining_handles();
4030            if let Some((inlined, num_bytes, num_handles)) =
4031                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4032            {
4033                let member_inline_size =
4034                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4035                if inlined != (member_inline_size <= 4) {
4036                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4037                }
4038                let inner_offset;
4039                let mut inner_depth = depth.clone();
4040                if inlined {
4041                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4042                    inner_offset = next_offset;
4043                } else {
4044                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4045                    inner_depth.increment()?;
4046                }
4047                let val_ref =
4048                    self.inbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4049                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4050                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4051                {
4052                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4053                }
4054                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4055                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4056                }
4057            }
4058
4059            next_offset += envelope_size;
4060            _next_ordinal_to_read += 1;
4061            if next_offset >= end_offset {
4062                return Ok(());
4063            }
4064
4065            // Decode unknown envelopes for gaps in ordinals.
4066            while _next_ordinal_to_read < 5 {
4067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4068                _next_ordinal_to_read += 1;
4069                next_offset += envelope_size;
4070            }
4071
4072            let next_out_of_line = decoder.next_out_of_line();
4073            let handles_before = decoder.remaining_handles();
4074            if let Some((inlined, num_bytes, num_handles)) =
4075                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4076            {
4077                let member_inline_size =
4078                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4079                if inlined != (member_inline_size <= 4) {
4080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4081                }
4082                let inner_offset;
4083                let mut inner_depth = depth.clone();
4084                if inlined {
4085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4086                    inner_offset = next_offset;
4087                } else {
4088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4089                    inner_depth.increment()?;
4090                }
4091                let val_ref =
4092                    self.outbound_unicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4093                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4094                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4095                {
4096                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4097                }
4098                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4099                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4100                }
4101            }
4102
4103            next_offset += envelope_size;
4104            _next_ordinal_to_read += 1;
4105            if next_offset >= end_offset {
4106                return Ok(());
4107            }
4108
4109            // Decode unknown envelopes for gaps in ordinals.
4110            while _next_ordinal_to_read < 6 {
4111                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4112                _next_ordinal_to_read += 1;
4113                next_offset += envelope_size;
4114            }
4115
4116            let next_out_of_line = decoder.next_out_of_line();
4117            let handles_before = decoder.remaining_handles();
4118            if let Some((inlined, num_bytes, num_handles)) =
4119                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4120            {
4121                let member_inline_size =
4122                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4123                if inlined != (member_inline_size <= 4) {
4124                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4125                }
4126                let inner_offset;
4127                let mut inner_depth = depth.clone();
4128                if inlined {
4129                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4130                    inner_offset = next_offset;
4131                } else {
4132                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4133                    inner_depth.increment()?;
4134                }
4135                let val_ref =
4136                    self.outbound_unicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4137                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4138                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4139                {
4140                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4141                }
4142                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4143                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4144                }
4145            }
4146
4147            next_offset += envelope_size;
4148            _next_ordinal_to_read += 1;
4149            if next_offset >= end_offset {
4150                return Ok(());
4151            }
4152
4153            // Decode unknown envelopes for gaps in ordinals.
4154            while _next_ordinal_to_read < 7 {
4155                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4156                _next_ordinal_to_read += 1;
4157                next_offset += envelope_size;
4158            }
4159
4160            let next_out_of_line = decoder.next_out_of_line();
4161            let handles_before = decoder.remaining_handles();
4162            if let Some((inlined, num_bytes, num_handles)) =
4163                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4164            {
4165                let member_inline_size =
4166                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4167                if inlined != (member_inline_size <= 4) {
4168                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4169                }
4170                let inner_offset;
4171                let mut inner_depth = depth.clone();
4172                if inlined {
4173                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4174                    inner_offset = next_offset;
4175                } else {
4176                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4177                    inner_depth.increment()?;
4178                }
4179                let val_ref =
4180                    self.outbound_multicast_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4181                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4182                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4183                {
4184                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4185                }
4186                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4187                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4188                }
4189            }
4190
4191            next_offset += envelope_size;
4192            _next_ordinal_to_read += 1;
4193            if next_offset >= end_offset {
4194                return Ok(());
4195            }
4196
4197            // Decode unknown envelopes for gaps in ordinals.
4198            while _next_ordinal_to_read < 8 {
4199                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4200                _next_ordinal_to_read += 1;
4201                next_offset += envelope_size;
4202            }
4203
4204            let next_out_of_line = decoder.next_out_of_line();
4205            let handles_before = decoder.remaining_handles();
4206            if let Some((inlined, num_bytes, num_handles)) =
4207                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4208            {
4209                let member_inline_size =
4210                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4211                if inlined != (member_inline_size <= 4) {
4212                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4213                }
4214                let inner_offset;
4215                let mut inner_depth = depth.clone();
4216                if inlined {
4217                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4218                    inner_offset = next_offset;
4219                } else {
4220                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4221                    inner_depth.increment()?;
4222                }
4223                let val_ref =
4224                    self.outbound_multicast_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4225                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4226                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4227                {
4228                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4229                }
4230                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4231                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4232                }
4233            }
4234
4235            next_offset += envelope_size;
4236            _next_ordinal_to_read += 1;
4237            if next_offset >= end_offset {
4238                return Ok(());
4239            }
4240
4241            // Decode unknown envelopes for gaps in ordinals.
4242            while _next_ordinal_to_read < 9 {
4243                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4244                _next_ordinal_to_read += 1;
4245                next_offset += envelope_size;
4246            }
4247
4248            let next_out_of_line = decoder.next_out_of_line();
4249            let handles_before = decoder.remaining_handles();
4250            if let Some((inlined, num_bytes, num_handles)) =
4251                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4252            {
4253                let member_inline_size =
4254                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4255                if inlined != (member_inline_size <= 4) {
4256                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4257                }
4258                let inner_offset;
4259                let mut inner_depth = depth.clone();
4260                if inlined {
4261                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4262                    inner_offset = next_offset;
4263                } else {
4264                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4265                    inner_depth.increment()?;
4266                }
4267                let val_ref = self.ra_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4268                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4269                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4270                {
4271                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4272                }
4273                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4274                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4275                }
4276            }
4277
4278            next_offset += envelope_size;
4279            _next_ordinal_to_read += 1;
4280            if next_offset >= end_offset {
4281                return Ok(());
4282            }
4283
4284            // Decode unknown envelopes for gaps in ordinals.
4285            while _next_ordinal_to_read < 10 {
4286                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4287                _next_ordinal_to_read += 1;
4288                next_offset += envelope_size;
4289            }
4290
4291            let next_out_of_line = decoder.next_out_of_line();
4292            let handles_before = decoder.remaining_handles();
4293            if let Some((inlined, num_bytes, num_handles)) =
4294                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4295            {
4296                let member_inline_size =
4297                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4298                if inlined != (member_inline_size <= 4) {
4299                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4300                }
4301                let inner_offset;
4302                let mut inner_depth = depth.clone();
4303                if inlined {
4304                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4305                    inner_offset = next_offset;
4306                } else {
4307                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4308                    inner_depth.increment()?;
4309                }
4310                let val_ref = self.ra_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4311                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4312                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4313                {
4314                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4315                }
4316                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4317                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4318                }
4319            }
4320
4321            next_offset += envelope_size;
4322            _next_ordinal_to_read += 1;
4323            if next_offset >= end_offset {
4324                return Ok(());
4325            }
4326
4327            // Decode unknown envelopes for gaps in ordinals.
4328            while _next_ordinal_to_read < 11 {
4329                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4330                _next_ordinal_to_read += 1;
4331                next_offset += envelope_size;
4332            }
4333
4334            let next_out_of_line = decoder.next_out_of_line();
4335            let handles_before = decoder.remaining_handles();
4336            if let Some((inlined, num_bytes, num_handles)) =
4337                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4338            {
4339                let member_inline_size =
4340                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4341                if inlined != (member_inline_size <= 4) {
4342                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4343                }
4344                let inner_offset;
4345                let mut inner_depth = depth.clone();
4346                if inlined {
4347                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4348                    inner_offset = next_offset;
4349                } else {
4350                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4351                    inner_depth.increment()?;
4352                }
4353                let val_ref = self.ra_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4354                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4355                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4356                {
4357                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4358                }
4359                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4360                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4361                }
4362            }
4363
4364            next_offset += envelope_size;
4365            _next_ordinal_to_read += 1;
4366            if next_offset >= end_offset {
4367                return Ok(());
4368            }
4369
4370            // Decode unknown envelopes for gaps in ordinals.
4371            while _next_ordinal_to_read < 12 {
4372                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4373                _next_ordinal_to_read += 1;
4374                next_offset += envelope_size;
4375            }
4376
4377            let next_out_of_line = decoder.next_out_of_line();
4378            let handles_before = decoder.remaining_handles();
4379            if let Some((inlined, num_bytes, num_handles)) =
4380                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4381            {
4382                let member_inline_size =
4383                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4384                if inlined != (member_inline_size <= 4) {
4385                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4386                }
4387                let inner_offset;
4388                let mut inner_depth = depth.clone();
4389                if inlined {
4390                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4391                    inner_offset = next_offset;
4392                } else {
4393                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4394                    inner_depth.increment()?;
4395                }
4396                let val_ref = self.rs_rx.get_or_insert_with(|| fidl::new_empty!(u32, D));
4397                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4398                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4399                {
4400                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4401                }
4402                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4403                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4404                }
4405            }
4406
4407            next_offset += envelope_size;
4408            _next_ordinal_to_read += 1;
4409            if next_offset >= end_offset {
4410                return Ok(());
4411            }
4412
4413            // Decode unknown envelopes for gaps in ordinals.
4414            while _next_ordinal_to_read < 13 {
4415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4416                _next_ordinal_to_read += 1;
4417                next_offset += envelope_size;
4418            }
4419
4420            let next_out_of_line = decoder.next_out_of_line();
4421            let handles_before = decoder.remaining_handles();
4422            if let Some((inlined, num_bytes, num_handles)) =
4423                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4424            {
4425                let member_inline_size =
4426                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4427                if inlined != (member_inline_size <= 4) {
4428                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4429                }
4430                let inner_offset;
4431                let mut inner_depth = depth.clone();
4432                if inlined {
4433                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4434                    inner_offset = next_offset;
4435                } else {
4436                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4437                    inner_depth.increment()?;
4438                }
4439                let val_ref = self.rs_tx_success.get_or_insert_with(|| fidl::new_empty!(u32, D));
4440                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4441                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4442                {
4443                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4444                }
4445                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4446                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4447                }
4448            }
4449
4450            next_offset += envelope_size;
4451            _next_ordinal_to_read += 1;
4452            if next_offset >= end_offset {
4453                return Ok(());
4454            }
4455
4456            // Decode unknown envelopes for gaps in ordinals.
4457            while _next_ordinal_to_read < 14 {
4458                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4459                _next_ordinal_to_read += 1;
4460                next_offset += envelope_size;
4461            }
4462
4463            let next_out_of_line = decoder.next_out_of_line();
4464            let handles_before = decoder.remaining_handles();
4465            if let Some((inlined, num_bytes, num_handles)) =
4466                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4467            {
4468                let member_inline_size =
4469                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4470                if inlined != (member_inline_size <= 4) {
4471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4472                }
4473                let inner_offset;
4474                let mut inner_depth = depth.clone();
4475                if inlined {
4476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4477                    inner_offset = next_offset;
4478                } else {
4479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4480                    inner_depth.increment()?;
4481                }
4482                let val_ref = self.rs_tx_failure.get_or_insert_with(|| fidl::new_empty!(u32, D));
4483                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4484                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4485                {
4486                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4487                }
4488                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4489                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4490                }
4491            }
4492
4493            next_offset += envelope_size;
4494            _next_ordinal_to_read += 1;
4495            if next_offset >= end_offset {
4496                return Ok(());
4497            }
4498
4499            // Decode unknown envelopes for gaps in ordinals.
4500            while _next_ordinal_to_read < 15 {
4501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4502                _next_ordinal_to_read += 1;
4503                next_offset += envelope_size;
4504            }
4505
4506            let next_out_of_line = decoder.next_out_of_line();
4507            let handles_before = decoder.remaining_handles();
4508            if let Some((inlined, num_bytes, num_handles)) =
4509                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4510            {
4511                let member_inline_size =
4512                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4513                if inlined != (member_inline_size <= 4) {
4514                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4515                }
4516                let inner_offset;
4517                let mut inner_depth = depth.clone();
4518                if inlined {
4519                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4520                    inner_offset = next_offset;
4521                } else {
4522                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4523                    inner_depth.increment()?;
4524                }
4525                let val_ref =
4526                    self.inbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4527                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4528                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4529                {
4530                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4531                }
4532                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4533                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4534                }
4535            }
4536
4537            next_offset += envelope_size;
4538            _next_ordinal_to_read += 1;
4539            if next_offset >= end_offset {
4540                return Ok(());
4541            }
4542
4543            // Decode unknown envelopes for gaps in ordinals.
4544            while _next_ordinal_to_read < 16 {
4545                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4546                _next_ordinal_to_read += 1;
4547                next_offset += envelope_size;
4548            }
4549
4550            let next_out_of_line = decoder.next_out_of_line();
4551            let handles_before = decoder.remaining_handles();
4552            if let Some((inlined, num_bytes, num_handles)) =
4553                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4554            {
4555                let member_inline_size =
4556                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4557                if inlined != (member_inline_size <= 4) {
4558                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4559                }
4560                let inner_offset;
4561                let mut inner_depth = depth.clone();
4562                if inlined {
4563                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4564                    inner_offset = next_offset;
4565                } else {
4566                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4567                    inner_depth.increment()?;
4568                }
4569                let val_ref =
4570                    self.inbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4571                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4573                {
4574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4575                }
4576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4578                }
4579            }
4580
4581            next_offset += envelope_size;
4582            _next_ordinal_to_read += 1;
4583            if next_offset >= end_offset {
4584                return Ok(());
4585            }
4586
4587            // Decode unknown envelopes for gaps in ordinals.
4588            while _next_ordinal_to_read < 17 {
4589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4590                _next_ordinal_to_read += 1;
4591                next_offset += envelope_size;
4592            }
4593
4594            let next_out_of_line = decoder.next_out_of_line();
4595            let handles_before = decoder.remaining_handles();
4596            if let Some((inlined, num_bytes, num_handles)) =
4597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4598            {
4599                let member_inline_size =
4600                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4601                if inlined != (member_inline_size <= 4) {
4602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4603                }
4604                let inner_offset;
4605                let mut inner_depth = depth.clone();
4606                if inlined {
4607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4608                    inner_offset = next_offset;
4609                } else {
4610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4611                    inner_depth.increment()?;
4612                }
4613                let val_ref =
4614                    self.outbound_internet_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
4615                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4617                {
4618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4619                }
4620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4622                }
4623            }
4624
4625            next_offset += envelope_size;
4626            _next_ordinal_to_read += 1;
4627            if next_offset >= end_offset {
4628                return Ok(());
4629            }
4630
4631            // Decode unknown envelopes for gaps in ordinals.
4632            while _next_ordinal_to_read < 18 {
4633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4634                _next_ordinal_to_read += 1;
4635                next_offset += envelope_size;
4636            }
4637
4638            let next_out_of_line = decoder.next_out_of_line();
4639            let handles_before = decoder.remaining_handles();
4640            if let Some((inlined, num_bytes, num_handles)) =
4641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4642            {
4643                let member_inline_size =
4644                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4645                if inlined != (member_inline_size <= 4) {
4646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4647                }
4648                let inner_offset;
4649                let mut inner_depth = depth.clone();
4650                if inlined {
4651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4652                    inner_offset = next_offset;
4653                } else {
4654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4655                    inner_depth.increment()?;
4656                }
4657                let val_ref =
4658                    self.outbound_internet_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
4659                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4661                {
4662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4663                }
4664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4666                }
4667            }
4668
4669            next_offset += envelope_size;
4670
4671            // Decode the remaining unknown envelopes.
4672            while next_offset < end_offset {
4673                _next_ordinal_to_read += 1;
4674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4675                next_offset += envelope_size;
4676            }
4677
4678            Ok(())
4679        }
4680    }
4681
4682    impl BorderRoutingNat64State {
4683        #[inline(always)]
4684        fn max_ordinal_present(&self) -> u64 {
4685            if let Some(_) = self.translator_state {
4686                return 2;
4687            }
4688            if let Some(_) = self.prefix_manager_state {
4689                return 1;
4690            }
4691            0
4692        }
4693    }
4694
4695    impl fidl::encoding::ValueTypeMarker for BorderRoutingNat64State {
4696        type Borrowed<'a> = &'a Self;
4697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4698            value
4699        }
4700    }
4701
4702    unsafe impl fidl::encoding::TypeMarker for BorderRoutingNat64State {
4703        type Owned = Self;
4704
4705        #[inline(always)]
4706        fn inline_align(_context: fidl::encoding::Context) -> usize {
4707            8
4708        }
4709
4710        #[inline(always)]
4711        fn inline_size(_context: fidl::encoding::Context) -> usize {
4712            16
4713        }
4714    }
4715
4716    unsafe impl<D: fidl::encoding::ResourceDialect>
4717        fidl::encoding::Encode<BorderRoutingNat64State, D> for &BorderRoutingNat64State
4718    {
4719        unsafe fn encode(
4720            self,
4721            encoder: &mut fidl::encoding::Encoder<'_, D>,
4722            offset: usize,
4723            mut depth: fidl::encoding::Depth,
4724        ) -> fidl::Result<()> {
4725            encoder.debug_check_bounds::<BorderRoutingNat64State>(offset);
4726            // Vector header
4727            let max_ordinal: u64 = self.max_ordinal_present();
4728            encoder.write_num(max_ordinal, offset);
4729            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4730            // Calling encoder.out_of_line_offset(0) is not allowed.
4731            if max_ordinal == 0 {
4732                return Ok(());
4733            }
4734            depth.increment()?;
4735            let envelope_size = 8;
4736            let bytes_len = max_ordinal as usize * envelope_size;
4737            #[allow(unused_variables)]
4738            let offset = encoder.out_of_line_offset(bytes_len);
4739            let mut _prev_end_offset: usize = 0;
4740            if 1 > max_ordinal {
4741                return Ok(());
4742            }
4743
4744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4745            // are envelope_size bytes.
4746            let cur_offset: usize = (1 - 1) * envelope_size;
4747
4748            // Zero reserved fields.
4749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4750
4751            // Safety:
4752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4754            //   envelope_size bytes, there is always sufficient room.
4755            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4756                self.prefix_manager_state
4757                    .as_ref()
4758                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4759                encoder,
4760                offset + cur_offset,
4761                depth,
4762            )?;
4763
4764            _prev_end_offset = cur_offset + envelope_size;
4765            if 2 > max_ordinal {
4766                return Ok(());
4767            }
4768
4769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4770            // are envelope_size bytes.
4771            let cur_offset: usize = (2 - 1) * envelope_size;
4772
4773            // Zero reserved fields.
4774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4775
4776            // Safety:
4777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4779            //   envelope_size bytes, there is always sufficient room.
4780            fidl::encoding::encode_in_envelope_optional::<Nat64State, D>(
4781                self.translator_state
4782                    .as_ref()
4783                    .map(<Nat64State as fidl::encoding::ValueTypeMarker>::borrow),
4784                encoder,
4785                offset + cur_offset,
4786                depth,
4787            )?;
4788
4789            _prev_end_offset = cur_offset + envelope_size;
4790
4791            Ok(())
4792        }
4793    }
4794
4795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4796        for BorderRoutingNat64State
4797    {
4798        #[inline(always)]
4799        fn new_empty() -> Self {
4800            Self::default()
4801        }
4802
4803        unsafe fn decode(
4804            &mut self,
4805            decoder: &mut fidl::encoding::Decoder<'_, D>,
4806            offset: usize,
4807            mut depth: fidl::encoding::Depth,
4808        ) -> fidl::Result<()> {
4809            decoder.debug_check_bounds::<Self>(offset);
4810            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4811                None => return Err(fidl::Error::NotNullable),
4812                Some(len) => len,
4813            };
4814            // Calling decoder.out_of_line_offset(0) is not allowed.
4815            if len == 0 {
4816                return Ok(());
4817            };
4818            depth.increment()?;
4819            let envelope_size = 8;
4820            let bytes_len = len * envelope_size;
4821            let offset = decoder.out_of_line_offset(bytes_len)?;
4822            // Decode the envelope for each type.
4823            let mut _next_ordinal_to_read = 0;
4824            let mut next_offset = offset;
4825            let end_offset = offset + bytes_len;
4826            _next_ordinal_to_read += 1;
4827            if next_offset >= end_offset {
4828                return Ok(());
4829            }
4830
4831            // Decode unknown envelopes for gaps in ordinals.
4832            while _next_ordinal_to_read < 1 {
4833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4834                _next_ordinal_to_read += 1;
4835                next_offset += envelope_size;
4836            }
4837
4838            let next_out_of_line = decoder.next_out_of_line();
4839            let handles_before = decoder.remaining_handles();
4840            if let Some((inlined, num_bytes, num_handles)) =
4841                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4842            {
4843                let member_inline_size =
4844                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4845                if inlined != (member_inline_size <= 4) {
4846                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4847                }
4848                let inner_offset;
4849                let mut inner_depth = depth.clone();
4850                if inlined {
4851                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4852                    inner_offset = next_offset;
4853                } else {
4854                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4855                    inner_depth.increment()?;
4856                }
4857                let val_ref = self
4858                    .prefix_manager_state
4859                    .get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4860                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4861                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4862                {
4863                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4864                }
4865                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4866                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4867                }
4868            }
4869
4870            next_offset += envelope_size;
4871            _next_ordinal_to_read += 1;
4872            if next_offset >= end_offset {
4873                return Ok(());
4874            }
4875
4876            // Decode unknown envelopes for gaps in ordinals.
4877            while _next_ordinal_to_read < 2 {
4878                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4879                _next_ordinal_to_read += 1;
4880                next_offset += envelope_size;
4881            }
4882
4883            let next_out_of_line = decoder.next_out_of_line();
4884            let handles_before = decoder.remaining_handles();
4885            if let Some((inlined, num_bytes, num_handles)) =
4886                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4887            {
4888                let member_inline_size =
4889                    <Nat64State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4890                if inlined != (member_inline_size <= 4) {
4891                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4892                }
4893                let inner_offset;
4894                let mut inner_depth = depth.clone();
4895                if inlined {
4896                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4897                    inner_offset = next_offset;
4898                } else {
4899                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4900                    inner_depth.increment()?;
4901                }
4902                let val_ref =
4903                    self.translator_state.get_or_insert_with(|| fidl::new_empty!(Nat64State, D));
4904                fidl::decode!(Nat64State, D, val_ref, decoder, inner_offset, inner_depth)?;
4905                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4906                {
4907                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4908                }
4909                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4910                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4911                }
4912            }
4913
4914            next_offset += envelope_size;
4915
4916            // Decode the remaining unknown envelopes.
4917            while next_offset < end_offset {
4918                _next_ordinal_to_read += 1;
4919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4920                next_offset += envelope_size;
4921            }
4922
4923            Ok(())
4924        }
4925    }
4926
4927    impl ChannelInfo {
4928        #[inline(always)]
4929        fn max_ordinal_present(&self) -> u64 {
4930            if let Some(_) = self.masked_by_regulatory_domain {
4931                return 6;
4932            }
4933            if let Some(_) = self.spectrum_bandwidth_hz {
4934                return 5;
4935            }
4936            if let Some(_) = self.spectrum_center_frequency_hz {
4937                return 4;
4938            }
4939            if let Some(_) = self.max_transmit_power_dbm {
4940                return 3;
4941            }
4942            if let Some(_) = self.id {
4943                return 2;
4944            }
4945            if let Some(_) = self.index {
4946                return 1;
4947            }
4948            0
4949        }
4950    }
4951
4952    impl fidl::encoding::ValueTypeMarker for ChannelInfo {
4953        type Borrowed<'a> = &'a Self;
4954        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4955            value
4956        }
4957    }
4958
4959    unsafe impl fidl::encoding::TypeMarker for ChannelInfo {
4960        type Owned = Self;
4961
4962        #[inline(always)]
4963        fn inline_align(_context: fidl::encoding::Context) -> usize {
4964            8
4965        }
4966
4967        #[inline(always)]
4968        fn inline_size(_context: fidl::encoding::Context) -> usize {
4969            16
4970        }
4971    }
4972
4973    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelInfo, D>
4974        for &ChannelInfo
4975    {
4976        unsafe fn encode(
4977            self,
4978            encoder: &mut fidl::encoding::Encoder<'_, D>,
4979            offset: usize,
4980            mut depth: fidl::encoding::Depth,
4981        ) -> fidl::Result<()> {
4982            encoder.debug_check_bounds::<ChannelInfo>(offset);
4983            // Vector header
4984            let max_ordinal: u64 = self.max_ordinal_present();
4985            encoder.write_num(max_ordinal, offset);
4986            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4987            // Calling encoder.out_of_line_offset(0) is not allowed.
4988            if max_ordinal == 0 {
4989                return Ok(());
4990            }
4991            depth.increment()?;
4992            let envelope_size = 8;
4993            let bytes_len = max_ordinal as usize * envelope_size;
4994            #[allow(unused_variables)]
4995            let offset = encoder.out_of_line_offset(bytes_len);
4996            let mut _prev_end_offset: usize = 0;
4997            if 1 > max_ordinal {
4998                return Ok(());
4999            }
5000
5001            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5002            // are envelope_size bytes.
5003            let cur_offset: usize = (1 - 1) * envelope_size;
5004
5005            // Zero reserved fields.
5006            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5007
5008            // Safety:
5009            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5010            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5011            //   envelope_size bytes, there is always sufficient room.
5012            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5013                self.index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5014                encoder,
5015                offset + cur_offset,
5016                depth,
5017            )?;
5018
5019            _prev_end_offset = cur_offset + envelope_size;
5020            if 2 > max_ordinal {
5021                return Ok(());
5022            }
5023
5024            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5025            // are envelope_size bytes.
5026            let cur_offset: usize = (2 - 1) * envelope_size;
5027
5028            // Zero reserved fields.
5029            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5030
5031            // Safety:
5032            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5033            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5034            //   envelope_size bytes, there is always sufficient room.
5035            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
5036                self.id.as_ref().map(
5037                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
5038                ),
5039                encoder,
5040                offset + cur_offset,
5041                depth,
5042            )?;
5043
5044            _prev_end_offset = cur_offset + envelope_size;
5045            if 3 > max_ordinal {
5046                return Ok(());
5047            }
5048
5049            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5050            // are envelope_size bytes.
5051            let cur_offset: usize = (3 - 1) * envelope_size;
5052
5053            // Zero reserved fields.
5054            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5055
5056            // Safety:
5057            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5058            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5059            //   envelope_size bytes, there is always sufficient room.
5060            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5061                self.max_transmit_power_dbm
5062                    .as_ref()
5063                    .map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5064                encoder,
5065                offset + cur_offset,
5066                depth,
5067            )?;
5068
5069            _prev_end_offset = cur_offset + envelope_size;
5070            if 4 > max_ordinal {
5071                return Ok(());
5072            }
5073
5074            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5075            // are envelope_size bytes.
5076            let cur_offset: usize = (4 - 1) * envelope_size;
5077
5078            // Zero reserved fields.
5079            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5080
5081            // Safety:
5082            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5083            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5084            //   envelope_size bytes, there is always sufficient room.
5085            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5086                self.spectrum_center_frequency_hz
5087                    .as_ref()
5088                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5089                encoder,
5090                offset + cur_offset,
5091                depth,
5092            )?;
5093
5094            _prev_end_offset = cur_offset + envelope_size;
5095            if 5 > max_ordinal {
5096                return Ok(());
5097            }
5098
5099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5100            // are envelope_size bytes.
5101            let cur_offset: usize = (5 - 1) * envelope_size;
5102
5103            // Zero reserved fields.
5104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5105
5106            // Safety:
5107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5109            //   envelope_size bytes, there is always sufficient room.
5110            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5111                self.spectrum_bandwidth_hz
5112                    .as_ref()
5113                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5114                encoder,
5115                offset + cur_offset,
5116                depth,
5117            )?;
5118
5119            _prev_end_offset = cur_offset + envelope_size;
5120            if 6 > max_ordinal {
5121                return Ok(());
5122            }
5123
5124            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5125            // are envelope_size bytes.
5126            let cur_offset: usize = (6 - 1) * envelope_size;
5127
5128            // Zero reserved fields.
5129            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5130
5131            // Safety:
5132            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5133            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5134            //   envelope_size bytes, there is always sufficient room.
5135            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5136                self.masked_by_regulatory_domain
5137                    .as_ref()
5138                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5139                encoder,
5140                offset + cur_offset,
5141                depth,
5142            )?;
5143
5144            _prev_end_offset = cur_offset + envelope_size;
5145
5146            Ok(())
5147        }
5148    }
5149
5150    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelInfo {
5151        #[inline(always)]
5152        fn new_empty() -> Self {
5153            Self::default()
5154        }
5155
5156        unsafe fn decode(
5157            &mut self,
5158            decoder: &mut fidl::encoding::Decoder<'_, D>,
5159            offset: usize,
5160            mut depth: fidl::encoding::Depth,
5161        ) -> fidl::Result<()> {
5162            decoder.debug_check_bounds::<Self>(offset);
5163            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5164                None => return Err(fidl::Error::NotNullable),
5165                Some(len) => len,
5166            };
5167            // Calling decoder.out_of_line_offset(0) is not allowed.
5168            if len == 0 {
5169                return Ok(());
5170            };
5171            depth.increment()?;
5172            let envelope_size = 8;
5173            let bytes_len = len * envelope_size;
5174            let offset = decoder.out_of_line_offset(bytes_len)?;
5175            // Decode the envelope for each type.
5176            let mut _next_ordinal_to_read = 0;
5177            let mut next_offset = offset;
5178            let end_offset = offset + bytes_len;
5179            _next_ordinal_to_read += 1;
5180            if next_offset >= end_offset {
5181                return Ok(());
5182            }
5183
5184            // Decode unknown envelopes for gaps in ordinals.
5185            while _next_ordinal_to_read < 1 {
5186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5187                _next_ordinal_to_read += 1;
5188                next_offset += envelope_size;
5189            }
5190
5191            let next_out_of_line = decoder.next_out_of_line();
5192            let handles_before = decoder.remaining_handles();
5193            if let Some((inlined, num_bytes, num_handles)) =
5194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5195            {
5196                let member_inline_size =
5197                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5198                if inlined != (member_inline_size <= 4) {
5199                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5200                }
5201                let inner_offset;
5202                let mut inner_depth = depth.clone();
5203                if inlined {
5204                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5205                    inner_offset = next_offset;
5206                } else {
5207                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5208                    inner_depth.increment()?;
5209                }
5210                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u16, D));
5211                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5212                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5213                {
5214                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5215                }
5216                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5217                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5218                }
5219            }
5220
5221            next_offset += envelope_size;
5222            _next_ordinal_to_read += 1;
5223            if next_offset >= end_offset {
5224                return Ok(());
5225            }
5226
5227            // Decode unknown envelopes for gaps in ordinals.
5228            while _next_ordinal_to_read < 2 {
5229                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5230                _next_ordinal_to_read += 1;
5231                next_offset += envelope_size;
5232            }
5233
5234            let next_out_of_line = decoder.next_out_of_line();
5235            let handles_before = decoder.remaining_handles();
5236            if let Some((inlined, num_bytes, num_handles)) =
5237                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5238            {
5239                let member_inline_size =
5240                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
5241                        decoder.context,
5242                    );
5243                if inlined != (member_inline_size <= 4) {
5244                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5245                }
5246                let inner_offset;
5247                let mut inner_depth = depth.clone();
5248                if inlined {
5249                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5250                    inner_offset = next_offset;
5251                } else {
5252                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5253                    inner_depth.increment()?;
5254                }
5255                let val_ref = self
5256                    .id
5257                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
5258                fidl::decode!(
5259                    fidl::encoding::BoundedString<16>,
5260                    D,
5261                    val_ref,
5262                    decoder,
5263                    inner_offset,
5264                    inner_depth
5265                )?;
5266                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5267                {
5268                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5269                }
5270                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5271                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5272                }
5273            }
5274
5275            next_offset += envelope_size;
5276            _next_ordinal_to_read += 1;
5277            if next_offset >= end_offset {
5278                return Ok(());
5279            }
5280
5281            // Decode unknown envelopes for gaps in ordinals.
5282            while _next_ordinal_to_read < 3 {
5283                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5284                _next_ordinal_to_read += 1;
5285                next_offset += envelope_size;
5286            }
5287
5288            let next_out_of_line = decoder.next_out_of_line();
5289            let handles_before = decoder.remaining_handles();
5290            if let Some((inlined, num_bytes, num_handles)) =
5291                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5292            {
5293                let member_inline_size =
5294                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5295                if inlined != (member_inline_size <= 4) {
5296                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5297                }
5298                let inner_offset;
5299                let mut inner_depth = depth.clone();
5300                if inlined {
5301                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5302                    inner_offset = next_offset;
5303                } else {
5304                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5305                    inner_depth.increment()?;
5306                }
5307                let val_ref =
5308                    self.max_transmit_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
5309                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5310                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5311                {
5312                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5313                }
5314                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5315                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5316                }
5317            }
5318
5319            next_offset += envelope_size;
5320            _next_ordinal_to_read += 1;
5321            if next_offset >= end_offset {
5322                return Ok(());
5323            }
5324
5325            // Decode unknown envelopes for gaps in ordinals.
5326            while _next_ordinal_to_read < 4 {
5327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5328                _next_ordinal_to_read += 1;
5329                next_offset += envelope_size;
5330            }
5331
5332            let next_out_of_line = decoder.next_out_of_line();
5333            let handles_before = decoder.remaining_handles();
5334            if let Some((inlined, num_bytes, num_handles)) =
5335                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5336            {
5337                let member_inline_size =
5338                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5339                if inlined != (member_inline_size <= 4) {
5340                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5341                }
5342                let inner_offset;
5343                let mut inner_depth = depth.clone();
5344                if inlined {
5345                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5346                    inner_offset = next_offset;
5347                } else {
5348                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5349                    inner_depth.increment()?;
5350                }
5351                let val_ref = self
5352                    .spectrum_center_frequency_hz
5353                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
5354                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5355                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5356                {
5357                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5358                }
5359                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5360                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5361                }
5362            }
5363
5364            next_offset += envelope_size;
5365            _next_ordinal_to_read += 1;
5366            if next_offset >= end_offset {
5367                return Ok(());
5368            }
5369
5370            // Decode unknown envelopes for gaps in ordinals.
5371            while _next_ordinal_to_read < 5 {
5372                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5373                _next_ordinal_to_read += 1;
5374                next_offset += envelope_size;
5375            }
5376
5377            let next_out_of_line = decoder.next_out_of_line();
5378            let handles_before = decoder.remaining_handles();
5379            if let Some((inlined, num_bytes, num_handles)) =
5380                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5381            {
5382                let member_inline_size =
5383                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5384                if inlined != (member_inline_size <= 4) {
5385                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5386                }
5387                let inner_offset;
5388                let mut inner_depth = depth.clone();
5389                if inlined {
5390                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5391                    inner_offset = next_offset;
5392                } else {
5393                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5394                    inner_depth.increment()?;
5395                }
5396                let val_ref =
5397                    self.spectrum_bandwidth_hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
5398                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5399                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5400                {
5401                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5402                }
5403                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5404                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5405                }
5406            }
5407
5408            next_offset += envelope_size;
5409            _next_ordinal_to_read += 1;
5410            if next_offset >= end_offset {
5411                return Ok(());
5412            }
5413
5414            // Decode unknown envelopes for gaps in ordinals.
5415            while _next_ordinal_to_read < 6 {
5416                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5417                _next_ordinal_to_read += 1;
5418                next_offset += envelope_size;
5419            }
5420
5421            let next_out_of_line = decoder.next_out_of_line();
5422            let handles_before = decoder.remaining_handles();
5423            if let Some((inlined, num_bytes, num_handles)) =
5424                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5425            {
5426                let member_inline_size =
5427                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5428                if inlined != (member_inline_size <= 4) {
5429                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5430                }
5431                let inner_offset;
5432                let mut inner_depth = depth.clone();
5433                if inlined {
5434                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5435                    inner_offset = next_offset;
5436                } else {
5437                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5438                    inner_depth.increment()?;
5439                }
5440                let val_ref = self
5441                    .masked_by_regulatory_domain
5442                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
5443                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5445                {
5446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5447                }
5448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5450                }
5451            }
5452
5453            next_offset += envelope_size;
5454
5455            // Decode the remaining unknown envelopes.
5456            while next_offset < end_offset {
5457                _next_ordinal_to_read += 1;
5458                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5459                next_offset += envelope_size;
5460            }
5461
5462            Ok(())
5463        }
5464    }
5465
5466    impl Dhcp6PdInfo {
5467        #[inline(always)]
5468        fn max_ordinal_present(&self) -> u64 {
5469            if let Some(_) = self.hashed_pd_prefix {
5470                return 3;
5471            }
5472            if let Some(_) = self.pd_processed_ra_info {
5473                return 2;
5474            }
5475            if let Some(_) = self.dhcp6pd_state {
5476                return 1;
5477            }
5478            0
5479        }
5480    }
5481
5482    impl fidl::encoding::ValueTypeMarker for Dhcp6PdInfo {
5483        type Borrowed<'a> = &'a Self;
5484        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5485            value
5486        }
5487    }
5488
5489    unsafe impl fidl::encoding::TypeMarker for Dhcp6PdInfo {
5490        type Owned = Self;
5491
5492        #[inline(always)]
5493        fn inline_align(_context: fidl::encoding::Context) -> usize {
5494            8
5495        }
5496
5497        #[inline(always)]
5498        fn inline_size(_context: fidl::encoding::Context) -> usize {
5499            16
5500        }
5501    }
5502
5503    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dhcp6PdInfo, D>
5504        for &Dhcp6PdInfo
5505    {
5506        unsafe fn encode(
5507            self,
5508            encoder: &mut fidl::encoding::Encoder<'_, D>,
5509            offset: usize,
5510            mut depth: fidl::encoding::Depth,
5511        ) -> fidl::Result<()> {
5512            encoder.debug_check_bounds::<Dhcp6PdInfo>(offset);
5513            // Vector header
5514            let max_ordinal: u64 = self.max_ordinal_present();
5515            encoder.write_num(max_ordinal, offset);
5516            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5517            // Calling encoder.out_of_line_offset(0) is not allowed.
5518            if max_ordinal == 0 {
5519                return Ok(());
5520            }
5521            depth.increment()?;
5522            let envelope_size = 8;
5523            let bytes_len = max_ordinal as usize * envelope_size;
5524            #[allow(unused_variables)]
5525            let offset = encoder.out_of_line_offset(bytes_len);
5526            let mut _prev_end_offset: usize = 0;
5527            if 1 > max_ordinal {
5528                return Ok(());
5529            }
5530
5531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5532            // are envelope_size bytes.
5533            let cur_offset: usize = (1 - 1) * envelope_size;
5534
5535            // Zero reserved fields.
5536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5537
5538            // Safety:
5539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5541            //   envelope_size bytes, there is always sufficient room.
5542            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdState, D>(
5543                self.dhcp6pd_state
5544                    .as_ref()
5545                    .map(<Dhcp6PdState as fidl::encoding::ValueTypeMarker>::borrow),
5546                encoder,
5547                offset + cur_offset,
5548                depth,
5549            )?;
5550
5551            _prev_end_offset = cur_offset + envelope_size;
5552            if 2 > max_ordinal {
5553                return Ok(());
5554            }
5555
5556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5557            // are envelope_size bytes.
5558            let cur_offset: usize = (2 - 1) * envelope_size;
5559
5560            // Zero reserved fields.
5561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5562
5563            // Safety:
5564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5566            //   envelope_size bytes, there is always sufficient room.
5567            fidl::encoding::encode_in_envelope_optional::<PdProcessedRaInfo, D>(
5568                self.pd_processed_ra_info
5569                    .as_ref()
5570                    .map(<PdProcessedRaInfo as fidl::encoding::ValueTypeMarker>::borrow),
5571                encoder,
5572                offset + cur_offset,
5573                depth,
5574            )?;
5575
5576            _prev_end_offset = cur_offset + envelope_size;
5577            if 3 > max_ordinal {
5578                return Ok(());
5579            }
5580
5581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5582            // are envelope_size bytes.
5583            let cur_offset: usize = (3 - 1) * envelope_size;
5584
5585            // Zero reserved fields.
5586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5587
5588            // Safety:
5589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5591            //   envelope_size bytes, there is always sufficient room.
5592            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
5593                self.hashed_pd_prefix.as_ref().map(
5594                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
5595                ),
5596                encoder,
5597                offset + cur_offset,
5598                depth,
5599            )?;
5600
5601            _prev_end_offset = cur_offset + envelope_size;
5602
5603            Ok(())
5604        }
5605    }
5606
5607    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dhcp6PdInfo {
5608        #[inline(always)]
5609        fn new_empty() -> Self {
5610            Self::default()
5611        }
5612
5613        unsafe fn decode(
5614            &mut self,
5615            decoder: &mut fidl::encoding::Decoder<'_, D>,
5616            offset: usize,
5617            mut depth: fidl::encoding::Depth,
5618        ) -> fidl::Result<()> {
5619            decoder.debug_check_bounds::<Self>(offset);
5620            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5621                None => return Err(fidl::Error::NotNullable),
5622                Some(len) => len,
5623            };
5624            // Calling decoder.out_of_line_offset(0) is not allowed.
5625            if len == 0 {
5626                return Ok(());
5627            };
5628            depth.increment()?;
5629            let envelope_size = 8;
5630            let bytes_len = len * envelope_size;
5631            let offset = decoder.out_of_line_offset(bytes_len)?;
5632            // Decode the envelope for each type.
5633            let mut _next_ordinal_to_read = 0;
5634            let mut next_offset = offset;
5635            let end_offset = offset + bytes_len;
5636            _next_ordinal_to_read += 1;
5637            if next_offset >= end_offset {
5638                return Ok(());
5639            }
5640
5641            // Decode unknown envelopes for gaps in ordinals.
5642            while _next_ordinal_to_read < 1 {
5643                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5644                _next_ordinal_to_read += 1;
5645                next_offset += envelope_size;
5646            }
5647
5648            let next_out_of_line = decoder.next_out_of_line();
5649            let handles_before = decoder.remaining_handles();
5650            if let Some((inlined, num_bytes, num_handles)) =
5651                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5652            {
5653                let member_inline_size =
5654                    <Dhcp6PdState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5655                if inlined != (member_inline_size <= 4) {
5656                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5657                }
5658                let inner_offset;
5659                let mut inner_depth = depth.clone();
5660                if inlined {
5661                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5662                    inner_offset = next_offset;
5663                } else {
5664                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5665                    inner_depth.increment()?;
5666                }
5667                let val_ref =
5668                    self.dhcp6pd_state.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdState, D));
5669                fidl::decode!(Dhcp6PdState, D, val_ref, decoder, inner_offset, inner_depth)?;
5670                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5671                {
5672                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5673                }
5674                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5675                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5676                }
5677            }
5678
5679            next_offset += envelope_size;
5680            _next_ordinal_to_read += 1;
5681            if next_offset >= end_offset {
5682                return Ok(());
5683            }
5684
5685            // Decode unknown envelopes for gaps in ordinals.
5686            while _next_ordinal_to_read < 2 {
5687                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5688                _next_ordinal_to_read += 1;
5689                next_offset += envelope_size;
5690            }
5691
5692            let next_out_of_line = decoder.next_out_of_line();
5693            let handles_before = decoder.remaining_handles();
5694            if let Some((inlined, num_bytes, num_handles)) =
5695                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5696            {
5697                let member_inline_size =
5698                    <PdProcessedRaInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5699                if inlined != (member_inline_size <= 4) {
5700                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5701                }
5702                let inner_offset;
5703                let mut inner_depth = depth.clone();
5704                if inlined {
5705                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5706                    inner_offset = next_offset;
5707                } else {
5708                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5709                    inner_depth.increment()?;
5710                }
5711                let val_ref = self
5712                    .pd_processed_ra_info
5713                    .get_or_insert_with(|| fidl::new_empty!(PdProcessedRaInfo, D));
5714                fidl::decode!(PdProcessedRaInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
5715                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5716                {
5717                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5718                }
5719                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5720                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5721                }
5722            }
5723
5724            next_offset += envelope_size;
5725            _next_ordinal_to_read += 1;
5726            if next_offset >= end_offset {
5727                return Ok(());
5728            }
5729
5730            // Decode unknown envelopes for gaps in ordinals.
5731            while _next_ordinal_to_read < 3 {
5732                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5733                _next_ordinal_to_read += 1;
5734                next_offset += envelope_size;
5735            }
5736
5737            let next_out_of_line = decoder.next_out_of_line();
5738            let handles_before = decoder.remaining_handles();
5739            if let Some((inlined, num_bytes, num_handles)) =
5740                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5741            {
5742                let member_inline_size =
5743                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
5744                        decoder.context,
5745                    );
5746                if inlined != (member_inline_size <= 4) {
5747                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5748                }
5749                let inner_offset;
5750                let mut inner_depth = depth.clone();
5751                if inlined {
5752                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5753                    inner_offset = next_offset;
5754                } else {
5755                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5756                    inner_depth.increment()?;
5757                }
5758                let val_ref = self
5759                    .hashed_pd_prefix
5760                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
5761                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
5762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5763                {
5764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5765                }
5766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5768                }
5769            }
5770
5771            next_offset += envelope_size;
5772
5773            // Decode the remaining unknown envelopes.
5774            while next_offset < end_offset {
5775                _next_ordinal_to_read += 1;
5776                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5777                next_offset += envelope_size;
5778            }
5779
5780            Ok(())
5781        }
5782    }
5783
5784    impl DnssdCounters {
5785        #[inline(always)]
5786        fn max_ordinal_present(&self) -> u64 {
5787            if let Some(_) = self.upstream_dns_counters {
5788                return 8;
5789            }
5790            if let Some(_) = self.resolved_by_srp {
5791                return 7;
5792            }
5793            if let Some(_) = self.other_response {
5794                return 6;
5795            }
5796            if let Some(_) = self.not_implemented_response {
5797                return 5;
5798            }
5799            if let Some(_) = self.name_error_response {
5800                return 4;
5801            }
5802            if let Some(_) = self.format_error_response {
5803                return 3;
5804            }
5805            if let Some(_) = self.server_failure_response {
5806                return 2;
5807            }
5808            if let Some(_) = self.success_response {
5809                return 1;
5810            }
5811            0
5812        }
5813    }
5814
5815    impl fidl::encoding::ValueTypeMarker for DnssdCounters {
5816        type Borrowed<'a> = &'a Self;
5817        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5818            value
5819        }
5820    }
5821
5822    unsafe impl fidl::encoding::TypeMarker for DnssdCounters {
5823        type Owned = Self;
5824
5825        #[inline(always)]
5826        fn inline_align(_context: fidl::encoding::Context) -> usize {
5827            8
5828        }
5829
5830        #[inline(always)]
5831        fn inline_size(_context: fidl::encoding::Context) -> usize {
5832            16
5833        }
5834    }
5835
5836    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DnssdCounters, D>
5837        for &DnssdCounters
5838    {
5839        unsafe fn encode(
5840            self,
5841            encoder: &mut fidl::encoding::Encoder<'_, D>,
5842            offset: usize,
5843            mut depth: fidl::encoding::Depth,
5844        ) -> fidl::Result<()> {
5845            encoder.debug_check_bounds::<DnssdCounters>(offset);
5846            // Vector header
5847            let max_ordinal: u64 = self.max_ordinal_present();
5848            encoder.write_num(max_ordinal, offset);
5849            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5850            // Calling encoder.out_of_line_offset(0) is not allowed.
5851            if max_ordinal == 0 {
5852                return Ok(());
5853            }
5854            depth.increment()?;
5855            let envelope_size = 8;
5856            let bytes_len = max_ordinal as usize * envelope_size;
5857            #[allow(unused_variables)]
5858            let offset = encoder.out_of_line_offset(bytes_len);
5859            let mut _prev_end_offset: usize = 0;
5860            if 1 > max_ordinal {
5861                return Ok(());
5862            }
5863
5864            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5865            // are envelope_size bytes.
5866            let cur_offset: usize = (1 - 1) * envelope_size;
5867
5868            // Zero reserved fields.
5869            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5870
5871            // Safety:
5872            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5873            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5874            //   envelope_size bytes, there is always sufficient room.
5875            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5876                self.success_response
5877                    .as_ref()
5878                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5879                encoder,
5880                offset + cur_offset,
5881                depth,
5882            )?;
5883
5884            _prev_end_offset = cur_offset + envelope_size;
5885            if 2 > max_ordinal {
5886                return Ok(());
5887            }
5888
5889            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5890            // are envelope_size bytes.
5891            let cur_offset: usize = (2 - 1) * envelope_size;
5892
5893            // Zero reserved fields.
5894            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5895
5896            // Safety:
5897            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5898            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5899            //   envelope_size bytes, there is always sufficient room.
5900            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5901                self.server_failure_response
5902                    .as_ref()
5903                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5904                encoder,
5905                offset + cur_offset,
5906                depth,
5907            )?;
5908
5909            _prev_end_offset = cur_offset + envelope_size;
5910            if 3 > max_ordinal {
5911                return Ok(());
5912            }
5913
5914            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5915            // are envelope_size bytes.
5916            let cur_offset: usize = (3 - 1) * envelope_size;
5917
5918            // Zero reserved fields.
5919            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5920
5921            // Safety:
5922            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5923            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5924            //   envelope_size bytes, there is always sufficient room.
5925            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5926                self.format_error_response
5927                    .as_ref()
5928                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5929                encoder,
5930                offset + cur_offset,
5931                depth,
5932            )?;
5933
5934            _prev_end_offset = cur_offset + envelope_size;
5935            if 4 > max_ordinal {
5936                return Ok(());
5937            }
5938
5939            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5940            // are envelope_size bytes.
5941            let cur_offset: usize = (4 - 1) * envelope_size;
5942
5943            // Zero reserved fields.
5944            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5945
5946            // Safety:
5947            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5948            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5949            //   envelope_size bytes, there is always sufficient room.
5950            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5951                self.name_error_response
5952                    .as_ref()
5953                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5954                encoder,
5955                offset + cur_offset,
5956                depth,
5957            )?;
5958
5959            _prev_end_offset = cur_offset + envelope_size;
5960            if 5 > max_ordinal {
5961                return Ok(());
5962            }
5963
5964            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5965            // are envelope_size bytes.
5966            let cur_offset: usize = (5 - 1) * envelope_size;
5967
5968            // Zero reserved fields.
5969            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5970
5971            // Safety:
5972            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5973            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5974            //   envelope_size bytes, there is always sufficient room.
5975            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5976                self.not_implemented_response
5977                    .as_ref()
5978                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5979                encoder,
5980                offset + cur_offset,
5981                depth,
5982            )?;
5983
5984            _prev_end_offset = cur_offset + envelope_size;
5985            if 6 > max_ordinal {
5986                return Ok(());
5987            }
5988
5989            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5990            // are envelope_size bytes.
5991            let cur_offset: usize = (6 - 1) * envelope_size;
5992
5993            // Zero reserved fields.
5994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5995
5996            // Safety:
5997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5999            //   envelope_size bytes, there is always sufficient room.
6000            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6001                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6002                encoder,
6003                offset + cur_offset,
6004                depth,
6005            )?;
6006
6007            _prev_end_offset = cur_offset + envelope_size;
6008            if 7 > max_ordinal {
6009                return Ok(());
6010            }
6011
6012            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6013            // are envelope_size bytes.
6014            let cur_offset: usize = (7 - 1) * envelope_size;
6015
6016            // Zero reserved fields.
6017            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6018
6019            // Safety:
6020            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6021            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6022            //   envelope_size bytes, there is always sufficient room.
6023            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6024                self.resolved_by_srp.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6025                encoder,
6026                offset + cur_offset,
6027                depth,
6028            )?;
6029
6030            _prev_end_offset = cur_offset + envelope_size;
6031            if 8 > max_ordinal {
6032                return Ok(());
6033            }
6034
6035            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6036            // are envelope_size bytes.
6037            let cur_offset: usize = (8 - 1) * envelope_size;
6038
6039            // Zero reserved fields.
6040            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6041
6042            // Safety:
6043            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6044            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6045            //   envelope_size bytes, there is always sufficient room.
6046            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsCounters, D>(
6047                self.upstream_dns_counters
6048                    .as_ref()
6049                    .map(<UpstreamDnsCounters as fidl::encoding::ValueTypeMarker>::borrow),
6050                encoder,
6051                offset + cur_offset,
6052                depth,
6053            )?;
6054
6055            _prev_end_offset = cur_offset + envelope_size;
6056
6057            Ok(())
6058        }
6059    }
6060
6061    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DnssdCounters {
6062        #[inline(always)]
6063        fn new_empty() -> Self {
6064            Self::default()
6065        }
6066
6067        unsafe fn decode(
6068            &mut self,
6069            decoder: &mut fidl::encoding::Decoder<'_, D>,
6070            offset: usize,
6071            mut depth: fidl::encoding::Depth,
6072        ) -> fidl::Result<()> {
6073            decoder.debug_check_bounds::<Self>(offset);
6074            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6075                None => return Err(fidl::Error::NotNullable),
6076                Some(len) => len,
6077            };
6078            // Calling decoder.out_of_line_offset(0) is not allowed.
6079            if len == 0 {
6080                return Ok(());
6081            };
6082            depth.increment()?;
6083            let envelope_size = 8;
6084            let bytes_len = len * envelope_size;
6085            let offset = decoder.out_of_line_offset(bytes_len)?;
6086            // Decode the envelope for each type.
6087            let mut _next_ordinal_to_read = 0;
6088            let mut next_offset = offset;
6089            let end_offset = offset + bytes_len;
6090            _next_ordinal_to_read += 1;
6091            if next_offset >= end_offset {
6092                return Ok(());
6093            }
6094
6095            // Decode unknown envelopes for gaps in ordinals.
6096            while _next_ordinal_to_read < 1 {
6097                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6098                _next_ordinal_to_read += 1;
6099                next_offset += envelope_size;
6100            }
6101
6102            let next_out_of_line = decoder.next_out_of_line();
6103            let handles_before = decoder.remaining_handles();
6104            if let Some((inlined, num_bytes, num_handles)) =
6105                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6106            {
6107                let member_inline_size =
6108                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6109                if inlined != (member_inline_size <= 4) {
6110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6111                }
6112                let inner_offset;
6113                let mut inner_depth = depth.clone();
6114                if inlined {
6115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6116                    inner_offset = next_offset;
6117                } else {
6118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6119                    inner_depth.increment()?;
6120                }
6121                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6122                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6124                {
6125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6126                }
6127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6129                }
6130            }
6131
6132            next_offset += envelope_size;
6133            _next_ordinal_to_read += 1;
6134            if next_offset >= end_offset {
6135                return Ok(());
6136            }
6137
6138            // Decode unknown envelopes for gaps in ordinals.
6139            while _next_ordinal_to_read < 2 {
6140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6141                _next_ordinal_to_read += 1;
6142                next_offset += envelope_size;
6143            }
6144
6145            let next_out_of_line = decoder.next_out_of_line();
6146            let handles_before = decoder.remaining_handles();
6147            if let Some((inlined, num_bytes, num_handles)) =
6148                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6149            {
6150                let member_inline_size =
6151                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6152                if inlined != (member_inline_size <= 4) {
6153                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6154                }
6155                let inner_offset;
6156                let mut inner_depth = depth.clone();
6157                if inlined {
6158                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6159                    inner_offset = next_offset;
6160                } else {
6161                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6162                    inner_depth.increment()?;
6163                }
6164                let val_ref =
6165                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6166                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6168                {
6169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6170                }
6171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6173                }
6174            }
6175
6176            next_offset += envelope_size;
6177            _next_ordinal_to_read += 1;
6178            if next_offset >= end_offset {
6179                return Ok(());
6180            }
6181
6182            // Decode unknown envelopes for gaps in ordinals.
6183            while _next_ordinal_to_read < 3 {
6184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6185                _next_ordinal_to_read += 1;
6186                next_offset += envelope_size;
6187            }
6188
6189            let next_out_of_line = decoder.next_out_of_line();
6190            let handles_before = decoder.remaining_handles();
6191            if let Some((inlined, num_bytes, num_handles)) =
6192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6193            {
6194                let member_inline_size =
6195                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6196                if inlined != (member_inline_size <= 4) {
6197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6198                }
6199                let inner_offset;
6200                let mut inner_depth = depth.clone();
6201                if inlined {
6202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6203                    inner_offset = next_offset;
6204                } else {
6205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6206                    inner_depth.increment()?;
6207                }
6208                let val_ref =
6209                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6210                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6211                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6212                {
6213                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6214                }
6215                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6216                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6217                }
6218            }
6219
6220            next_offset += envelope_size;
6221            _next_ordinal_to_read += 1;
6222            if next_offset >= end_offset {
6223                return Ok(());
6224            }
6225
6226            // Decode unknown envelopes for gaps in ordinals.
6227            while _next_ordinal_to_read < 4 {
6228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6229                _next_ordinal_to_read += 1;
6230                next_offset += envelope_size;
6231            }
6232
6233            let next_out_of_line = decoder.next_out_of_line();
6234            let handles_before = decoder.remaining_handles();
6235            if let Some((inlined, num_bytes, num_handles)) =
6236                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6237            {
6238                let member_inline_size =
6239                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6240                if inlined != (member_inline_size <= 4) {
6241                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6242                }
6243                let inner_offset;
6244                let mut inner_depth = depth.clone();
6245                if inlined {
6246                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6247                    inner_offset = next_offset;
6248                } else {
6249                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6250                    inner_depth.increment()?;
6251                }
6252                let val_ref =
6253                    self.name_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6254                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6255                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6256                {
6257                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6258                }
6259                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6260                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6261                }
6262            }
6263
6264            next_offset += envelope_size;
6265            _next_ordinal_to_read += 1;
6266            if next_offset >= end_offset {
6267                return Ok(());
6268            }
6269
6270            // Decode unknown envelopes for gaps in ordinals.
6271            while _next_ordinal_to_read < 5 {
6272                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6273                _next_ordinal_to_read += 1;
6274                next_offset += envelope_size;
6275            }
6276
6277            let next_out_of_line = decoder.next_out_of_line();
6278            let handles_before = decoder.remaining_handles();
6279            if let Some((inlined, num_bytes, num_handles)) =
6280                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6281            {
6282                let member_inline_size =
6283                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6284                if inlined != (member_inline_size <= 4) {
6285                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6286                }
6287                let inner_offset;
6288                let mut inner_depth = depth.clone();
6289                if inlined {
6290                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6291                    inner_offset = next_offset;
6292                } else {
6293                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6294                    inner_depth.increment()?;
6295                }
6296                let val_ref =
6297                    self.not_implemented_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6298                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6300                {
6301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6302                }
6303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6305                }
6306            }
6307
6308            next_offset += envelope_size;
6309            _next_ordinal_to_read += 1;
6310            if next_offset >= end_offset {
6311                return Ok(());
6312            }
6313
6314            // Decode unknown envelopes for gaps in ordinals.
6315            while _next_ordinal_to_read < 6 {
6316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6317                _next_ordinal_to_read += 1;
6318                next_offset += envelope_size;
6319            }
6320
6321            let next_out_of_line = decoder.next_out_of_line();
6322            let handles_before = decoder.remaining_handles();
6323            if let Some((inlined, num_bytes, num_handles)) =
6324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6325            {
6326                let member_inline_size =
6327                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6328                if inlined != (member_inline_size <= 4) {
6329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6330                }
6331                let inner_offset;
6332                let mut inner_depth = depth.clone();
6333                if inlined {
6334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6335                    inner_offset = next_offset;
6336                } else {
6337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6338                    inner_depth.increment()?;
6339                }
6340                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
6341                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6342                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6343                {
6344                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6345                }
6346                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6347                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6348                }
6349            }
6350
6351            next_offset += envelope_size;
6352            _next_ordinal_to_read += 1;
6353            if next_offset >= end_offset {
6354                return Ok(());
6355            }
6356
6357            // Decode unknown envelopes for gaps in ordinals.
6358            while _next_ordinal_to_read < 7 {
6359                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6360                _next_ordinal_to_read += 1;
6361                next_offset += envelope_size;
6362            }
6363
6364            let next_out_of_line = decoder.next_out_of_line();
6365            let handles_before = decoder.remaining_handles();
6366            if let Some((inlined, num_bytes, num_handles)) =
6367                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6368            {
6369                let member_inline_size =
6370                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6371                if inlined != (member_inline_size <= 4) {
6372                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6373                }
6374                let inner_offset;
6375                let mut inner_depth = depth.clone();
6376                if inlined {
6377                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6378                    inner_offset = next_offset;
6379                } else {
6380                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6381                    inner_depth.increment()?;
6382                }
6383                let val_ref = self.resolved_by_srp.get_or_insert_with(|| fidl::new_empty!(u32, D));
6384                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6385                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6386                {
6387                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6388                }
6389                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6390                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6391                }
6392            }
6393
6394            next_offset += envelope_size;
6395            _next_ordinal_to_read += 1;
6396            if next_offset >= end_offset {
6397                return Ok(());
6398            }
6399
6400            // Decode unknown envelopes for gaps in ordinals.
6401            while _next_ordinal_to_read < 8 {
6402                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6403                _next_ordinal_to_read += 1;
6404                next_offset += envelope_size;
6405            }
6406
6407            let next_out_of_line = decoder.next_out_of_line();
6408            let handles_before = decoder.remaining_handles();
6409            if let Some((inlined, num_bytes, num_handles)) =
6410                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6411            {
6412                let member_inline_size =
6413                    <UpstreamDnsCounters as fidl::encoding::TypeMarker>::inline_size(
6414                        decoder.context,
6415                    );
6416                if inlined != (member_inline_size <= 4) {
6417                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6418                }
6419                let inner_offset;
6420                let mut inner_depth = depth.clone();
6421                if inlined {
6422                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6423                    inner_offset = next_offset;
6424                } else {
6425                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6426                    inner_depth.increment()?;
6427                }
6428                let val_ref = self
6429                    .upstream_dns_counters
6430                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsCounters, D));
6431                fidl::decode!(UpstreamDnsCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
6432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6433                {
6434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6435                }
6436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6438                }
6439            }
6440
6441            next_offset += envelope_size;
6442
6443            // Decode the remaining unknown envelopes.
6444            while next_offset < end_offset {
6445                _next_ordinal_to_read += 1;
6446                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6447                next_offset += envelope_size;
6448            }
6449
6450            Ok(())
6451        }
6452    }
6453
6454    impl ExternalRoute {
6455        #[inline(always)]
6456        fn max_ordinal_present(&self) -> u64 {
6457            if let Some(_) = self.stable {
6458                return 3;
6459            }
6460            if let Some(_) = self.route_preference {
6461                return 2;
6462            }
6463            if let Some(_) = self.subnet {
6464                return 1;
6465            }
6466            0
6467        }
6468    }
6469
6470    impl fidl::encoding::ValueTypeMarker for ExternalRoute {
6471        type Borrowed<'a> = &'a Self;
6472        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6473            value
6474        }
6475    }
6476
6477    unsafe impl fidl::encoding::TypeMarker for ExternalRoute {
6478        type Owned = Self;
6479
6480        #[inline(always)]
6481        fn inline_align(_context: fidl::encoding::Context) -> usize {
6482            8
6483        }
6484
6485        #[inline(always)]
6486        fn inline_size(_context: fidl::encoding::Context) -> usize {
6487            16
6488        }
6489    }
6490
6491    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExternalRoute, D>
6492        for &ExternalRoute
6493    {
6494        unsafe fn encode(
6495            self,
6496            encoder: &mut fidl::encoding::Encoder<'_, D>,
6497            offset: usize,
6498            mut depth: fidl::encoding::Depth,
6499        ) -> fidl::Result<()> {
6500            encoder.debug_check_bounds::<ExternalRoute>(offset);
6501            // Vector header
6502            let max_ordinal: u64 = self.max_ordinal_present();
6503            encoder.write_num(max_ordinal, offset);
6504            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6505            // Calling encoder.out_of_line_offset(0) is not allowed.
6506            if max_ordinal == 0 {
6507                return Ok(());
6508            }
6509            depth.increment()?;
6510            let envelope_size = 8;
6511            let bytes_len = max_ordinal as usize * envelope_size;
6512            #[allow(unused_variables)]
6513            let offset = encoder.out_of_line_offset(bytes_len);
6514            let mut _prev_end_offset: usize = 0;
6515            if 1 > max_ordinal {
6516                return Ok(());
6517            }
6518
6519            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6520            // are envelope_size bytes.
6521            let cur_offset: usize = (1 - 1) * envelope_size;
6522
6523            // Zero reserved fields.
6524            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6525
6526            // Safety:
6527            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6528            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6529            //   envelope_size bytes, there is always sufficient room.
6530            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
6531            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
6532            encoder, offset + cur_offset, depth
6533        )?;
6534
6535            _prev_end_offset = cur_offset + envelope_size;
6536            if 2 > max_ordinal {
6537                return Ok(());
6538            }
6539
6540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6541            // are envelope_size bytes.
6542            let cur_offset: usize = (2 - 1) * envelope_size;
6543
6544            // Zero reserved fields.
6545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6546
6547            // Safety:
6548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6550            //   envelope_size bytes, there is always sufficient room.
6551            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
6552                self.route_preference
6553                    .as_ref()
6554                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
6555                encoder,
6556                offset + cur_offset,
6557                depth,
6558            )?;
6559
6560            _prev_end_offset = cur_offset + envelope_size;
6561            if 3 > max_ordinal {
6562                return Ok(());
6563            }
6564
6565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6566            // are envelope_size bytes.
6567            let cur_offset: usize = (3 - 1) * envelope_size;
6568
6569            // Zero reserved fields.
6570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6571
6572            // Safety:
6573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6575            //   envelope_size bytes, there is always sufficient room.
6576            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6577                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6578                encoder,
6579                offset + cur_offset,
6580                depth,
6581            )?;
6582
6583            _prev_end_offset = cur_offset + envelope_size;
6584
6585            Ok(())
6586        }
6587    }
6588
6589    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExternalRoute {
6590        #[inline(always)]
6591        fn new_empty() -> Self {
6592            Self::default()
6593        }
6594
6595        unsafe fn decode(
6596            &mut self,
6597            decoder: &mut fidl::encoding::Decoder<'_, D>,
6598            offset: usize,
6599            mut depth: fidl::encoding::Depth,
6600        ) -> fidl::Result<()> {
6601            decoder.debug_check_bounds::<Self>(offset);
6602            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6603                None => return Err(fidl::Error::NotNullable),
6604                Some(len) => len,
6605            };
6606            // Calling decoder.out_of_line_offset(0) is not allowed.
6607            if len == 0 {
6608                return Ok(());
6609            };
6610            depth.increment()?;
6611            let envelope_size = 8;
6612            let bytes_len = len * envelope_size;
6613            let offset = decoder.out_of_line_offset(bytes_len)?;
6614            // Decode the envelope for each type.
6615            let mut _next_ordinal_to_read = 0;
6616            let mut next_offset = offset;
6617            let end_offset = offset + bytes_len;
6618            _next_ordinal_to_read += 1;
6619            if next_offset >= end_offset {
6620                return Ok(());
6621            }
6622
6623            // Decode unknown envelopes for gaps in ordinals.
6624            while _next_ordinal_to_read < 1 {
6625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6626                _next_ordinal_to_read += 1;
6627                next_offset += envelope_size;
6628            }
6629
6630            let next_out_of_line = decoder.next_out_of_line();
6631            let handles_before = decoder.remaining_handles();
6632            if let Some((inlined, num_bytes, num_handles)) =
6633                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6634            {
6635                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6636                if inlined != (member_inline_size <= 4) {
6637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6638                }
6639                let inner_offset;
6640                let mut inner_depth = depth.clone();
6641                if inlined {
6642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6643                    inner_offset = next_offset;
6644                } else {
6645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6646                    inner_depth.increment()?;
6647                }
6648                let val_ref = self.subnet.get_or_insert_with(|| {
6649                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
6650                });
6651                fidl::decode!(
6652                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
6653                    D,
6654                    val_ref,
6655                    decoder,
6656                    inner_offset,
6657                    inner_depth
6658                )?;
6659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6660                {
6661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6662                }
6663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6665                }
6666            }
6667
6668            next_offset += envelope_size;
6669            _next_ordinal_to_read += 1;
6670            if next_offset >= end_offset {
6671                return Ok(());
6672            }
6673
6674            // Decode unknown envelopes for gaps in ordinals.
6675            while _next_ordinal_to_read < 2 {
6676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6677                _next_ordinal_to_read += 1;
6678                next_offset += envelope_size;
6679            }
6680
6681            let next_out_of_line = decoder.next_out_of_line();
6682            let handles_before = decoder.remaining_handles();
6683            if let Some((inlined, num_bytes, num_handles)) =
6684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6685            {
6686                let member_inline_size =
6687                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6688                if inlined != (member_inline_size <= 4) {
6689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6690                }
6691                let inner_offset;
6692                let mut inner_depth = depth.clone();
6693                if inlined {
6694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6695                    inner_offset = next_offset;
6696                } else {
6697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6698                    inner_depth.increment()?;
6699                }
6700                let val_ref = self
6701                    .route_preference
6702                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
6703                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
6704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6705                {
6706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6707                }
6708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6710                }
6711            }
6712
6713            next_offset += envelope_size;
6714            _next_ordinal_to_read += 1;
6715            if next_offset >= end_offset {
6716                return Ok(());
6717            }
6718
6719            // Decode unknown envelopes for gaps in ordinals.
6720            while _next_ordinal_to_read < 3 {
6721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6722                _next_ordinal_to_read += 1;
6723                next_offset += envelope_size;
6724            }
6725
6726            let next_out_of_line = decoder.next_out_of_line();
6727            let handles_before = decoder.remaining_handles();
6728            if let Some((inlined, num_bytes, num_handles)) =
6729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6730            {
6731                let member_inline_size =
6732                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6733                if inlined != (member_inline_size <= 4) {
6734                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6735                }
6736                let inner_offset;
6737                let mut inner_depth = depth.clone();
6738                if inlined {
6739                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6740                    inner_offset = next_offset;
6741                } else {
6742                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6743                    inner_depth.increment()?;
6744                }
6745                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6746                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6748                {
6749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6750                }
6751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6753                }
6754            }
6755
6756            next_offset += envelope_size;
6757
6758            // Decode the remaining unknown envelopes.
6759            while next_offset < end_offset {
6760                _next_ordinal_to_read += 1;
6761                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6762                next_offset += envelope_size;
6763            }
6764
6765            Ok(())
6766        }
6767    }
6768
6769    impl JoinerCommissioningParams {
6770        #[inline(always)]
6771        fn max_ordinal_present(&self) -> u64 {
6772            if let Some(_) = self.vendor_data_string {
6773                return 6;
6774            }
6775            if let Some(_) = self.vendor_sw_version {
6776                return 5;
6777            }
6778            if let Some(_) = self.vendor_model {
6779                return 4;
6780            }
6781            if let Some(_) = self.vendor_name {
6782                return 3;
6783            }
6784            if let Some(_) = self.provisioning_url {
6785                return 2;
6786            }
6787            if let Some(_) = self.pskd {
6788                return 1;
6789            }
6790            0
6791        }
6792    }
6793
6794    impl fidl::encoding::ValueTypeMarker for JoinerCommissioningParams {
6795        type Borrowed<'a> = &'a Self;
6796        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6797            value
6798        }
6799    }
6800
6801    unsafe impl fidl::encoding::TypeMarker for JoinerCommissioningParams {
6802        type Owned = Self;
6803
6804        #[inline(always)]
6805        fn inline_align(_context: fidl::encoding::Context) -> usize {
6806            8
6807        }
6808
6809        #[inline(always)]
6810        fn inline_size(_context: fidl::encoding::Context) -> usize {
6811            16
6812        }
6813    }
6814
6815    unsafe impl<D: fidl::encoding::ResourceDialect>
6816        fidl::encoding::Encode<JoinerCommissioningParams, D> for &JoinerCommissioningParams
6817    {
6818        unsafe fn encode(
6819            self,
6820            encoder: &mut fidl::encoding::Encoder<'_, D>,
6821            offset: usize,
6822            mut depth: fidl::encoding::Depth,
6823        ) -> fidl::Result<()> {
6824            encoder.debug_check_bounds::<JoinerCommissioningParams>(offset);
6825            // Vector header
6826            let max_ordinal: u64 = self.max_ordinal_present();
6827            encoder.write_num(max_ordinal, offset);
6828            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6829            // Calling encoder.out_of_line_offset(0) is not allowed.
6830            if max_ordinal == 0 {
6831                return Ok(());
6832            }
6833            depth.increment()?;
6834            let envelope_size = 8;
6835            let bytes_len = max_ordinal as usize * envelope_size;
6836            #[allow(unused_variables)]
6837            let offset = encoder.out_of_line_offset(bytes_len);
6838            let mut _prev_end_offset: usize = 0;
6839            if 1 > max_ordinal {
6840                return Ok(());
6841            }
6842
6843            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6844            // are envelope_size bytes.
6845            let cur_offset: usize = (1 - 1) * envelope_size;
6846
6847            // Zero reserved fields.
6848            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6849
6850            // Safety:
6851            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6852            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6853            //   envelope_size bytes, there is always sufficient room.
6854            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6855                self.pskd.as_ref().map(
6856                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6857                ),
6858                encoder,
6859                offset + cur_offset,
6860                depth,
6861            )?;
6862
6863            _prev_end_offset = cur_offset + envelope_size;
6864            if 2 > max_ordinal {
6865                return Ok(());
6866            }
6867
6868            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6869            // are envelope_size bytes.
6870            let cur_offset: usize = (2 - 1) * envelope_size;
6871
6872            // Zero reserved fields.
6873            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6874
6875            // Safety:
6876            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6877            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6878            //   envelope_size bytes, there is always sufficient room.
6879            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6880                self.provisioning_url.as_ref().map(
6881                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6882                ),
6883                encoder,
6884                offset + cur_offset,
6885                depth,
6886            )?;
6887
6888            _prev_end_offset = cur_offset + envelope_size;
6889            if 3 > max_ordinal {
6890                return Ok(());
6891            }
6892
6893            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6894            // are envelope_size bytes.
6895            let cur_offset: usize = (3 - 1) * envelope_size;
6896
6897            // Zero reserved fields.
6898            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6899
6900            // Safety:
6901            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6902            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6903            //   envelope_size bytes, there is always sufficient room.
6904            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6905                self.vendor_name.as_ref().map(
6906                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6907                ),
6908                encoder,
6909                offset + cur_offset,
6910                depth,
6911            )?;
6912
6913            _prev_end_offset = cur_offset + envelope_size;
6914            if 4 > max_ordinal {
6915                return Ok(());
6916            }
6917
6918            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6919            // are envelope_size bytes.
6920            let cur_offset: usize = (4 - 1) * envelope_size;
6921
6922            // Zero reserved fields.
6923            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6924
6925            // Safety:
6926            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6927            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6928            //   envelope_size bytes, there is always sufficient room.
6929            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
6930                self.vendor_model.as_ref().map(
6931                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
6932                ),
6933                encoder,
6934                offset + cur_offset,
6935                depth,
6936            )?;
6937
6938            _prev_end_offset = cur_offset + envelope_size;
6939            if 5 > max_ordinal {
6940                return Ok(());
6941            }
6942
6943            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6944            // are envelope_size bytes.
6945            let cur_offset: usize = (5 - 1) * envelope_size;
6946
6947            // Zero reserved fields.
6948            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6949
6950            // Safety:
6951            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6952            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6953            //   envelope_size bytes, there is always sufficient room.
6954            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<16>, D>(
6955                self.vendor_sw_version.as_ref().map(
6956                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow,
6957                ),
6958                encoder,
6959                offset + cur_offset,
6960                depth,
6961            )?;
6962
6963            _prev_end_offset = cur_offset + envelope_size;
6964            if 6 > max_ordinal {
6965                return Ok(());
6966            }
6967
6968            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6969            // are envelope_size bytes.
6970            let cur_offset: usize = (6 - 1) * envelope_size;
6971
6972            // Zero reserved fields.
6973            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6974
6975            // Safety:
6976            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6977            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6978            //   envelope_size bytes, there is always sufficient room.
6979            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
6980                self.vendor_data_string.as_ref().map(
6981                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
6982                ),
6983                encoder,
6984                offset + cur_offset,
6985                depth,
6986            )?;
6987
6988            _prev_end_offset = cur_offset + envelope_size;
6989
6990            Ok(())
6991        }
6992    }
6993
6994    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6995        for JoinerCommissioningParams
6996    {
6997        #[inline(always)]
6998        fn new_empty() -> Self {
6999            Self::default()
7000        }
7001
7002        unsafe fn decode(
7003            &mut self,
7004            decoder: &mut fidl::encoding::Decoder<'_, D>,
7005            offset: usize,
7006            mut depth: fidl::encoding::Depth,
7007        ) -> fidl::Result<()> {
7008            decoder.debug_check_bounds::<Self>(offset);
7009            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7010                None => return Err(fidl::Error::NotNullable),
7011                Some(len) => len,
7012            };
7013            // Calling decoder.out_of_line_offset(0) is not allowed.
7014            if len == 0 {
7015                return Ok(());
7016            };
7017            depth.increment()?;
7018            let envelope_size = 8;
7019            let bytes_len = len * envelope_size;
7020            let offset = decoder.out_of_line_offset(bytes_len)?;
7021            // Decode the envelope for each type.
7022            let mut _next_ordinal_to_read = 0;
7023            let mut next_offset = offset;
7024            let end_offset = offset + bytes_len;
7025            _next_ordinal_to_read += 1;
7026            if next_offset >= end_offset {
7027                return Ok(());
7028            }
7029
7030            // Decode unknown envelopes for gaps in ordinals.
7031            while _next_ordinal_to_read < 1 {
7032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7033                _next_ordinal_to_read += 1;
7034                next_offset += envelope_size;
7035            }
7036
7037            let next_out_of_line = decoder.next_out_of_line();
7038            let handles_before = decoder.remaining_handles();
7039            if let Some((inlined, num_bytes, num_handles)) =
7040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7041            {
7042                let member_inline_size =
7043                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7044                        decoder.context,
7045                    );
7046                if inlined != (member_inline_size <= 4) {
7047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7048                }
7049                let inner_offset;
7050                let mut inner_depth = depth.clone();
7051                if inlined {
7052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7053                    inner_offset = next_offset;
7054                } else {
7055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7056                    inner_depth.increment()?;
7057                }
7058                let val_ref = self
7059                    .pskd
7060                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7061                fidl::decode!(
7062                    fidl::encoding::BoundedString<32>,
7063                    D,
7064                    val_ref,
7065                    decoder,
7066                    inner_offset,
7067                    inner_depth
7068                )?;
7069                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7070                {
7071                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7072                }
7073                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7074                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7075                }
7076            }
7077
7078            next_offset += envelope_size;
7079            _next_ordinal_to_read += 1;
7080            if next_offset >= end_offset {
7081                return Ok(());
7082            }
7083
7084            // Decode unknown envelopes for gaps in ordinals.
7085            while _next_ordinal_to_read < 2 {
7086                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7087                _next_ordinal_to_read += 1;
7088                next_offset += envelope_size;
7089            }
7090
7091            let next_out_of_line = decoder.next_out_of_line();
7092            let handles_before = decoder.remaining_handles();
7093            if let Some((inlined, num_bytes, num_handles)) =
7094                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7095            {
7096                let member_inline_size =
7097                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7098                        decoder.context,
7099                    );
7100                if inlined != (member_inline_size <= 4) {
7101                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7102                }
7103                let inner_offset;
7104                let mut inner_depth = depth.clone();
7105                if inlined {
7106                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7107                    inner_offset = next_offset;
7108                } else {
7109                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7110                    inner_depth.increment()?;
7111                }
7112                let val_ref = self
7113                    .provisioning_url
7114                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7115                fidl::decode!(
7116                    fidl::encoding::BoundedString<64>,
7117                    D,
7118                    val_ref,
7119                    decoder,
7120                    inner_offset,
7121                    inner_depth
7122                )?;
7123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7124                {
7125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7126                }
7127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7129                }
7130            }
7131
7132            next_offset += envelope_size;
7133            _next_ordinal_to_read += 1;
7134            if next_offset >= end_offset {
7135                return Ok(());
7136            }
7137
7138            // Decode unknown envelopes for gaps in ordinals.
7139            while _next_ordinal_to_read < 3 {
7140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7141                _next_ordinal_to_read += 1;
7142                next_offset += envelope_size;
7143            }
7144
7145            let next_out_of_line = decoder.next_out_of_line();
7146            let handles_before = decoder.remaining_handles();
7147            if let Some((inlined, num_bytes, num_handles)) =
7148                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7149            {
7150                let member_inline_size =
7151                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7152                        decoder.context,
7153                    );
7154                if inlined != (member_inline_size <= 4) {
7155                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7156                }
7157                let inner_offset;
7158                let mut inner_depth = depth.clone();
7159                if inlined {
7160                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7161                    inner_offset = next_offset;
7162                } else {
7163                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7164                    inner_depth.increment()?;
7165                }
7166                let val_ref = self
7167                    .vendor_name
7168                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7169                fidl::decode!(
7170                    fidl::encoding::BoundedString<32>,
7171                    D,
7172                    val_ref,
7173                    decoder,
7174                    inner_offset,
7175                    inner_depth
7176                )?;
7177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7178                {
7179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7180                }
7181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7183                }
7184            }
7185
7186            next_offset += envelope_size;
7187            _next_ordinal_to_read += 1;
7188            if next_offset >= end_offset {
7189                return Ok(());
7190            }
7191
7192            // Decode unknown envelopes for gaps in ordinals.
7193            while _next_ordinal_to_read < 4 {
7194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7195                _next_ordinal_to_read += 1;
7196                next_offset += envelope_size;
7197            }
7198
7199            let next_out_of_line = decoder.next_out_of_line();
7200            let handles_before = decoder.remaining_handles();
7201            if let Some((inlined, num_bytes, num_handles)) =
7202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7203            {
7204                let member_inline_size =
7205                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
7206                        decoder.context,
7207                    );
7208                if inlined != (member_inline_size <= 4) {
7209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7210                }
7211                let inner_offset;
7212                let mut inner_depth = depth.clone();
7213                if inlined {
7214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7215                    inner_offset = next_offset;
7216                } else {
7217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7218                    inner_depth.increment()?;
7219                }
7220                let val_ref = self
7221                    .vendor_model
7222                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
7223                fidl::decode!(
7224                    fidl::encoding::BoundedString<32>,
7225                    D,
7226                    val_ref,
7227                    decoder,
7228                    inner_offset,
7229                    inner_depth
7230                )?;
7231                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7232                {
7233                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7234                }
7235                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7236                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7237                }
7238            }
7239
7240            next_offset += envelope_size;
7241            _next_ordinal_to_read += 1;
7242            if next_offset >= end_offset {
7243                return Ok(());
7244            }
7245
7246            // Decode unknown envelopes for gaps in ordinals.
7247            while _next_ordinal_to_read < 5 {
7248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7249                _next_ordinal_to_read += 1;
7250                next_offset += envelope_size;
7251            }
7252
7253            let next_out_of_line = decoder.next_out_of_line();
7254            let handles_before = decoder.remaining_handles();
7255            if let Some((inlined, num_bytes, num_handles)) =
7256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7257            {
7258                let member_inline_size =
7259                    <fidl::encoding::BoundedString<16> as fidl::encoding::TypeMarker>::inline_size(
7260                        decoder.context,
7261                    );
7262                if inlined != (member_inline_size <= 4) {
7263                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7264                }
7265                let inner_offset;
7266                let mut inner_depth = depth.clone();
7267                if inlined {
7268                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7269                    inner_offset = next_offset;
7270                } else {
7271                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7272                    inner_depth.increment()?;
7273                }
7274                let val_ref = self
7275                    .vendor_sw_version
7276                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<16>, D));
7277                fidl::decode!(
7278                    fidl::encoding::BoundedString<16>,
7279                    D,
7280                    val_ref,
7281                    decoder,
7282                    inner_offset,
7283                    inner_depth
7284                )?;
7285                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7286                {
7287                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7288                }
7289                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7290                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7291                }
7292            }
7293
7294            next_offset += envelope_size;
7295            _next_ordinal_to_read += 1;
7296            if next_offset >= end_offset {
7297                return Ok(());
7298            }
7299
7300            // Decode unknown envelopes for gaps in ordinals.
7301            while _next_ordinal_to_read < 6 {
7302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7303                _next_ordinal_to_read += 1;
7304                next_offset += envelope_size;
7305            }
7306
7307            let next_out_of_line = decoder.next_out_of_line();
7308            let handles_before = decoder.remaining_handles();
7309            if let Some((inlined, num_bytes, num_handles)) =
7310                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7311            {
7312                let member_inline_size =
7313                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
7314                        decoder.context,
7315                    );
7316                if inlined != (member_inline_size <= 4) {
7317                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7318                }
7319                let inner_offset;
7320                let mut inner_depth = depth.clone();
7321                if inlined {
7322                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7323                    inner_offset = next_offset;
7324                } else {
7325                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7326                    inner_depth.increment()?;
7327                }
7328                let val_ref = self
7329                    .vendor_data_string
7330                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
7331                fidl::decode!(
7332                    fidl::encoding::BoundedString<64>,
7333                    D,
7334                    val_ref,
7335                    decoder,
7336                    inner_offset,
7337                    inner_depth
7338                )?;
7339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7340                {
7341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7342                }
7343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7345                }
7346            }
7347
7348            next_offset += envelope_size;
7349
7350            // Decode the remaining unknown envelopes.
7351            while next_offset < end_offset {
7352                _next_ordinal_to_read += 1;
7353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7354                next_offset += envelope_size;
7355            }
7356
7357            Ok(())
7358        }
7359    }
7360
7361    impl LeaderData {
7362        #[inline(always)]
7363        fn max_ordinal_present(&self) -> u64 {
7364            if let Some(_) = self.router_id {
7365                return 5;
7366            }
7367            if let Some(_) = self.stable_network_data_version {
7368                return 4;
7369            }
7370            if let Some(_) = self.network_data_version {
7371                return 3;
7372            }
7373            if let Some(_) = self.weight {
7374                return 2;
7375            }
7376            if let Some(_) = self.partition_id {
7377                return 1;
7378            }
7379            0
7380        }
7381    }
7382
7383    impl fidl::encoding::ValueTypeMarker for LeaderData {
7384        type Borrowed<'a> = &'a Self;
7385        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7386            value
7387        }
7388    }
7389
7390    unsafe impl fidl::encoding::TypeMarker for LeaderData {
7391        type Owned = Self;
7392
7393        #[inline(always)]
7394        fn inline_align(_context: fidl::encoding::Context) -> usize {
7395            8
7396        }
7397
7398        #[inline(always)]
7399        fn inline_size(_context: fidl::encoding::Context) -> usize {
7400            16
7401        }
7402    }
7403
7404    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeaderData, D>
7405        for &LeaderData
7406    {
7407        unsafe fn encode(
7408            self,
7409            encoder: &mut fidl::encoding::Encoder<'_, D>,
7410            offset: usize,
7411            mut depth: fidl::encoding::Depth,
7412        ) -> fidl::Result<()> {
7413            encoder.debug_check_bounds::<LeaderData>(offset);
7414            // Vector header
7415            let max_ordinal: u64 = self.max_ordinal_present();
7416            encoder.write_num(max_ordinal, offset);
7417            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7418            // Calling encoder.out_of_line_offset(0) is not allowed.
7419            if max_ordinal == 0 {
7420                return Ok(());
7421            }
7422            depth.increment()?;
7423            let envelope_size = 8;
7424            let bytes_len = max_ordinal as usize * envelope_size;
7425            #[allow(unused_variables)]
7426            let offset = encoder.out_of_line_offset(bytes_len);
7427            let mut _prev_end_offset: usize = 0;
7428            if 1 > max_ordinal {
7429                return Ok(());
7430            }
7431
7432            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7433            // are envelope_size bytes.
7434            let cur_offset: usize = (1 - 1) * envelope_size;
7435
7436            // Zero reserved fields.
7437            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7438
7439            // Safety:
7440            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7441            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7442            //   envelope_size bytes, there is always sufficient room.
7443            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7444                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7445                encoder,
7446                offset + cur_offset,
7447                depth,
7448            )?;
7449
7450            _prev_end_offset = cur_offset + envelope_size;
7451            if 2 > max_ordinal {
7452                return Ok(());
7453            }
7454
7455            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7456            // are envelope_size bytes.
7457            let cur_offset: usize = (2 - 1) * envelope_size;
7458
7459            // Zero reserved fields.
7460            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7461
7462            // Safety:
7463            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7464            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7465            //   envelope_size bytes, there is always sufficient room.
7466            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7467                self.weight.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7468                encoder,
7469                offset + cur_offset,
7470                depth,
7471            )?;
7472
7473            _prev_end_offset = cur_offset + envelope_size;
7474            if 3 > max_ordinal {
7475                return Ok(());
7476            }
7477
7478            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7479            // are envelope_size bytes.
7480            let cur_offset: usize = (3 - 1) * envelope_size;
7481
7482            // Zero reserved fields.
7483            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7484
7485            // Safety:
7486            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7487            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7488            //   envelope_size bytes, there is always sufficient room.
7489            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7490                self.network_data_version
7491                    .as_ref()
7492                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7493                encoder,
7494                offset + cur_offset,
7495                depth,
7496            )?;
7497
7498            _prev_end_offset = cur_offset + envelope_size;
7499            if 4 > max_ordinal {
7500                return Ok(());
7501            }
7502
7503            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7504            // are envelope_size bytes.
7505            let cur_offset: usize = (4 - 1) * envelope_size;
7506
7507            // Zero reserved fields.
7508            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7509
7510            // Safety:
7511            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7512            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7513            //   envelope_size bytes, there is always sufficient room.
7514            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7515                self.stable_network_data_version
7516                    .as_ref()
7517                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7518                encoder,
7519                offset + cur_offset,
7520                depth,
7521            )?;
7522
7523            _prev_end_offset = cur_offset + envelope_size;
7524            if 5 > max_ordinal {
7525                return Ok(());
7526            }
7527
7528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7529            // are envelope_size bytes.
7530            let cur_offset: usize = (5 - 1) * envelope_size;
7531
7532            // Zero reserved fields.
7533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7534
7535            // Safety:
7536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7538            //   envelope_size bytes, there is always sufficient room.
7539            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7540                self.router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7541                encoder,
7542                offset + cur_offset,
7543                depth,
7544            )?;
7545
7546            _prev_end_offset = cur_offset + envelope_size;
7547
7548            Ok(())
7549        }
7550    }
7551
7552    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeaderData {
7553        #[inline(always)]
7554        fn new_empty() -> Self {
7555            Self::default()
7556        }
7557
7558        unsafe fn decode(
7559            &mut self,
7560            decoder: &mut fidl::encoding::Decoder<'_, D>,
7561            offset: usize,
7562            mut depth: fidl::encoding::Depth,
7563        ) -> fidl::Result<()> {
7564            decoder.debug_check_bounds::<Self>(offset);
7565            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7566                None => return Err(fidl::Error::NotNullable),
7567                Some(len) => len,
7568            };
7569            // Calling decoder.out_of_line_offset(0) is not allowed.
7570            if len == 0 {
7571                return Ok(());
7572            };
7573            depth.increment()?;
7574            let envelope_size = 8;
7575            let bytes_len = len * envelope_size;
7576            let offset = decoder.out_of_line_offset(bytes_len)?;
7577            // Decode the envelope for each type.
7578            let mut _next_ordinal_to_read = 0;
7579            let mut next_offset = offset;
7580            let end_offset = offset + bytes_len;
7581            _next_ordinal_to_read += 1;
7582            if next_offset >= end_offset {
7583                return Ok(());
7584            }
7585
7586            // Decode unknown envelopes for gaps in ordinals.
7587            while _next_ordinal_to_read < 1 {
7588                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7589                _next_ordinal_to_read += 1;
7590                next_offset += envelope_size;
7591            }
7592
7593            let next_out_of_line = decoder.next_out_of_line();
7594            let handles_before = decoder.remaining_handles();
7595            if let Some((inlined, num_bytes, num_handles)) =
7596                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7597            {
7598                let member_inline_size =
7599                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7600                if inlined != (member_inline_size <= 4) {
7601                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7602                }
7603                let inner_offset;
7604                let mut inner_depth = depth.clone();
7605                if inlined {
7606                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7607                    inner_offset = next_offset;
7608                } else {
7609                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7610                    inner_depth.increment()?;
7611                }
7612                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
7613                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7614                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7615                {
7616                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7617                }
7618                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7619                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7620                }
7621            }
7622
7623            next_offset += envelope_size;
7624            _next_ordinal_to_read += 1;
7625            if next_offset >= end_offset {
7626                return Ok(());
7627            }
7628
7629            // Decode unknown envelopes for gaps in ordinals.
7630            while _next_ordinal_to_read < 2 {
7631                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7632                _next_ordinal_to_read += 1;
7633                next_offset += envelope_size;
7634            }
7635
7636            let next_out_of_line = decoder.next_out_of_line();
7637            let handles_before = decoder.remaining_handles();
7638            if let Some((inlined, num_bytes, num_handles)) =
7639                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7640            {
7641                let member_inline_size =
7642                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7643                if inlined != (member_inline_size <= 4) {
7644                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7645                }
7646                let inner_offset;
7647                let mut inner_depth = depth.clone();
7648                if inlined {
7649                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7650                    inner_offset = next_offset;
7651                } else {
7652                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7653                    inner_depth.increment()?;
7654                }
7655                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u8, D));
7656                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7657                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7658                {
7659                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7660                }
7661                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7662                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7663                }
7664            }
7665
7666            next_offset += envelope_size;
7667            _next_ordinal_to_read += 1;
7668            if next_offset >= end_offset {
7669                return Ok(());
7670            }
7671
7672            // Decode unknown envelopes for gaps in ordinals.
7673            while _next_ordinal_to_read < 3 {
7674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7675                _next_ordinal_to_read += 1;
7676                next_offset += envelope_size;
7677            }
7678
7679            let next_out_of_line = decoder.next_out_of_line();
7680            let handles_before = decoder.remaining_handles();
7681            if let Some((inlined, num_bytes, num_handles)) =
7682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7683            {
7684                let member_inline_size =
7685                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7686                if inlined != (member_inline_size <= 4) {
7687                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7688                }
7689                let inner_offset;
7690                let mut inner_depth = depth.clone();
7691                if inlined {
7692                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7693                    inner_offset = next_offset;
7694                } else {
7695                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7696                    inner_depth.increment()?;
7697                }
7698                let val_ref =
7699                    self.network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7700                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7702                {
7703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7704                }
7705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7707                }
7708            }
7709
7710            next_offset += envelope_size;
7711            _next_ordinal_to_read += 1;
7712            if next_offset >= end_offset {
7713                return Ok(());
7714            }
7715
7716            // Decode unknown envelopes for gaps in ordinals.
7717            while _next_ordinal_to_read < 4 {
7718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7719                _next_ordinal_to_read += 1;
7720                next_offset += envelope_size;
7721            }
7722
7723            let next_out_of_line = decoder.next_out_of_line();
7724            let handles_before = decoder.remaining_handles();
7725            if let Some((inlined, num_bytes, num_handles)) =
7726                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7727            {
7728                let member_inline_size =
7729                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7730                if inlined != (member_inline_size <= 4) {
7731                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7732                }
7733                let inner_offset;
7734                let mut inner_depth = depth.clone();
7735                if inlined {
7736                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7737                    inner_offset = next_offset;
7738                } else {
7739                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7740                    inner_depth.increment()?;
7741                }
7742                let val_ref =
7743                    self.stable_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7744                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7746                {
7747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7748                }
7749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7751                }
7752            }
7753
7754            next_offset += envelope_size;
7755            _next_ordinal_to_read += 1;
7756            if next_offset >= end_offset {
7757                return Ok(());
7758            }
7759
7760            // Decode unknown envelopes for gaps in ordinals.
7761            while _next_ordinal_to_read < 5 {
7762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7763                _next_ordinal_to_read += 1;
7764                next_offset += envelope_size;
7765            }
7766
7767            let next_out_of_line = decoder.next_out_of_line();
7768            let handles_before = decoder.remaining_handles();
7769            if let Some((inlined, num_bytes, num_handles)) =
7770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7771            {
7772                let member_inline_size =
7773                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7774                if inlined != (member_inline_size <= 4) {
7775                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7776                }
7777                let inner_offset;
7778                let mut inner_depth = depth.clone();
7779                if inlined {
7780                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7781                    inner_offset = next_offset;
7782                } else {
7783                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7784                    inner_depth.increment()?;
7785                }
7786                let val_ref = self.router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
7787                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7789                {
7790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7791                }
7792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7794                }
7795            }
7796
7797            next_offset += envelope_size;
7798
7799            // Decode the remaining unknown envelopes.
7800            while next_offset < end_offset {
7801                _next_ordinal_to_read += 1;
7802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7803                next_offset += envelope_size;
7804            }
7805
7806            Ok(())
7807        }
7808    }
7809
7810    impl LinkMetricsEntry {
7811        #[inline(always)]
7812        fn max_ordinal_present(&self) -> u64 {
7813            if let Some(_) = self.rssi {
7814                return 2;
7815            }
7816            if let Some(_) = self.link_margin {
7817                return 1;
7818            }
7819            0
7820        }
7821    }
7822
7823    impl fidl::encoding::ValueTypeMarker for LinkMetricsEntry {
7824        type Borrowed<'a> = &'a Self;
7825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7826            value
7827        }
7828    }
7829
7830    unsafe impl fidl::encoding::TypeMarker for LinkMetricsEntry {
7831        type Owned = Self;
7832
7833        #[inline(always)]
7834        fn inline_align(_context: fidl::encoding::Context) -> usize {
7835            8
7836        }
7837
7838        #[inline(always)]
7839        fn inline_size(_context: fidl::encoding::Context) -> usize {
7840            16
7841        }
7842    }
7843
7844    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinkMetricsEntry, D>
7845        for &LinkMetricsEntry
7846    {
7847        unsafe fn encode(
7848            self,
7849            encoder: &mut fidl::encoding::Encoder<'_, D>,
7850            offset: usize,
7851            mut depth: fidl::encoding::Depth,
7852        ) -> fidl::Result<()> {
7853            encoder.debug_check_bounds::<LinkMetricsEntry>(offset);
7854            // Vector header
7855            let max_ordinal: u64 = self.max_ordinal_present();
7856            encoder.write_num(max_ordinal, offset);
7857            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7858            // Calling encoder.out_of_line_offset(0) is not allowed.
7859            if max_ordinal == 0 {
7860                return Ok(());
7861            }
7862            depth.increment()?;
7863            let envelope_size = 8;
7864            let bytes_len = max_ordinal as usize * envelope_size;
7865            #[allow(unused_variables)]
7866            let offset = encoder.out_of_line_offset(bytes_len);
7867            let mut _prev_end_offset: usize = 0;
7868            if 1 > max_ordinal {
7869                return Ok(());
7870            }
7871
7872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7873            // are envelope_size bytes.
7874            let cur_offset: usize = (1 - 1) * envelope_size;
7875
7876            // Zero reserved fields.
7877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7878
7879            // Safety:
7880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7882            //   envelope_size bytes, there is always sufficient room.
7883            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7884                self.link_margin.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7885                encoder,
7886                offset + cur_offset,
7887                depth,
7888            )?;
7889
7890            _prev_end_offset = cur_offset + envelope_size;
7891            if 2 > max_ordinal {
7892                return Ok(());
7893            }
7894
7895            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7896            // are envelope_size bytes.
7897            let cur_offset: usize = (2 - 1) * envelope_size;
7898
7899            // Zero reserved fields.
7900            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7901
7902            // Safety:
7903            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7904            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7905            //   envelope_size bytes, there is always sufficient room.
7906            fidl::encoding::encode_in_envelope_optional::<i8, D>(
7907                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
7908                encoder,
7909                offset + cur_offset,
7910                depth,
7911            )?;
7912
7913            _prev_end_offset = cur_offset + envelope_size;
7914
7915            Ok(())
7916        }
7917    }
7918
7919    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinkMetricsEntry {
7920        #[inline(always)]
7921        fn new_empty() -> Self {
7922            Self::default()
7923        }
7924
7925        unsafe fn decode(
7926            &mut self,
7927            decoder: &mut fidl::encoding::Decoder<'_, D>,
7928            offset: usize,
7929            mut depth: fidl::encoding::Depth,
7930        ) -> fidl::Result<()> {
7931            decoder.debug_check_bounds::<Self>(offset);
7932            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7933                None => return Err(fidl::Error::NotNullable),
7934                Some(len) => len,
7935            };
7936            // Calling decoder.out_of_line_offset(0) is not allowed.
7937            if len == 0 {
7938                return Ok(());
7939            };
7940            depth.increment()?;
7941            let envelope_size = 8;
7942            let bytes_len = len * envelope_size;
7943            let offset = decoder.out_of_line_offset(bytes_len)?;
7944            // Decode the envelope for each type.
7945            let mut _next_ordinal_to_read = 0;
7946            let mut next_offset = offset;
7947            let end_offset = offset + bytes_len;
7948            _next_ordinal_to_read += 1;
7949            if next_offset >= end_offset {
7950                return Ok(());
7951            }
7952
7953            // Decode unknown envelopes for gaps in ordinals.
7954            while _next_ordinal_to_read < 1 {
7955                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7956                _next_ordinal_to_read += 1;
7957                next_offset += envelope_size;
7958            }
7959
7960            let next_out_of_line = decoder.next_out_of_line();
7961            let handles_before = decoder.remaining_handles();
7962            if let Some((inlined, num_bytes, num_handles)) =
7963                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7964            {
7965                let member_inline_size =
7966                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7967                if inlined != (member_inline_size <= 4) {
7968                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7969                }
7970                let inner_offset;
7971                let mut inner_depth = depth.clone();
7972                if inlined {
7973                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7974                    inner_offset = next_offset;
7975                } else {
7976                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7977                    inner_depth.increment()?;
7978                }
7979                let val_ref = self.link_margin.get_or_insert_with(|| fidl::new_empty!(u8, D));
7980                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7982                {
7983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7984                }
7985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7987                }
7988            }
7989
7990            next_offset += envelope_size;
7991            _next_ordinal_to_read += 1;
7992            if next_offset >= end_offset {
7993                return Ok(());
7994            }
7995
7996            // Decode unknown envelopes for gaps in ordinals.
7997            while _next_ordinal_to_read < 2 {
7998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7999                _next_ordinal_to_read += 1;
8000                next_offset += envelope_size;
8001            }
8002
8003            let next_out_of_line = decoder.next_out_of_line();
8004            let handles_before = decoder.remaining_handles();
8005            if let Some((inlined, num_bytes, num_handles)) =
8006                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8007            {
8008                let member_inline_size =
8009                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8010                if inlined != (member_inline_size <= 4) {
8011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8012                }
8013                let inner_offset;
8014                let mut inner_depth = depth.clone();
8015                if inlined {
8016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8017                    inner_offset = next_offset;
8018                } else {
8019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8020                    inner_depth.increment()?;
8021                }
8022                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
8023                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
8024                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8025                {
8026                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8027                }
8028                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8029                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8030                }
8031            }
8032
8033            next_offset += envelope_size;
8034
8035            // Decode the remaining unknown envelopes.
8036            while next_offset < end_offset {
8037                _next_ordinal_to_read += 1;
8038                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8039                next_offset += envelope_size;
8040            }
8041
8042            Ok(())
8043        }
8044    }
8045
8046    impl Nat64ErrorCounters {
8047        #[inline(always)]
8048        fn max_ordinal_present(&self) -> u64 {
8049            if let Some(_) = self.no_mapping {
8050                return 4;
8051            }
8052            if let Some(_) = self.unsupported_protocol {
8053                return 3;
8054            }
8055            if let Some(_) = self.illegal_packet {
8056                return 2;
8057            }
8058            if let Some(_) = self.unknown {
8059                return 1;
8060            }
8061            0
8062        }
8063    }
8064
8065    impl fidl::encoding::ValueTypeMarker for Nat64ErrorCounters {
8066        type Borrowed<'a> = &'a Self;
8067        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8068            value
8069        }
8070    }
8071
8072    unsafe impl fidl::encoding::TypeMarker for Nat64ErrorCounters {
8073        type Owned = Self;
8074
8075        #[inline(always)]
8076        fn inline_align(_context: fidl::encoding::Context) -> usize {
8077            8
8078        }
8079
8080        #[inline(always)]
8081        fn inline_size(_context: fidl::encoding::Context) -> usize {
8082            16
8083        }
8084    }
8085
8086    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ErrorCounters, D>
8087        for &Nat64ErrorCounters
8088    {
8089        unsafe fn encode(
8090            self,
8091            encoder: &mut fidl::encoding::Encoder<'_, D>,
8092            offset: usize,
8093            mut depth: fidl::encoding::Depth,
8094        ) -> fidl::Result<()> {
8095            encoder.debug_check_bounds::<Nat64ErrorCounters>(offset);
8096            // Vector header
8097            let max_ordinal: u64 = self.max_ordinal_present();
8098            encoder.write_num(max_ordinal, offset);
8099            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8100            // Calling encoder.out_of_line_offset(0) is not allowed.
8101            if max_ordinal == 0 {
8102                return Ok(());
8103            }
8104            depth.increment()?;
8105            let envelope_size = 8;
8106            let bytes_len = max_ordinal as usize * envelope_size;
8107            #[allow(unused_variables)]
8108            let offset = encoder.out_of_line_offset(bytes_len);
8109            let mut _prev_end_offset: usize = 0;
8110            if 1 > max_ordinal {
8111                return Ok(());
8112            }
8113
8114            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8115            // are envelope_size bytes.
8116            let cur_offset: usize = (1 - 1) * envelope_size;
8117
8118            // Zero reserved fields.
8119            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8120
8121            // Safety:
8122            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8123            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8124            //   envelope_size bytes, there is always sufficient room.
8125            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8126                self.unknown
8127                    .as_ref()
8128                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8129                encoder,
8130                offset + cur_offset,
8131                depth,
8132            )?;
8133
8134            _prev_end_offset = cur_offset + envelope_size;
8135            if 2 > max_ordinal {
8136                return Ok(());
8137            }
8138
8139            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8140            // are envelope_size bytes.
8141            let cur_offset: usize = (2 - 1) * envelope_size;
8142
8143            // Zero reserved fields.
8144            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8145
8146            // Safety:
8147            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8148            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8149            //   envelope_size bytes, there is always sufficient room.
8150            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8151                self.illegal_packet
8152                    .as_ref()
8153                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8154                encoder,
8155                offset + cur_offset,
8156                depth,
8157            )?;
8158
8159            _prev_end_offset = cur_offset + envelope_size;
8160            if 3 > max_ordinal {
8161                return Ok(());
8162            }
8163
8164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8165            // are envelope_size bytes.
8166            let cur_offset: usize = (3 - 1) * envelope_size;
8167
8168            // Zero reserved fields.
8169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8170
8171            // Safety:
8172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8174            //   envelope_size bytes, there is always sufficient room.
8175            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8176                self.unsupported_protocol
8177                    .as_ref()
8178                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8179                encoder,
8180                offset + cur_offset,
8181                depth,
8182            )?;
8183
8184            _prev_end_offset = cur_offset + envelope_size;
8185            if 4 > max_ordinal {
8186                return Ok(());
8187            }
8188
8189            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8190            // are envelope_size bytes.
8191            let cur_offset: usize = (4 - 1) * envelope_size;
8192
8193            // Zero reserved fields.
8194            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8195
8196            // Safety:
8197            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8198            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8199            //   envelope_size bytes, there is always sufficient room.
8200            fidl::encoding::encode_in_envelope_optional::<Nat64PacketCounters, D>(
8201                self.no_mapping
8202                    .as_ref()
8203                    .map(<Nat64PacketCounters as fidl::encoding::ValueTypeMarker>::borrow),
8204                encoder,
8205                offset + cur_offset,
8206                depth,
8207            )?;
8208
8209            _prev_end_offset = cur_offset + envelope_size;
8210
8211            Ok(())
8212        }
8213    }
8214
8215    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ErrorCounters {
8216        #[inline(always)]
8217        fn new_empty() -> Self {
8218            Self::default()
8219        }
8220
8221        unsafe fn decode(
8222            &mut self,
8223            decoder: &mut fidl::encoding::Decoder<'_, D>,
8224            offset: usize,
8225            mut depth: fidl::encoding::Depth,
8226        ) -> fidl::Result<()> {
8227            decoder.debug_check_bounds::<Self>(offset);
8228            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8229                None => return Err(fidl::Error::NotNullable),
8230                Some(len) => len,
8231            };
8232            // Calling decoder.out_of_line_offset(0) is not allowed.
8233            if len == 0 {
8234                return Ok(());
8235            };
8236            depth.increment()?;
8237            let envelope_size = 8;
8238            let bytes_len = len * envelope_size;
8239            let offset = decoder.out_of_line_offset(bytes_len)?;
8240            // Decode the envelope for each type.
8241            let mut _next_ordinal_to_read = 0;
8242            let mut next_offset = offset;
8243            let end_offset = offset + bytes_len;
8244            _next_ordinal_to_read += 1;
8245            if next_offset >= end_offset {
8246                return Ok(());
8247            }
8248
8249            // Decode unknown envelopes for gaps in ordinals.
8250            while _next_ordinal_to_read < 1 {
8251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8252                _next_ordinal_to_read += 1;
8253                next_offset += envelope_size;
8254            }
8255
8256            let next_out_of_line = decoder.next_out_of_line();
8257            let handles_before = decoder.remaining_handles();
8258            if let Some((inlined, num_bytes, num_handles)) =
8259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8260            {
8261                let member_inline_size =
8262                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8263                        decoder.context,
8264                    );
8265                if inlined != (member_inline_size <= 4) {
8266                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8267                }
8268                let inner_offset;
8269                let mut inner_depth = depth.clone();
8270                if inlined {
8271                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8272                    inner_offset = next_offset;
8273                } else {
8274                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8275                    inner_depth.increment()?;
8276                }
8277                let val_ref =
8278                    self.unknown.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8279                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8281                {
8282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8283                }
8284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8286                }
8287            }
8288
8289            next_offset += envelope_size;
8290            _next_ordinal_to_read += 1;
8291            if next_offset >= end_offset {
8292                return Ok(());
8293            }
8294
8295            // Decode unknown envelopes for gaps in ordinals.
8296            while _next_ordinal_to_read < 2 {
8297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8298                _next_ordinal_to_read += 1;
8299                next_offset += envelope_size;
8300            }
8301
8302            let next_out_of_line = decoder.next_out_of_line();
8303            let handles_before = decoder.remaining_handles();
8304            if let Some((inlined, num_bytes, num_handles)) =
8305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8306            {
8307                let member_inline_size =
8308                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8309                        decoder.context,
8310                    );
8311                if inlined != (member_inline_size <= 4) {
8312                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8313                }
8314                let inner_offset;
8315                let mut inner_depth = depth.clone();
8316                if inlined {
8317                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8318                    inner_offset = next_offset;
8319                } else {
8320                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8321                    inner_depth.increment()?;
8322                }
8323                let val_ref = self
8324                    .illegal_packet
8325                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8326                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8328                {
8329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8330                }
8331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8333                }
8334            }
8335
8336            next_offset += envelope_size;
8337            _next_ordinal_to_read += 1;
8338            if next_offset >= end_offset {
8339                return Ok(());
8340            }
8341
8342            // Decode unknown envelopes for gaps in ordinals.
8343            while _next_ordinal_to_read < 3 {
8344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8345                _next_ordinal_to_read += 1;
8346                next_offset += envelope_size;
8347            }
8348
8349            let next_out_of_line = decoder.next_out_of_line();
8350            let handles_before = decoder.remaining_handles();
8351            if let Some((inlined, num_bytes, num_handles)) =
8352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8353            {
8354                let member_inline_size =
8355                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8356                        decoder.context,
8357                    );
8358                if inlined != (member_inline_size <= 4) {
8359                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8360                }
8361                let inner_offset;
8362                let mut inner_depth = depth.clone();
8363                if inlined {
8364                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8365                    inner_offset = next_offset;
8366                } else {
8367                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8368                    inner_depth.increment()?;
8369                }
8370                let val_ref = self
8371                    .unsupported_protocol
8372                    .get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8373                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8374                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8375                {
8376                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8377                }
8378                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8379                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8380                }
8381            }
8382
8383            next_offset += envelope_size;
8384            _next_ordinal_to_read += 1;
8385            if next_offset >= end_offset {
8386                return Ok(());
8387            }
8388
8389            // Decode unknown envelopes for gaps in ordinals.
8390            while _next_ordinal_to_read < 4 {
8391                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8392                _next_ordinal_to_read += 1;
8393                next_offset += envelope_size;
8394            }
8395
8396            let next_out_of_line = decoder.next_out_of_line();
8397            let handles_before = decoder.remaining_handles();
8398            if let Some((inlined, num_bytes, num_handles)) =
8399                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8400            {
8401                let member_inline_size =
8402                    <Nat64PacketCounters as fidl::encoding::TypeMarker>::inline_size(
8403                        decoder.context,
8404                    );
8405                if inlined != (member_inline_size <= 4) {
8406                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8407                }
8408                let inner_offset;
8409                let mut inner_depth = depth.clone();
8410                if inlined {
8411                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8412                    inner_offset = next_offset;
8413                } else {
8414                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8415                    inner_depth.increment()?;
8416                }
8417                let val_ref =
8418                    self.no_mapping.get_or_insert_with(|| fidl::new_empty!(Nat64PacketCounters, D));
8419                fidl::decode!(Nat64PacketCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8421                {
8422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8423                }
8424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8426                }
8427            }
8428
8429            next_offset += envelope_size;
8430
8431            // Decode the remaining unknown envelopes.
8432            while next_offset < end_offset {
8433                _next_ordinal_to_read += 1;
8434                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8435                next_offset += envelope_size;
8436            }
8437
8438            Ok(())
8439        }
8440    }
8441
8442    impl Nat64Info {
8443        #[inline(always)]
8444        fn max_ordinal_present(&self) -> u64 {
8445            if let Some(_) = self.nat64_protocol_counters {
8446                return 4;
8447            }
8448            if let Some(_) = self.nat64_error_counters {
8449                return 3;
8450            }
8451            if let Some(_) = self.nat64_mappings {
8452                return 2;
8453            }
8454            if let Some(_) = self.nat64_state {
8455                return 1;
8456            }
8457            0
8458        }
8459    }
8460
8461    impl fidl::encoding::ValueTypeMarker for Nat64Info {
8462        type Borrowed<'a> = &'a Self;
8463        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8464            value
8465        }
8466    }
8467
8468    unsafe impl fidl::encoding::TypeMarker for Nat64Info {
8469        type Owned = Self;
8470
8471        #[inline(always)]
8472        fn inline_align(_context: fidl::encoding::Context) -> usize {
8473            8
8474        }
8475
8476        #[inline(always)]
8477        fn inline_size(_context: fidl::encoding::Context) -> usize {
8478            16
8479        }
8480    }
8481
8482    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Info, D>
8483        for &Nat64Info
8484    {
8485        unsafe fn encode(
8486            self,
8487            encoder: &mut fidl::encoding::Encoder<'_, D>,
8488            offset: usize,
8489            mut depth: fidl::encoding::Depth,
8490        ) -> fidl::Result<()> {
8491            encoder.debug_check_bounds::<Nat64Info>(offset);
8492            // Vector header
8493            let max_ordinal: u64 = self.max_ordinal_present();
8494            encoder.write_num(max_ordinal, offset);
8495            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8496            // Calling encoder.out_of_line_offset(0) is not allowed.
8497            if max_ordinal == 0 {
8498                return Ok(());
8499            }
8500            depth.increment()?;
8501            let envelope_size = 8;
8502            let bytes_len = max_ordinal as usize * envelope_size;
8503            #[allow(unused_variables)]
8504            let offset = encoder.out_of_line_offset(bytes_len);
8505            let mut _prev_end_offset: usize = 0;
8506            if 1 > max_ordinal {
8507                return Ok(());
8508            }
8509
8510            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8511            // are envelope_size bytes.
8512            let cur_offset: usize = (1 - 1) * envelope_size;
8513
8514            // Zero reserved fields.
8515            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8516
8517            // Safety:
8518            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8519            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8520            //   envelope_size bytes, there is always sufficient room.
8521            fidl::encoding::encode_in_envelope_optional::<BorderRoutingNat64State, D>(
8522                self.nat64_state
8523                    .as_ref()
8524                    .map(<BorderRoutingNat64State as fidl::encoding::ValueTypeMarker>::borrow),
8525                encoder,
8526                offset + cur_offset,
8527                depth,
8528            )?;
8529
8530            _prev_end_offset = cur_offset + envelope_size;
8531            if 2 > max_ordinal {
8532                return Ok(());
8533            }
8534
8535            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8536            // are envelope_size bytes.
8537            let cur_offset: usize = (2 - 1) * envelope_size;
8538
8539            // Zero reserved fields.
8540            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8541
8542            // Safety:
8543            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8544            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8545            //   envelope_size bytes, there is always sufficient room.
8546            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Nat64Mapping>, D>(
8547            self.nat64_mappings.as_ref().map(<fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::ValueTypeMarker>::borrow),
8548            encoder, offset + cur_offset, depth
8549        )?;
8550
8551            _prev_end_offset = cur_offset + envelope_size;
8552            if 3 > max_ordinal {
8553                return Ok(());
8554            }
8555
8556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8557            // are envelope_size bytes.
8558            let cur_offset: usize = (3 - 1) * envelope_size;
8559
8560            // Zero reserved fields.
8561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8562
8563            // Safety:
8564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8566            //   envelope_size bytes, there is always sufficient room.
8567            fidl::encoding::encode_in_envelope_optional::<Nat64ErrorCounters, D>(
8568                self.nat64_error_counters
8569                    .as_ref()
8570                    .map(<Nat64ErrorCounters as fidl::encoding::ValueTypeMarker>::borrow),
8571                encoder,
8572                offset + cur_offset,
8573                depth,
8574            )?;
8575
8576            _prev_end_offset = cur_offset + envelope_size;
8577            if 4 > max_ordinal {
8578                return Ok(());
8579            }
8580
8581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8582            // are envelope_size bytes.
8583            let cur_offset: usize = (4 - 1) * envelope_size;
8584
8585            // Zero reserved fields.
8586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8587
8588            // Safety:
8589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8591            //   envelope_size bytes, there is always sufficient room.
8592            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
8593                self.nat64_protocol_counters
8594                    .as_ref()
8595                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
8596                encoder,
8597                offset + cur_offset,
8598                depth,
8599            )?;
8600
8601            _prev_end_offset = cur_offset + envelope_size;
8602
8603            Ok(())
8604        }
8605    }
8606
8607    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Info {
8608        #[inline(always)]
8609        fn new_empty() -> Self {
8610            Self::default()
8611        }
8612
8613        unsafe fn decode(
8614            &mut self,
8615            decoder: &mut fidl::encoding::Decoder<'_, D>,
8616            offset: usize,
8617            mut depth: fidl::encoding::Depth,
8618        ) -> fidl::Result<()> {
8619            decoder.debug_check_bounds::<Self>(offset);
8620            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8621                None => return Err(fidl::Error::NotNullable),
8622                Some(len) => len,
8623            };
8624            // Calling decoder.out_of_line_offset(0) is not allowed.
8625            if len == 0 {
8626                return Ok(());
8627            };
8628            depth.increment()?;
8629            let envelope_size = 8;
8630            let bytes_len = len * envelope_size;
8631            let offset = decoder.out_of_line_offset(bytes_len)?;
8632            // Decode the envelope for each type.
8633            let mut _next_ordinal_to_read = 0;
8634            let mut next_offset = offset;
8635            let end_offset = offset + bytes_len;
8636            _next_ordinal_to_read += 1;
8637            if next_offset >= end_offset {
8638                return Ok(());
8639            }
8640
8641            // Decode unknown envelopes for gaps in ordinals.
8642            while _next_ordinal_to_read < 1 {
8643                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8644                _next_ordinal_to_read += 1;
8645                next_offset += envelope_size;
8646            }
8647
8648            let next_out_of_line = decoder.next_out_of_line();
8649            let handles_before = decoder.remaining_handles();
8650            if let Some((inlined, num_bytes, num_handles)) =
8651                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8652            {
8653                let member_inline_size =
8654                    <BorderRoutingNat64State as fidl::encoding::TypeMarker>::inline_size(
8655                        decoder.context,
8656                    );
8657                if inlined != (member_inline_size <= 4) {
8658                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8659                }
8660                let inner_offset;
8661                let mut inner_depth = depth.clone();
8662                if inlined {
8663                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8664                    inner_offset = next_offset;
8665                } else {
8666                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8667                    inner_depth.increment()?;
8668                }
8669                let val_ref = self
8670                    .nat64_state
8671                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingNat64State, D));
8672                fidl::decode!(
8673                    BorderRoutingNat64State,
8674                    D,
8675                    val_ref,
8676                    decoder,
8677                    inner_offset,
8678                    inner_depth
8679                )?;
8680                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8681                {
8682                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8683                }
8684                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8685                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8686                }
8687            }
8688
8689            next_offset += envelope_size;
8690            _next_ordinal_to_read += 1;
8691            if next_offset >= end_offset {
8692                return Ok(());
8693            }
8694
8695            // Decode unknown envelopes for gaps in ordinals.
8696            while _next_ordinal_to_read < 2 {
8697                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8698                _next_ordinal_to_read += 1;
8699                next_offset += envelope_size;
8700            }
8701
8702            let next_out_of_line = decoder.next_out_of_line();
8703            let handles_before = decoder.remaining_handles();
8704            if let Some((inlined, num_bytes, num_handles)) =
8705                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8706            {
8707                let member_inline_size = <fidl::encoding::UnboundedVector<Nat64Mapping> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8708                if inlined != (member_inline_size <= 4) {
8709                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8710                }
8711                let inner_offset;
8712                let mut inner_depth = depth.clone();
8713                if inlined {
8714                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8715                    inner_offset = next_offset;
8716                } else {
8717                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8718                    inner_depth.increment()?;
8719                }
8720                let val_ref = self.nat64_mappings.get_or_insert_with(|| {
8721                    fidl::new_empty!(fidl::encoding::UnboundedVector<Nat64Mapping>, D)
8722                });
8723                fidl::decode!(
8724                    fidl::encoding::UnboundedVector<Nat64Mapping>,
8725                    D,
8726                    val_ref,
8727                    decoder,
8728                    inner_offset,
8729                    inner_depth
8730                )?;
8731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8732                {
8733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8734                }
8735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8737                }
8738            }
8739
8740            next_offset += envelope_size;
8741            _next_ordinal_to_read += 1;
8742            if next_offset >= end_offset {
8743                return Ok(());
8744            }
8745
8746            // Decode unknown envelopes for gaps in ordinals.
8747            while _next_ordinal_to_read < 3 {
8748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8749                _next_ordinal_to_read += 1;
8750                next_offset += envelope_size;
8751            }
8752
8753            let next_out_of_line = decoder.next_out_of_line();
8754            let handles_before = decoder.remaining_handles();
8755            if let Some((inlined, num_bytes, num_handles)) =
8756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8757            {
8758                let member_inline_size =
8759                    <Nat64ErrorCounters as fidl::encoding::TypeMarker>::inline_size(
8760                        decoder.context,
8761                    );
8762                if inlined != (member_inline_size <= 4) {
8763                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8764                }
8765                let inner_offset;
8766                let mut inner_depth = depth.clone();
8767                if inlined {
8768                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8769                    inner_offset = next_offset;
8770                } else {
8771                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8772                    inner_depth.increment()?;
8773                }
8774                let val_ref = self
8775                    .nat64_error_counters
8776                    .get_or_insert_with(|| fidl::new_empty!(Nat64ErrorCounters, D));
8777                fidl::decode!(Nat64ErrorCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
8778                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8779                {
8780                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8781                }
8782                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8783                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8784                }
8785            }
8786
8787            next_offset += envelope_size;
8788            _next_ordinal_to_read += 1;
8789            if next_offset >= end_offset {
8790                return Ok(());
8791            }
8792
8793            // Decode unknown envelopes for gaps in ordinals.
8794            while _next_ordinal_to_read < 4 {
8795                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8796                _next_ordinal_to_read += 1;
8797                next_offset += envelope_size;
8798            }
8799
8800            let next_out_of_line = decoder.next_out_of_line();
8801            let handles_before = decoder.remaining_handles();
8802            if let Some((inlined, num_bytes, num_handles)) =
8803                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8804            {
8805                let member_inline_size =
8806                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
8807                        decoder.context,
8808                    );
8809                if inlined != (member_inline_size <= 4) {
8810                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8811                }
8812                let inner_offset;
8813                let mut inner_depth = depth.clone();
8814                if inlined {
8815                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8816                    inner_offset = next_offset;
8817                } else {
8818                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8819                    inner_depth.increment()?;
8820                }
8821                let val_ref = self
8822                    .nat64_protocol_counters
8823                    .get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
8824                fidl::decode!(
8825                    Nat64ProtocolCounters,
8826                    D,
8827                    val_ref,
8828                    decoder,
8829                    inner_offset,
8830                    inner_depth
8831                )?;
8832                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8833                {
8834                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8835                }
8836                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8837                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8838                }
8839            }
8840
8841            next_offset += envelope_size;
8842
8843            // Decode the remaining unknown envelopes.
8844            while next_offset < end_offset {
8845                _next_ordinal_to_read += 1;
8846                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8847                next_offset += envelope_size;
8848            }
8849
8850            Ok(())
8851        }
8852    }
8853
8854    impl Nat64Mapping {
8855        #[inline(always)]
8856        fn max_ordinal_present(&self) -> u64 {
8857            if let Some(_) = self.counters {
8858                return 5;
8859            }
8860            if let Some(_) = self.remaining_time_ms {
8861                return 4;
8862            }
8863            if let Some(_) = self.ip6_addr {
8864                return 3;
8865            }
8866            if let Some(_) = self.ip4_addr {
8867                return 2;
8868            }
8869            if let Some(_) = self.mapping_id {
8870                return 1;
8871            }
8872            0
8873        }
8874    }
8875
8876    impl fidl::encoding::ValueTypeMarker for Nat64Mapping {
8877        type Borrowed<'a> = &'a Self;
8878        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8879            value
8880        }
8881    }
8882
8883    unsafe impl fidl::encoding::TypeMarker for Nat64Mapping {
8884        type Owned = Self;
8885
8886        #[inline(always)]
8887        fn inline_align(_context: fidl::encoding::Context) -> usize {
8888            8
8889        }
8890
8891        #[inline(always)]
8892        fn inline_size(_context: fidl::encoding::Context) -> usize {
8893            16
8894        }
8895    }
8896
8897    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64Mapping, D>
8898        for &Nat64Mapping
8899    {
8900        unsafe fn encode(
8901            self,
8902            encoder: &mut fidl::encoding::Encoder<'_, D>,
8903            offset: usize,
8904            mut depth: fidl::encoding::Depth,
8905        ) -> fidl::Result<()> {
8906            encoder.debug_check_bounds::<Nat64Mapping>(offset);
8907            // Vector header
8908            let max_ordinal: u64 = self.max_ordinal_present();
8909            encoder.write_num(max_ordinal, offset);
8910            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8911            // Calling encoder.out_of_line_offset(0) is not allowed.
8912            if max_ordinal == 0 {
8913                return Ok(());
8914            }
8915            depth.increment()?;
8916            let envelope_size = 8;
8917            let bytes_len = max_ordinal as usize * envelope_size;
8918            #[allow(unused_variables)]
8919            let offset = encoder.out_of_line_offset(bytes_len);
8920            let mut _prev_end_offset: usize = 0;
8921            if 1 > max_ordinal {
8922                return Ok(());
8923            }
8924
8925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8926            // are envelope_size bytes.
8927            let cur_offset: usize = (1 - 1) * envelope_size;
8928
8929            // Zero reserved fields.
8930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8931
8932            // Safety:
8933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8935            //   envelope_size bytes, there is always sufficient room.
8936            fidl::encoding::encode_in_envelope_optional::<u64, D>(
8937                self.mapping_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
8938                encoder,
8939                offset + cur_offset,
8940                depth,
8941            )?;
8942
8943            _prev_end_offset = cur_offset + envelope_size;
8944            if 2 > max_ordinal {
8945                return Ok(());
8946            }
8947
8948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8949            // are envelope_size bytes.
8950            let cur_offset: usize = (2 - 1) * envelope_size;
8951
8952            // Zero reserved fields.
8953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8954
8955            // Safety:
8956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8958            //   envelope_size bytes, there is always sufficient room.
8959            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8960            self.ip4_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8961            encoder, offset + cur_offset, depth
8962        )?;
8963
8964            _prev_end_offset = cur_offset + envelope_size;
8965            if 3 > max_ordinal {
8966                return Ok(());
8967            }
8968
8969            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8970            // are envelope_size bytes.
8971            let cur_offset: usize = (3 - 1) * envelope_size;
8972
8973            // Zero reserved fields.
8974            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8975
8976            // Safety:
8977            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8978            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8979            //   envelope_size bytes, there is always sufficient room.
8980            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
8981            self.ip6_addr.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
8982            encoder, offset + cur_offset, depth
8983        )?;
8984
8985            _prev_end_offset = cur_offset + envelope_size;
8986            if 4 > max_ordinal {
8987                return Ok(());
8988            }
8989
8990            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8991            // are envelope_size bytes.
8992            let cur_offset: usize = (4 - 1) * envelope_size;
8993
8994            // Zero reserved fields.
8995            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8996
8997            // Safety:
8998            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8999            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9000            //   envelope_size bytes, there is always sufficient room.
9001            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9002                self.remaining_time_ms
9003                    .as_ref()
9004                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9005                encoder,
9006                offset + cur_offset,
9007                depth,
9008            )?;
9009
9010            _prev_end_offset = cur_offset + envelope_size;
9011            if 5 > max_ordinal {
9012                return Ok(());
9013            }
9014
9015            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9016            // are envelope_size bytes.
9017            let cur_offset: usize = (5 - 1) * envelope_size;
9018
9019            // Zero reserved fields.
9020            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9021
9022            // Safety:
9023            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9024            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9025            //   envelope_size bytes, there is always sufficient room.
9026            fidl::encoding::encode_in_envelope_optional::<Nat64ProtocolCounters, D>(
9027                self.counters
9028                    .as_ref()
9029                    .map(<Nat64ProtocolCounters as fidl::encoding::ValueTypeMarker>::borrow),
9030                encoder,
9031                offset + cur_offset,
9032                depth,
9033            )?;
9034
9035            _prev_end_offset = cur_offset + envelope_size;
9036
9037            Ok(())
9038        }
9039    }
9040
9041    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64Mapping {
9042        #[inline(always)]
9043        fn new_empty() -> Self {
9044            Self::default()
9045        }
9046
9047        unsafe fn decode(
9048            &mut self,
9049            decoder: &mut fidl::encoding::Decoder<'_, D>,
9050            offset: usize,
9051            mut depth: fidl::encoding::Depth,
9052        ) -> fidl::Result<()> {
9053            decoder.debug_check_bounds::<Self>(offset);
9054            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9055                None => return Err(fidl::Error::NotNullable),
9056                Some(len) => len,
9057            };
9058            // Calling decoder.out_of_line_offset(0) is not allowed.
9059            if len == 0 {
9060                return Ok(());
9061            };
9062            depth.increment()?;
9063            let envelope_size = 8;
9064            let bytes_len = len * envelope_size;
9065            let offset = decoder.out_of_line_offset(bytes_len)?;
9066            // Decode the envelope for each type.
9067            let mut _next_ordinal_to_read = 0;
9068            let mut next_offset = offset;
9069            let end_offset = offset + bytes_len;
9070            _next_ordinal_to_read += 1;
9071            if next_offset >= end_offset {
9072                return Ok(());
9073            }
9074
9075            // Decode unknown envelopes for gaps in ordinals.
9076            while _next_ordinal_to_read < 1 {
9077                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9078                _next_ordinal_to_read += 1;
9079                next_offset += envelope_size;
9080            }
9081
9082            let next_out_of_line = decoder.next_out_of_line();
9083            let handles_before = decoder.remaining_handles();
9084            if let Some((inlined, num_bytes, num_handles)) =
9085                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9086            {
9087                let member_inline_size =
9088                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9089                if inlined != (member_inline_size <= 4) {
9090                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9091                }
9092                let inner_offset;
9093                let mut inner_depth = depth.clone();
9094                if inlined {
9095                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9096                    inner_offset = next_offset;
9097                } else {
9098                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9099                    inner_depth.increment()?;
9100                }
9101                let val_ref = self.mapping_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
9102                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9103                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9104                {
9105                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9106                }
9107                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9108                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9109                }
9110            }
9111
9112            next_offset += envelope_size;
9113            _next_ordinal_to_read += 1;
9114            if next_offset >= end_offset {
9115                return Ok(());
9116            }
9117
9118            // Decode unknown envelopes for gaps in ordinals.
9119            while _next_ordinal_to_read < 2 {
9120                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9121                _next_ordinal_to_read += 1;
9122                next_offset += envelope_size;
9123            }
9124
9125            let next_out_of_line = decoder.next_out_of_line();
9126            let handles_before = decoder.remaining_handles();
9127            if let Some((inlined, num_bytes, num_handles)) =
9128                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9129            {
9130                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9131                if inlined != (member_inline_size <= 4) {
9132                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9133                }
9134                let inner_offset;
9135                let mut inner_depth = depth.clone();
9136                if inlined {
9137                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9138                    inner_offset = next_offset;
9139                } else {
9140                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9141                    inner_depth.increment()?;
9142                }
9143                let val_ref = self.ip4_addr.get_or_insert_with(|| {
9144                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9145                });
9146                fidl::decode!(
9147                    fidl::encoding::UnboundedVector<u8>,
9148                    D,
9149                    val_ref,
9150                    decoder,
9151                    inner_offset,
9152                    inner_depth
9153                )?;
9154                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9155                {
9156                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9157                }
9158                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9159                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9160                }
9161            }
9162
9163            next_offset += envelope_size;
9164            _next_ordinal_to_read += 1;
9165            if next_offset >= end_offset {
9166                return Ok(());
9167            }
9168
9169            // Decode unknown envelopes for gaps in ordinals.
9170            while _next_ordinal_to_read < 3 {
9171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9172                _next_ordinal_to_read += 1;
9173                next_offset += envelope_size;
9174            }
9175
9176            let next_out_of_line = decoder.next_out_of_line();
9177            let handles_before = decoder.remaining_handles();
9178            if let Some((inlined, num_bytes, num_handles)) =
9179                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9180            {
9181                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9182                if inlined != (member_inline_size <= 4) {
9183                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9184                }
9185                let inner_offset;
9186                let mut inner_depth = depth.clone();
9187                if inlined {
9188                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9189                    inner_offset = next_offset;
9190                } else {
9191                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9192                    inner_depth.increment()?;
9193                }
9194                let val_ref = self.ip6_addr.get_or_insert_with(|| {
9195                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
9196                });
9197                fidl::decode!(
9198                    fidl::encoding::UnboundedVector<u8>,
9199                    D,
9200                    val_ref,
9201                    decoder,
9202                    inner_offset,
9203                    inner_depth
9204                )?;
9205                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9206                {
9207                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9208                }
9209                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9210                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9211                }
9212            }
9213
9214            next_offset += envelope_size;
9215            _next_ordinal_to_read += 1;
9216            if next_offset >= end_offset {
9217                return Ok(());
9218            }
9219
9220            // Decode unknown envelopes for gaps in ordinals.
9221            while _next_ordinal_to_read < 4 {
9222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9223                _next_ordinal_to_read += 1;
9224                next_offset += envelope_size;
9225            }
9226
9227            let next_out_of_line = decoder.next_out_of_line();
9228            let handles_before = decoder.remaining_handles();
9229            if let Some((inlined, num_bytes, num_handles)) =
9230                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9231            {
9232                let member_inline_size =
9233                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9234                if inlined != (member_inline_size <= 4) {
9235                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9236                }
9237                let inner_offset;
9238                let mut inner_depth = depth.clone();
9239                if inlined {
9240                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9241                    inner_offset = next_offset;
9242                } else {
9243                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9244                    inner_depth.increment()?;
9245                }
9246                let val_ref =
9247                    self.remaining_time_ms.get_or_insert_with(|| fidl::new_empty!(u32, D));
9248                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9249                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9250                {
9251                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9252                }
9253                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9254                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9255                }
9256            }
9257
9258            next_offset += envelope_size;
9259            _next_ordinal_to_read += 1;
9260            if next_offset >= end_offset {
9261                return Ok(());
9262            }
9263
9264            // Decode unknown envelopes for gaps in ordinals.
9265            while _next_ordinal_to_read < 5 {
9266                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9267                _next_ordinal_to_read += 1;
9268                next_offset += envelope_size;
9269            }
9270
9271            let next_out_of_line = decoder.next_out_of_line();
9272            let handles_before = decoder.remaining_handles();
9273            if let Some((inlined, num_bytes, num_handles)) =
9274                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9275            {
9276                let member_inline_size =
9277                    <Nat64ProtocolCounters as fidl::encoding::TypeMarker>::inline_size(
9278                        decoder.context,
9279                    );
9280                if inlined != (member_inline_size <= 4) {
9281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9282                }
9283                let inner_offset;
9284                let mut inner_depth = depth.clone();
9285                if inlined {
9286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9287                    inner_offset = next_offset;
9288                } else {
9289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9290                    inner_depth.increment()?;
9291                }
9292                let val_ref =
9293                    self.counters.get_or_insert_with(|| fidl::new_empty!(Nat64ProtocolCounters, D));
9294                fidl::decode!(
9295                    Nat64ProtocolCounters,
9296                    D,
9297                    val_ref,
9298                    decoder,
9299                    inner_offset,
9300                    inner_depth
9301                )?;
9302                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9303                {
9304                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9305                }
9306                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9307                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9308                }
9309            }
9310
9311            next_offset += envelope_size;
9312
9313            // Decode the remaining unknown envelopes.
9314            while next_offset < end_offset {
9315                _next_ordinal_to_read += 1;
9316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9317                next_offset += envelope_size;
9318            }
9319
9320            Ok(())
9321        }
9322    }
9323
9324    impl Nat64PacketCounters {
9325        #[inline(always)]
9326        fn max_ordinal_present(&self) -> u64 {
9327            if let Some(_) = self.ipv6_to_ipv4_packets {
9328                return 2;
9329            }
9330            if let Some(_) = self.ipv4_to_ipv6_packets {
9331                return 1;
9332            }
9333            0
9334        }
9335    }
9336
9337    impl fidl::encoding::ValueTypeMarker for Nat64PacketCounters {
9338        type Borrowed<'a> = &'a Self;
9339        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9340            value
9341        }
9342    }
9343
9344    unsafe impl fidl::encoding::TypeMarker for Nat64PacketCounters {
9345        type Owned = Self;
9346
9347        #[inline(always)]
9348        fn inline_align(_context: fidl::encoding::Context) -> usize {
9349            8
9350        }
9351
9352        #[inline(always)]
9353        fn inline_size(_context: fidl::encoding::Context) -> usize {
9354            16
9355        }
9356    }
9357
9358    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64PacketCounters, D>
9359        for &Nat64PacketCounters
9360    {
9361        unsafe fn encode(
9362            self,
9363            encoder: &mut fidl::encoding::Encoder<'_, D>,
9364            offset: usize,
9365            mut depth: fidl::encoding::Depth,
9366        ) -> fidl::Result<()> {
9367            encoder.debug_check_bounds::<Nat64PacketCounters>(offset);
9368            // Vector header
9369            let max_ordinal: u64 = self.max_ordinal_present();
9370            encoder.write_num(max_ordinal, offset);
9371            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9372            // Calling encoder.out_of_line_offset(0) is not allowed.
9373            if max_ordinal == 0 {
9374                return Ok(());
9375            }
9376            depth.increment()?;
9377            let envelope_size = 8;
9378            let bytes_len = max_ordinal as usize * envelope_size;
9379            #[allow(unused_variables)]
9380            let offset = encoder.out_of_line_offset(bytes_len);
9381            let mut _prev_end_offset: usize = 0;
9382            if 1 > max_ordinal {
9383                return Ok(());
9384            }
9385
9386            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9387            // are envelope_size bytes.
9388            let cur_offset: usize = (1 - 1) * envelope_size;
9389
9390            // Zero reserved fields.
9391            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9392
9393            // Safety:
9394            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9395            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9396            //   envelope_size bytes, there is always sufficient room.
9397            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9398                self.ipv4_to_ipv6_packets
9399                    .as_ref()
9400                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9401                encoder,
9402                offset + cur_offset,
9403                depth,
9404            )?;
9405
9406            _prev_end_offset = cur_offset + envelope_size;
9407            if 2 > max_ordinal {
9408                return Ok(());
9409            }
9410
9411            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9412            // are envelope_size bytes.
9413            let cur_offset: usize = (2 - 1) * envelope_size;
9414
9415            // Zero reserved fields.
9416            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9417
9418            // Safety:
9419            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9420            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9421            //   envelope_size bytes, there is always sufficient room.
9422            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9423                self.ipv6_to_ipv4_packets
9424                    .as_ref()
9425                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9426                encoder,
9427                offset + cur_offset,
9428                depth,
9429            )?;
9430
9431            _prev_end_offset = cur_offset + envelope_size;
9432
9433            Ok(())
9434        }
9435    }
9436
9437    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64PacketCounters {
9438        #[inline(always)]
9439        fn new_empty() -> Self {
9440            Self::default()
9441        }
9442
9443        unsafe fn decode(
9444            &mut self,
9445            decoder: &mut fidl::encoding::Decoder<'_, D>,
9446            offset: usize,
9447            mut depth: fidl::encoding::Depth,
9448        ) -> fidl::Result<()> {
9449            decoder.debug_check_bounds::<Self>(offset);
9450            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9451                None => return Err(fidl::Error::NotNullable),
9452                Some(len) => len,
9453            };
9454            // Calling decoder.out_of_line_offset(0) is not allowed.
9455            if len == 0 {
9456                return Ok(());
9457            };
9458            depth.increment()?;
9459            let envelope_size = 8;
9460            let bytes_len = len * envelope_size;
9461            let offset = decoder.out_of_line_offset(bytes_len)?;
9462            // Decode the envelope for each type.
9463            let mut _next_ordinal_to_read = 0;
9464            let mut next_offset = offset;
9465            let end_offset = offset + bytes_len;
9466            _next_ordinal_to_read += 1;
9467            if next_offset >= end_offset {
9468                return Ok(());
9469            }
9470
9471            // Decode unknown envelopes for gaps in ordinals.
9472            while _next_ordinal_to_read < 1 {
9473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9474                _next_ordinal_to_read += 1;
9475                next_offset += envelope_size;
9476            }
9477
9478            let next_out_of_line = decoder.next_out_of_line();
9479            let handles_before = decoder.remaining_handles();
9480            if let Some((inlined, num_bytes, num_handles)) =
9481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9482            {
9483                let member_inline_size =
9484                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9485                if inlined != (member_inline_size <= 4) {
9486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9487                }
9488                let inner_offset;
9489                let mut inner_depth = depth.clone();
9490                if inlined {
9491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9492                    inner_offset = next_offset;
9493                } else {
9494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9495                    inner_depth.increment()?;
9496                }
9497                let val_ref =
9498                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9499                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9501                {
9502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9503                }
9504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9506                }
9507            }
9508
9509            next_offset += envelope_size;
9510            _next_ordinal_to_read += 1;
9511            if next_offset >= end_offset {
9512                return Ok(());
9513            }
9514
9515            // Decode unknown envelopes for gaps in ordinals.
9516            while _next_ordinal_to_read < 2 {
9517                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9518                _next_ordinal_to_read += 1;
9519                next_offset += envelope_size;
9520            }
9521
9522            let next_out_of_line = decoder.next_out_of_line();
9523            let handles_before = decoder.remaining_handles();
9524            if let Some((inlined, num_bytes, num_handles)) =
9525                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9526            {
9527                let member_inline_size =
9528                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9529                if inlined != (member_inline_size <= 4) {
9530                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9531                }
9532                let inner_offset;
9533                let mut inner_depth = depth.clone();
9534                if inlined {
9535                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9536                    inner_offset = next_offset;
9537                } else {
9538                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9539                    inner_depth.increment()?;
9540                }
9541                let val_ref =
9542                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
9543                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9544                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9545                {
9546                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9547                }
9548                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9549                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9550                }
9551            }
9552
9553            next_offset += envelope_size;
9554
9555            // Decode the remaining unknown envelopes.
9556            while next_offset < end_offset {
9557                _next_ordinal_to_read += 1;
9558                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9559                next_offset += envelope_size;
9560            }
9561
9562            Ok(())
9563        }
9564    }
9565
9566    impl Nat64ProtocolCounters {
9567        #[inline(always)]
9568        fn max_ordinal_present(&self) -> u64 {
9569            if let Some(_) = self.total {
9570                return 4;
9571            }
9572            if let Some(_) = self.icmp {
9573                return 3;
9574            }
9575            if let Some(_) = self.udp {
9576                return 2;
9577            }
9578            if let Some(_) = self.tcp {
9579                return 1;
9580            }
9581            0
9582        }
9583    }
9584
9585    impl fidl::encoding::ValueTypeMarker for Nat64ProtocolCounters {
9586        type Borrowed<'a> = &'a Self;
9587        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9588            value
9589        }
9590    }
9591
9592    unsafe impl fidl::encoding::TypeMarker for Nat64ProtocolCounters {
9593        type Owned = Self;
9594
9595        #[inline(always)]
9596        fn inline_align(_context: fidl::encoding::Context) -> usize {
9597            8
9598        }
9599
9600        #[inline(always)]
9601        fn inline_size(_context: fidl::encoding::Context) -> usize {
9602            16
9603        }
9604    }
9605
9606    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64ProtocolCounters, D>
9607        for &Nat64ProtocolCounters
9608    {
9609        unsafe fn encode(
9610            self,
9611            encoder: &mut fidl::encoding::Encoder<'_, D>,
9612            offset: usize,
9613            mut depth: fidl::encoding::Depth,
9614        ) -> fidl::Result<()> {
9615            encoder.debug_check_bounds::<Nat64ProtocolCounters>(offset);
9616            // Vector header
9617            let max_ordinal: u64 = self.max_ordinal_present();
9618            encoder.write_num(max_ordinal, offset);
9619            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9620            // Calling encoder.out_of_line_offset(0) is not allowed.
9621            if max_ordinal == 0 {
9622                return Ok(());
9623            }
9624            depth.increment()?;
9625            let envelope_size = 8;
9626            let bytes_len = max_ordinal as usize * envelope_size;
9627            #[allow(unused_variables)]
9628            let offset = encoder.out_of_line_offset(bytes_len);
9629            let mut _prev_end_offset: usize = 0;
9630            if 1 > max_ordinal {
9631                return Ok(());
9632            }
9633
9634            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9635            // are envelope_size bytes.
9636            let cur_offset: usize = (1 - 1) * envelope_size;
9637
9638            // Zero reserved fields.
9639            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9640
9641            // Safety:
9642            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9643            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9644            //   envelope_size bytes, there is always sufficient room.
9645            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9646                self.tcp
9647                    .as_ref()
9648                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9649                encoder,
9650                offset + cur_offset,
9651                depth,
9652            )?;
9653
9654            _prev_end_offset = cur_offset + envelope_size;
9655            if 2 > max_ordinal {
9656                return Ok(());
9657            }
9658
9659            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9660            // are envelope_size bytes.
9661            let cur_offset: usize = (2 - 1) * envelope_size;
9662
9663            // Zero reserved fields.
9664            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9665
9666            // Safety:
9667            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9668            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9669            //   envelope_size bytes, there is always sufficient room.
9670            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9671                self.udp
9672                    .as_ref()
9673                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9674                encoder,
9675                offset + cur_offset,
9676                depth,
9677            )?;
9678
9679            _prev_end_offset = cur_offset + envelope_size;
9680            if 3 > max_ordinal {
9681                return Ok(());
9682            }
9683
9684            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9685            // are envelope_size bytes.
9686            let cur_offset: usize = (3 - 1) * envelope_size;
9687
9688            // Zero reserved fields.
9689            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9690
9691            // Safety:
9692            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9693            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9694            //   envelope_size bytes, there is always sufficient room.
9695            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9696                self.icmp
9697                    .as_ref()
9698                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9699                encoder,
9700                offset + cur_offset,
9701                depth,
9702            )?;
9703
9704            _prev_end_offset = cur_offset + envelope_size;
9705            if 4 > max_ordinal {
9706                return Ok(());
9707            }
9708
9709            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9710            // are envelope_size bytes.
9711            let cur_offset: usize = (4 - 1) * envelope_size;
9712
9713            // Zero reserved fields.
9714            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9715
9716            // Safety:
9717            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9718            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9719            //   envelope_size bytes, there is always sufficient room.
9720            fidl::encoding::encode_in_envelope_optional::<Nat64TrafficCounters, D>(
9721                self.total
9722                    .as_ref()
9723                    .map(<Nat64TrafficCounters as fidl::encoding::ValueTypeMarker>::borrow),
9724                encoder,
9725                offset + cur_offset,
9726                depth,
9727            )?;
9728
9729            _prev_end_offset = cur_offset + envelope_size;
9730
9731            Ok(())
9732        }
9733    }
9734
9735    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64ProtocolCounters {
9736        #[inline(always)]
9737        fn new_empty() -> Self {
9738            Self::default()
9739        }
9740
9741        unsafe fn decode(
9742            &mut self,
9743            decoder: &mut fidl::encoding::Decoder<'_, D>,
9744            offset: usize,
9745            mut depth: fidl::encoding::Depth,
9746        ) -> fidl::Result<()> {
9747            decoder.debug_check_bounds::<Self>(offset);
9748            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9749                None => return Err(fidl::Error::NotNullable),
9750                Some(len) => len,
9751            };
9752            // Calling decoder.out_of_line_offset(0) is not allowed.
9753            if len == 0 {
9754                return Ok(());
9755            };
9756            depth.increment()?;
9757            let envelope_size = 8;
9758            let bytes_len = len * envelope_size;
9759            let offset = decoder.out_of_line_offset(bytes_len)?;
9760            // Decode the envelope for each type.
9761            let mut _next_ordinal_to_read = 0;
9762            let mut next_offset = offset;
9763            let end_offset = offset + bytes_len;
9764            _next_ordinal_to_read += 1;
9765            if next_offset >= end_offset {
9766                return Ok(());
9767            }
9768
9769            // Decode unknown envelopes for gaps in ordinals.
9770            while _next_ordinal_to_read < 1 {
9771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9772                _next_ordinal_to_read += 1;
9773                next_offset += envelope_size;
9774            }
9775
9776            let next_out_of_line = decoder.next_out_of_line();
9777            let handles_before = decoder.remaining_handles();
9778            if let Some((inlined, num_bytes, num_handles)) =
9779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9780            {
9781                let member_inline_size =
9782                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9783                        decoder.context,
9784                    );
9785                if inlined != (member_inline_size <= 4) {
9786                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9787                }
9788                let inner_offset;
9789                let mut inner_depth = depth.clone();
9790                if inlined {
9791                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9792                    inner_offset = next_offset;
9793                } else {
9794                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9795                    inner_depth.increment()?;
9796                }
9797                let val_ref =
9798                    self.tcp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9799                fidl::decode!(
9800                    Nat64TrafficCounters,
9801                    D,
9802                    val_ref,
9803                    decoder,
9804                    inner_offset,
9805                    inner_depth
9806                )?;
9807                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9808                {
9809                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9810                }
9811                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9812                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9813                }
9814            }
9815
9816            next_offset += envelope_size;
9817            _next_ordinal_to_read += 1;
9818            if next_offset >= end_offset {
9819                return Ok(());
9820            }
9821
9822            // Decode unknown envelopes for gaps in ordinals.
9823            while _next_ordinal_to_read < 2 {
9824                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9825                _next_ordinal_to_read += 1;
9826                next_offset += envelope_size;
9827            }
9828
9829            let next_out_of_line = decoder.next_out_of_line();
9830            let handles_before = decoder.remaining_handles();
9831            if let Some((inlined, num_bytes, num_handles)) =
9832                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9833            {
9834                let member_inline_size =
9835                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9836                        decoder.context,
9837                    );
9838                if inlined != (member_inline_size <= 4) {
9839                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9840                }
9841                let inner_offset;
9842                let mut inner_depth = depth.clone();
9843                if inlined {
9844                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9845                    inner_offset = next_offset;
9846                } else {
9847                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9848                    inner_depth.increment()?;
9849                }
9850                let val_ref =
9851                    self.udp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9852                fidl::decode!(
9853                    Nat64TrafficCounters,
9854                    D,
9855                    val_ref,
9856                    decoder,
9857                    inner_offset,
9858                    inner_depth
9859                )?;
9860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9861                {
9862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9863                }
9864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9866                }
9867            }
9868
9869            next_offset += envelope_size;
9870            _next_ordinal_to_read += 1;
9871            if next_offset >= end_offset {
9872                return Ok(());
9873            }
9874
9875            // Decode unknown envelopes for gaps in ordinals.
9876            while _next_ordinal_to_read < 3 {
9877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9878                _next_ordinal_to_read += 1;
9879                next_offset += envelope_size;
9880            }
9881
9882            let next_out_of_line = decoder.next_out_of_line();
9883            let handles_before = decoder.remaining_handles();
9884            if let Some((inlined, num_bytes, num_handles)) =
9885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9886            {
9887                let member_inline_size =
9888                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9889                        decoder.context,
9890                    );
9891                if inlined != (member_inline_size <= 4) {
9892                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9893                }
9894                let inner_offset;
9895                let mut inner_depth = depth.clone();
9896                if inlined {
9897                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9898                    inner_offset = next_offset;
9899                } else {
9900                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9901                    inner_depth.increment()?;
9902                }
9903                let val_ref =
9904                    self.icmp.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9905                fidl::decode!(
9906                    Nat64TrafficCounters,
9907                    D,
9908                    val_ref,
9909                    decoder,
9910                    inner_offset,
9911                    inner_depth
9912                )?;
9913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9914                {
9915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9916                }
9917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9919                }
9920            }
9921
9922            next_offset += envelope_size;
9923            _next_ordinal_to_read += 1;
9924            if next_offset >= end_offset {
9925                return Ok(());
9926            }
9927
9928            // Decode unknown envelopes for gaps in ordinals.
9929            while _next_ordinal_to_read < 4 {
9930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9931                _next_ordinal_to_read += 1;
9932                next_offset += envelope_size;
9933            }
9934
9935            let next_out_of_line = decoder.next_out_of_line();
9936            let handles_before = decoder.remaining_handles();
9937            if let Some((inlined, num_bytes, num_handles)) =
9938                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9939            {
9940                let member_inline_size =
9941                    <Nat64TrafficCounters as fidl::encoding::TypeMarker>::inline_size(
9942                        decoder.context,
9943                    );
9944                if inlined != (member_inline_size <= 4) {
9945                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9946                }
9947                let inner_offset;
9948                let mut inner_depth = depth.clone();
9949                if inlined {
9950                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9951                    inner_offset = next_offset;
9952                } else {
9953                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9954                    inner_depth.increment()?;
9955                }
9956                let val_ref =
9957                    self.total.get_or_insert_with(|| fidl::new_empty!(Nat64TrafficCounters, D));
9958                fidl::decode!(
9959                    Nat64TrafficCounters,
9960                    D,
9961                    val_ref,
9962                    decoder,
9963                    inner_offset,
9964                    inner_depth
9965                )?;
9966                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9967                {
9968                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9969                }
9970                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9971                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9972                }
9973            }
9974
9975            next_offset += envelope_size;
9976
9977            // Decode the remaining unknown envelopes.
9978            while next_offset < end_offset {
9979                _next_ordinal_to_read += 1;
9980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9981                next_offset += envelope_size;
9982            }
9983
9984            Ok(())
9985        }
9986    }
9987
9988    impl Nat64TrafficCounters {
9989        #[inline(always)]
9990        fn max_ordinal_present(&self) -> u64 {
9991            if let Some(_) = self.ipv6_to_ipv4_bytes {
9992                return 4;
9993            }
9994            if let Some(_) = self.ipv6_to_ipv4_packets {
9995                return 3;
9996            }
9997            if let Some(_) = self.ipv4_to_ipv6_bytes {
9998                return 2;
9999            }
10000            if let Some(_) = self.ipv4_to_ipv6_packets {
10001                return 1;
10002            }
10003            0
10004        }
10005    }
10006
10007    impl fidl::encoding::ValueTypeMarker for Nat64TrafficCounters {
10008        type Borrowed<'a> = &'a Self;
10009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10010            value
10011        }
10012    }
10013
10014    unsafe impl fidl::encoding::TypeMarker for Nat64TrafficCounters {
10015        type Owned = Self;
10016
10017        #[inline(always)]
10018        fn inline_align(_context: fidl::encoding::Context) -> usize {
10019            8
10020        }
10021
10022        #[inline(always)]
10023        fn inline_size(_context: fidl::encoding::Context) -> usize {
10024            16
10025        }
10026    }
10027
10028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Nat64TrafficCounters, D>
10029        for &Nat64TrafficCounters
10030    {
10031        unsafe fn encode(
10032            self,
10033            encoder: &mut fidl::encoding::Encoder<'_, D>,
10034            offset: usize,
10035            mut depth: fidl::encoding::Depth,
10036        ) -> fidl::Result<()> {
10037            encoder.debug_check_bounds::<Nat64TrafficCounters>(offset);
10038            // Vector header
10039            let max_ordinal: u64 = self.max_ordinal_present();
10040            encoder.write_num(max_ordinal, offset);
10041            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10042            // Calling encoder.out_of_line_offset(0) is not allowed.
10043            if max_ordinal == 0 {
10044                return Ok(());
10045            }
10046            depth.increment()?;
10047            let envelope_size = 8;
10048            let bytes_len = max_ordinal as usize * envelope_size;
10049            #[allow(unused_variables)]
10050            let offset = encoder.out_of_line_offset(bytes_len);
10051            let mut _prev_end_offset: usize = 0;
10052            if 1 > max_ordinal {
10053                return Ok(());
10054            }
10055
10056            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10057            // are envelope_size bytes.
10058            let cur_offset: usize = (1 - 1) * envelope_size;
10059
10060            // Zero reserved fields.
10061            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10062
10063            // Safety:
10064            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10065            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10066            //   envelope_size bytes, there is always sufficient room.
10067            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10068                self.ipv4_to_ipv6_packets
10069                    .as_ref()
10070                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10071                encoder,
10072                offset + cur_offset,
10073                depth,
10074            )?;
10075
10076            _prev_end_offset = cur_offset + envelope_size;
10077            if 2 > max_ordinal {
10078                return Ok(());
10079            }
10080
10081            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10082            // are envelope_size bytes.
10083            let cur_offset: usize = (2 - 1) * envelope_size;
10084
10085            // Zero reserved fields.
10086            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10087
10088            // Safety:
10089            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10090            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10091            //   envelope_size bytes, there is always sufficient room.
10092            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10093                self.ipv4_to_ipv6_bytes
10094                    .as_ref()
10095                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10096                encoder,
10097                offset + cur_offset,
10098                depth,
10099            )?;
10100
10101            _prev_end_offset = cur_offset + envelope_size;
10102            if 3 > max_ordinal {
10103                return Ok(());
10104            }
10105
10106            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10107            // are envelope_size bytes.
10108            let cur_offset: usize = (3 - 1) * envelope_size;
10109
10110            // Zero reserved fields.
10111            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10112
10113            // Safety:
10114            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10115            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10116            //   envelope_size bytes, there is always sufficient room.
10117            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10118                self.ipv6_to_ipv4_packets
10119                    .as_ref()
10120                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10121                encoder,
10122                offset + cur_offset,
10123                depth,
10124            )?;
10125
10126            _prev_end_offset = cur_offset + envelope_size;
10127            if 4 > max_ordinal {
10128                return Ok(());
10129            }
10130
10131            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10132            // are envelope_size bytes.
10133            let cur_offset: usize = (4 - 1) * envelope_size;
10134
10135            // Zero reserved fields.
10136            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10137
10138            // Safety:
10139            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10140            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10141            //   envelope_size bytes, there is always sufficient room.
10142            fidl::encoding::encode_in_envelope_optional::<u64, D>(
10143                self.ipv6_to_ipv4_bytes
10144                    .as_ref()
10145                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
10146                encoder,
10147                offset + cur_offset,
10148                depth,
10149            )?;
10150
10151            _prev_end_offset = cur_offset + envelope_size;
10152
10153            Ok(())
10154        }
10155    }
10156
10157    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Nat64TrafficCounters {
10158        #[inline(always)]
10159        fn new_empty() -> Self {
10160            Self::default()
10161        }
10162
10163        unsafe fn decode(
10164            &mut self,
10165            decoder: &mut fidl::encoding::Decoder<'_, D>,
10166            offset: usize,
10167            mut depth: fidl::encoding::Depth,
10168        ) -> fidl::Result<()> {
10169            decoder.debug_check_bounds::<Self>(offset);
10170            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10171                None => return Err(fidl::Error::NotNullable),
10172                Some(len) => len,
10173            };
10174            // Calling decoder.out_of_line_offset(0) is not allowed.
10175            if len == 0 {
10176                return Ok(());
10177            };
10178            depth.increment()?;
10179            let envelope_size = 8;
10180            let bytes_len = len * envelope_size;
10181            let offset = decoder.out_of_line_offset(bytes_len)?;
10182            // Decode the envelope for each type.
10183            let mut _next_ordinal_to_read = 0;
10184            let mut next_offset = offset;
10185            let end_offset = offset + bytes_len;
10186            _next_ordinal_to_read += 1;
10187            if next_offset >= end_offset {
10188                return Ok(());
10189            }
10190
10191            // Decode unknown envelopes for gaps in ordinals.
10192            while _next_ordinal_to_read < 1 {
10193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10194                _next_ordinal_to_read += 1;
10195                next_offset += envelope_size;
10196            }
10197
10198            let next_out_of_line = decoder.next_out_of_line();
10199            let handles_before = decoder.remaining_handles();
10200            if let Some((inlined, num_bytes, num_handles)) =
10201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10202            {
10203                let member_inline_size =
10204                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10205                if inlined != (member_inline_size <= 4) {
10206                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10207                }
10208                let inner_offset;
10209                let mut inner_depth = depth.clone();
10210                if inlined {
10211                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10212                    inner_offset = next_offset;
10213                } else {
10214                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10215                    inner_depth.increment()?;
10216                }
10217                let val_ref =
10218                    self.ipv4_to_ipv6_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10219                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10221                {
10222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10223                }
10224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10226                }
10227            }
10228
10229            next_offset += envelope_size;
10230            _next_ordinal_to_read += 1;
10231            if next_offset >= end_offset {
10232                return Ok(());
10233            }
10234
10235            // Decode unknown envelopes for gaps in ordinals.
10236            while _next_ordinal_to_read < 2 {
10237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10238                _next_ordinal_to_read += 1;
10239                next_offset += envelope_size;
10240            }
10241
10242            let next_out_of_line = decoder.next_out_of_line();
10243            let handles_before = decoder.remaining_handles();
10244            if let Some((inlined, num_bytes, num_handles)) =
10245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10246            {
10247                let member_inline_size =
10248                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10249                if inlined != (member_inline_size <= 4) {
10250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10251                }
10252                let inner_offset;
10253                let mut inner_depth = depth.clone();
10254                if inlined {
10255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10256                    inner_offset = next_offset;
10257                } else {
10258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10259                    inner_depth.increment()?;
10260                }
10261                let val_ref =
10262                    self.ipv4_to_ipv6_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10263                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10265                {
10266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10267                }
10268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10270                }
10271            }
10272
10273            next_offset += envelope_size;
10274            _next_ordinal_to_read += 1;
10275            if next_offset >= end_offset {
10276                return Ok(());
10277            }
10278
10279            // Decode unknown envelopes for gaps in ordinals.
10280            while _next_ordinal_to_read < 3 {
10281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10282                _next_ordinal_to_read += 1;
10283                next_offset += envelope_size;
10284            }
10285
10286            let next_out_of_line = decoder.next_out_of_line();
10287            let handles_before = decoder.remaining_handles();
10288            if let Some((inlined, num_bytes, num_handles)) =
10289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10290            {
10291                let member_inline_size =
10292                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10293                if inlined != (member_inline_size <= 4) {
10294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10295                }
10296                let inner_offset;
10297                let mut inner_depth = depth.clone();
10298                if inlined {
10299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10300                    inner_offset = next_offset;
10301                } else {
10302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10303                    inner_depth.increment()?;
10304                }
10305                let val_ref =
10306                    self.ipv6_to_ipv4_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
10307                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10309                {
10310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10311                }
10312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10314                }
10315            }
10316
10317            next_offset += envelope_size;
10318            _next_ordinal_to_read += 1;
10319            if next_offset >= end_offset {
10320                return Ok(());
10321            }
10322
10323            // Decode unknown envelopes for gaps in ordinals.
10324            while _next_ordinal_to_read < 4 {
10325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10326                _next_ordinal_to_read += 1;
10327                next_offset += envelope_size;
10328            }
10329
10330            let next_out_of_line = decoder.next_out_of_line();
10331            let handles_before = decoder.remaining_handles();
10332            if let Some((inlined, num_bytes, num_handles)) =
10333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10334            {
10335                let member_inline_size =
10336                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10337                if inlined != (member_inline_size <= 4) {
10338                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10339                }
10340                let inner_offset;
10341                let mut inner_depth = depth.clone();
10342                if inlined {
10343                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10344                    inner_offset = next_offset;
10345                } else {
10346                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10347                    inner_depth.increment()?;
10348                }
10349                let val_ref =
10350                    self.ipv6_to_ipv4_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
10351                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
10352                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10353                {
10354                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10355                }
10356                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10357                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10358                }
10359            }
10360
10361            next_offset += envelope_size;
10362
10363            // Decode the remaining unknown envelopes.
10364            while next_offset < end_offset {
10365                _next_ordinal_to_read += 1;
10366                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10367                next_offset += envelope_size;
10368            }
10369
10370            Ok(())
10371        }
10372    }
10373
10374    impl NetworkScanParameters {
10375        #[inline(always)]
10376        fn max_ordinal_present(&self) -> u64 {
10377            if let Some(_) = self.tx_power_dbm {
10378                return 2;
10379            }
10380            if let Some(_) = self.channels {
10381                return 1;
10382            }
10383            0
10384        }
10385    }
10386
10387    impl fidl::encoding::ValueTypeMarker for NetworkScanParameters {
10388        type Borrowed<'a> = &'a Self;
10389        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10390            value
10391        }
10392    }
10393
10394    unsafe impl fidl::encoding::TypeMarker for NetworkScanParameters {
10395        type Owned = Self;
10396
10397        #[inline(always)]
10398        fn inline_align(_context: fidl::encoding::Context) -> usize {
10399            8
10400        }
10401
10402        #[inline(always)]
10403        fn inline_size(_context: fidl::encoding::Context) -> usize {
10404            16
10405        }
10406    }
10407
10408    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkScanParameters, D>
10409        for &NetworkScanParameters
10410    {
10411        unsafe fn encode(
10412            self,
10413            encoder: &mut fidl::encoding::Encoder<'_, D>,
10414            offset: usize,
10415            mut depth: fidl::encoding::Depth,
10416        ) -> fidl::Result<()> {
10417            encoder.debug_check_bounds::<NetworkScanParameters>(offset);
10418            // Vector header
10419            let max_ordinal: u64 = self.max_ordinal_present();
10420            encoder.write_num(max_ordinal, offset);
10421            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10422            // Calling encoder.out_of_line_offset(0) is not allowed.
10423            if max_ordinal == 0 {
10424                return Ok(());
10425            }
10426            depth.increment()?;
10427            let envelope_size = 8;
10428            let bytes_len = max_ordinal as usize * envelope_size;
10429            #[allow(unused_variables)]
10430            let offset = encoder.out_of_line_offset(bytes_len);
10431            let mut _prev_end_offset: usize = 0;
10432            if 1 > max_ordinal {
10433                return Ok(());
10434            }
10435
10436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10437            // are envelope_size bytes.
10438            let cur_offset: usize = (1 - 1) * envelope_size;
10439
10440            // Zero reserved fields.
10441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10442
10443            // Safety:
10444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10446            //   envelope_size bytes, there is always sufficient room.
10447            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u16, 200>, D>(
10448                self.channels.as_ref().map(
10449                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::ValueTypeMarker>::borrow,
10450                ),
10451                encoder,
10452                offset + cur_offset,
10453                depth,
10454            )?;
10455
10456            _prev_end_offset = cur_offset + envelope_size;
10457            if 2 > max_ordinal {
10458                return Ok(());
10459            }
10460
10461            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10462            // are envelope_size bytes.
10463            let cur_offset: usize = (2 - 1) * envelope_size;
10464
10465            // Zero reserved fields.
10466            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10467
10468            // Safety:
10469            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10470            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10471            //   envelope_size bytes, there is always sufficient room.
10472            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10473                self.tx_power_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10474                encoder,
10475                offset + cur_offset,
10476                depth,
10477            )?;
10478
10479            _prev_end_offset = cur_offset + envelope_size;
10480
10481            Ok(())
10482        }
10483    }
10484
10485    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkScanParameters {
10486        #[inline(always)]
10487        fn new_empty() -> Self {
10488            Self::default()
10489        }
10490
10491        unsafe fn decode(
10492            &mut self,
10493            decoder: &mut fidl::encoding::Decoder<'_, D>,
10494            offset: usize,
10495            mut depth: fidl::encoding::Depth,
10496        ) -> fidl::Result<()> {
10497            decoder.debug_check_bounds::<Self>(offset);
10498            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10499                None => return Err(fidl::Error::NotNullable),
10500                Some(len) => len,
10501            };
10502            // Calling decoder.out_of_line_offset(0) is not allowed.
10503            if len == 0 {
10504                return Ok(());
10505            };
10506            depth.increment()?;
10507            let envelope_size = 8;
10508            let bytes_len = len * envelope_size;
10509            let offset = decoder.out_of_line_offset(bytes_len)?;
10510            // Decode the envelope for each type.
10511            let mut _next_ordinal_to_read = 0;
10512            let mut next_offset = offset;
10513            let end_offset = offset + bytes_len;
10514            _next_ordinal_to_read += 1;
10515            if next_offset >= end_offset {
10516                return Ok(());
10517            }
10518
10519            // Decode unknown envelopes for gaps in ordinals.
10520            while _next_ordinal_to_read < 1 {
10521                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10522                _next_ordinal_to_read += 1;
10523                next_offset += envelope_size;
10524            }
10525
10526            let next_out_of_line = decoder.next_out_of_line();
10527            let handles_before = decoder.remaining_handles();
10528            if let Some((inlined, num_bytes, num_handles)) =
10529                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10530            {
10531                let member_inline_size =
10532                    <fidl::encoding::Vector<u16, 200> as fidl::encoding::TypeMarker>::inline_size(
10533                        decoder.context,
10534                    );
10535                if inlined != (member_inline_size <= 4) {
10536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10537                }
10538                let inner_offset;
10539                let mut inner_depth = depth.clone();
10540                if inlined {
10541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10542                    inner_offset = next_offset;
10543                } else {
10544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10545                    inner_depth.increment()?;
10546                }
10547                let val_ref = self
10548                    .channels
10549                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u16, 200>, D));
10550                fidl::decode!(fidl::encoding::Vector<u16, 200>, D, val_ref, decoder, inner_offset, inner_depth)?;
10551                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10552                {
10553                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10554                }
10555                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10556                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10557                }
10558            }
10559
10560            next_offset += envelope_size;
10561            _next_ordinal_to_read += 1;
10562            if next_offset >= end_offset {
10563                return Ok(());
10564            }
10565
10566            // Decode unknown envelopes for gaps in ordinals.
10567            while _next_ordinal_to_read < 2 {
10568                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10569                _next_ordinal_to_read += 1;
10570                next_offset += envelope_size;
10571            }
10572
10573            let next_out_of_line = decoder.next_out_of_line();
10574            let handles_before = decoder.remaining_handles();
10575            if let Some((inlined, num_bytes, num_handles)) =
10576                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10577            {
10578                let member_inline_size =
10579                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10580                if inlined != (member_inline_size <= 4) {
10581                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10582                }
10583                let inner_offset;
10584                let mut inner_depth = depth.clone();
10585                if inlined {
10586                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10587                    inner_offset = next_offset;
10588                } else {
10589                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10590                    inner_depth.increment()?;
10591                }
10592                let val_ref = self.tx_power_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
10593                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
10594                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10595                {
10596                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10597                }
10598                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10599                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10600                }
10601            }
10602
10603            next_offset += envelope_size;
10604
10605            // Decode the remaining unknown envelopes.
10606            while next_offset < end_offset {
10607                _next_ordinal_to_read += 1;
10608                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10609                next_offset += envelope_size;
10610            }
10611
10612            Ok(())
10613        }
10614    }
10615
10616    impl OnMeshPrefix {
10617        #[inline(always)]
10618        fn max_ordinal_present(&self) -> u64 {
10619            if let Some(_) = self.slaac_valid {
10620                return 5;
10621            }
10622            if let Some(_) = self.slaac_preferred {
10623                return 4;
10624            }
10625            if let Some(_) = self.stable {
10626                return 3;
10627            }
10628            if let Some(_) = self.default_route_preference {
10629                return 2;
10630            }
10631            if let Some(_) = self.subnet {
10632                return 1;
10633            }
10634            0
10635        }
10636    }
10637
10638    impl fidl::encoding::ValueTypeMarker for OnMeshPrefix {
10639        type Borrowed<'a> = &'a Self;
10640        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10641            value
10642        }
10643    }
10644
10645    unsafe impl fidl::encoding::TypeMarker for OnMeshPrefix {
10646        type Owned = Self;
10647
10648        #[inline(always)]
10649        fn inline_align(_context: fidl::encoding::Context) -> usize {
10650            8
10651        }
10652
10653        #[inline(always)]
10654        fn inline_size(_context: fidl::encoding::Context) -> usize {
10655            16
10656        }
10657    }
10658
10659    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnMeshPrefix, D>
10660        for &OnMeshPrefix
10661    {
10662        unsafe fn encode(
10663            self,
10664            encoder: &mut fidl::encoding::Encoder<'_, D>,
10665            offset: usize,
10666            mut depth: fidl::encoding::Depth,
10667        ) -> fidl::Result<()> {
10668            encoder.debug_check_bounds::<OnMeshPrefix>(offset);
10669            // Vector header
10670            let max_ordinal: u64 = self.max_ordinal_present();
10671            encoder.write_num(max_ordinal, offset);
10672            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10673            // Calling encoder.out_of_line_offset(0) is not allowed.
10674            if max_ordinal == 0 {
10675                return Ok(());
10676            }
10677            depth.increment()?;
10678            let envelope_size = 8;
10679            let bytes_len = max_ordinal as usize * envelope_size;
10680            #[allow(unused_variables)]
10681            let offset = encoder.out_of_line_offset(bytes_len);
10682            let mut _prev_end_offset: usize = 0;
10683            if 1 > max_ordinal {
10684                return Ok(());
10685            }
10686
10687            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10688            // are envelope_size bytes.
10689            let cur_offset: usize = (1 - 1) * envelope_size;
10690
10691            // Zero reserved fields.
10692            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10693
10694            // Safety:
10695            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10696            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10697            //   envelope_size bytes, there is always sufficient room.
10698            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D>(
10699            self.subnet.as_ref().map(<fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::ValueTypeMarker>::borrow),
10700            encoder, offset + cur_offset, depth
10701        )?;
10702
10703            _prev_end_offset = cur_offset + envelope_size;
10704            if 2 > max_ordinal {
10705                return Ok(());
10706            }
10707
10708            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10709            // are envelope_size bytes.
10710            let cur_offset: usize = (2 - 1) * envelope_size;
10711
10712            // Zero reserved fields.
10713            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10714
10715            // Safety:
10716            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10717            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10718            //   envelope_size bytes, there is always sufficient room.
10719            fidl::encoding::encode_in_envelope_optional::<RoutePreference, D>(
10720                self.default_route_preference
10721                    .as_ref()
10722                    .map(<RoutePreference as fidl::encoding::ValueTypeMarker>::borrow),
10723                encoder,
10724                offset + cur_offset,
10725                depth,
10726            )?;
10727
10728            _prev_end_offset = cur_offset + envelope_size;
10729            if 3 > max_ordinal {
10730                return Ok(());
10731            }
10732
10733            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10734            // are envelope_size bytes.
10735            let cur_offset: usize = (3 - 1) * envelope_size;
10736
10737            // Zero reserved fields.
10738            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10739
10740            // Safety:
10741            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10742            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10743            //   envelope_size bytes, there is always sufficient room.
10744            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10745                self.stable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10746                encoder,
10747                offset + cur_offset,
10748                depth,
10749            )?;
10750
10751            _prev_end_offset = cur_offset + envelope_size;
10752            if 4 > max_ordinal {
10753                return Ok(());
10754            }
10755
10756            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10757            // are envelope_size bytes.
10758            let cur_offset: usize = (4 - 1) * envelope_size;
10759
10760            // Zero reserved fields.
10761            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10762
10763            // Safety:
10764            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10765            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10766            //   envelope_size bytes, there is always sufficient room.
10767            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10768                self.slaac_preferred
10769                    .as_ref()
10770                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10771                encoder,
10772                offset + cur_offset,
10773                depth,
10774            )?;
10775
10776            _prev_end_offset = cur_offset + envelope_size;
10777            if 5 > max_ordinal {
10778                return Ok(());
10779            }
10780
10781            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10782            // are envelope_size bytes.
10783            let cur_offset: usize = (5 - 1) * envelope_size;
10784
10785            // Zero reserved fields.
10786            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10787
10788            // Safety:
10789            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10790            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10791            //   envelope_size bytes, there is always sufficient room.
10792            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10793                self.slaac_valid.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10794                encoder,
10795                offset + cur_offset,
10796                depth,
10797            )?;
10798
10799            _prev_end_offset = cur_offset + envelope_size;
10800
10801            Ok(())
10802        }
10803    }
10804
10805    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnMeshPrefix {
10806        #[inline(always)]
10807        fn new_empty() -> Self {
10808            Self::default()
10809        }
10810
10811        unsafe fn decode(
10812            &mut self,
10813            decoder: &mut fidl::encoding::Decoder<'_, D>,
10814            offset: usize,
10815            mut depth: fidl::encoding::Depth,
10816        ) -> fidl::Result<()> {
10817            decoder.debug_check_bounds::<Self>(offset);
10818            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10819                None => return Err(fidl::Error::NotNullable),
10820                Some(len) => len,
10821            };
10822            // Calling decoder.out_of_line_offset(0) is not allowed.
10823            if len == 0 {
10824                return Ok(());
10825            };
10826            depth.increment()?;
10827            let envelope_size = 8;
10828            let bytes_len = len * envelope_size;
10829            let offset = decoder.out_of_line_offset(bytes_len)?;
10830            // Decode the envelope for each type.
10831            let mut _next_ordinal_to_read = 0;
10832            let mut next_offset = offset;
10833            let end_offset = offset + bytes_len;
10834            _next_ordinal_to_read += 1;
10835            if next_offset >= end_offset {
10836                return Ok(());
10837            }
10838
10839            // Decode unknown envelopes for gaps in ordinals.
10840            while _next_ordinal_to_read < 1 {
10841                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10842                _next_ordinal_to_read += 1;
10843                next_offset += envelope_size;
10844            }
10845
10846            let next_out_of_line = decoder.next_out_of_line();
10847            let handles_before = decoder.remaining_handles();
10848            if let Some((inlined, num_bytes, num_handles)) =
10849                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10850            {
10851                let member_inline_size = <fidl_fuchsia_net__common::Ipv6AddressWithPrefix as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10852                if inlined != (member_inline_size <= 4) {
10853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10854                }
10855                let inner_offset;
10856                let mut inner_depth = depth.clone();
10857                if inlined {
10858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10859                    inner_offset = next_offset;
10860                } else {
10861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10862                    inner_depth.increment()?;
10863                }
10864                let val_ref = self.subnet.get_or_insert_with(|| {
10865                    fidl::new_empty!(fidl_fuchsia_net__common::Ipv6AddressWithPrefix, D)
10866                });
10867                fidl::decode!(
10868                    fidl_fuchsia_net__common::Ipv6AddressWithPrefix,
10869                    D,
10870                    val_ref,
10871                    decoder,
10872                    inner_offset,
10873                    inner_depth
10874                )?;
10875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10876                {
10877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10878                }
10879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10881                }
10882            }
10883
10884            next_offset += envelope_size;
10885            _next_ordinal_to_read += 1;
10886            if next_offset >= end_offset {
10887                return Ok(());
10888            }
10889
10890            // Decode unknown envelopes for gaps in ordinals.
10891            while _next_ordinal_to_read < 2 {
10892                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10893                _next_ordinal_to_read += 1;
10894                next_offset += envelope_size;
10895            }
10896
10897            let next_out_of_line = decoder.next_out_of_line();
10898            let handles_before = decoder.remaining_handles();
10899            if let Some((inlined, num_bytes, num_handles)) =
10900                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10901            {
10902                let member_inline_size =
10903                    <RoutePreference as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10904                if inlined != (member_inline_size <= 4) {
10905                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10906                }
10907                let inner_offset;
10908                let mut inner_depth = depth.clone();
10909                if inlined {
10910                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10911                    inner_offset = next_offset;
10912                } else {
10913                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10914                    inner_depth.increment()?;
10915                }
10916                let val_ref = self
10917                    .default_route_preference
10918                    .get_or_insert_with(|| fidl::new_empty!(RoutePreference, D));
10919                fidl::decode!(RoutePreference, D, val_ref, decoder, inner_offset, inner_depth)?;
10920                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10921                {
10922                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10923                }
10924                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10925                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10926                }
10927            }
10928
10929            next_offset += envelope_size;
10930            _next_ordinal_to_read += 1;
10931            if next_offset >= end_offset {
10932                return Ok(());
10933            }
10934
10935            // Decode unknown envelopes for gaps in ordinals.
10936            while _next_ordinal_to_read < 3 {
10937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10938                _next_ordinal_to_read += 1;
10939                next_offset += envelope_size;
10940            }
10941
10942            let next_out_of_line = decoder.next_out_of_line();
10943            let handles_before = decoder.remaining_handles();
10944            if let Some((inlined, num_bytes, num_handles)) =
10945                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10946            {
10947                let member_inline_size =
10948                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10949                if inlined != (member_inline_size <= 4) {
10950                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10951                }
10952                let inner_offset;
10953                let mut inner_depth = depth.clone();
10954                if inlined {
10955                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10956                    inner_offset = next_offset;
10957                } else {
10958                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10959                    inner_depth.increment()?;
10960                }
10961                let val_ref = self.stable.get_or_insert_with(|| fidl::new_empty!(bool, D));
10962                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10963                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10964                {
10965                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10966                }
10967                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10968                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10969                }
10970            }
10971
10972            next_offset += envelope_size;
10973            _next_ordinal_to_read += 1;
10974            if next_offset >= end_offset {
10975                return Ok(());
10976            }
10977
10978            // Decode unknown envelopes for gaps in ordinals.
10979            while _next_ordinal_to_read < 4 {
10980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10981                _next_ordinal_to_read += 1;
10982                next_offset += envelope_size;
10983            }
10984
10985            let next_out_of_line = decoder.next_out_of_line();
10986            let handles_before = decoder.remaining_handles();
10987            if let Some((inlined, num_bytes, num_handles)) =
10988                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10989            {
10990                let member_inline_size =
10991                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10992                if inlined != (member_inline_size <= 4) {
10993                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10994                }
10995                let inner_offset;
10996                let mut inner_depth = depth.clone();
10997                if inlined {
10998                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10999                    inner_offset = next_offset;
11000                } else {
11001                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11002                    inner_depth.increment()?;
11003                }
11004                let val_ref = self.slaac_preferred.get_or_insert_with(|| fidl::new_empty!(bool, D));
11005                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11007                {
11008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11009                }
11010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11012                }
11013            }
11014
11015            next_offset += envelope_size;
11016            _next_ordinal_to_read += 1;
11017            if next_offset >= end_offset {
11018                return Ok(());
11019            }
11020
11021            // Decode unknown envelopes for gaps in ordinals.
11022            while _next_ordinal_to_read < 5 {
11023                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11024                _next_ordinal_to_read += 1;
11025                next_offset += envelope_size;
11026            }
11027
11028            let next_out_of_line = decoder.next_out_of_line();
11029            let handles_before = decoder.remaining_handles();
11030            if let Some((inlined, num_bytes, num_handles)) =
11031                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11032            {
11033                let member_inline_size =
11034                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11035                if inlined != (member_inline_size <= 4) {
11036                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11037                }
11038                let inner_offset;
11039                let mut inner_depth = depth.clone();
11040                if inlined {
11041                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11042                    inner_offset = next_offset;
11043                } else {
11044                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11045                    inner_depth.increment()?;
11046                }
11047                let val_ref = self.slaac_valid.get_or_insert_with(|| fidl::new_empty!(bool, D));
11048                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11050                {
11051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11052                }
11053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11055                }
11056            }
11057
11058            next_offset += envelope_size;
11059
11060            // Decode the remaining unknown envelopes.
11061            while next_offset < end_offset {
11062                _next_ordinal_to_read += 1;
11063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11064                next_offset += envelope_size;
11065            }
11066
11067            Ok(())
11068        }
11069    }
11070
11071    impl PdProcessedRaInfo {
11072        #[inline(always)]
11073        fn max_ordinal_present(&self) -> u64 {
11074            if let Some(_) = self.last_platform_ra_msec {
11075                return 3;
11076            }
11077            if let Some(_) = self.num_platform_pio_processed {
11078                return 2;
11079            }
11080            if let Some(_) = self.num_platform_ra_received {
11081                return 1;
11082            }
11083            0
11084        }
11085    }
11086
11087    impl fidl::encoding::ValueTypeMarker for PdProcessedRaInfo {
11088        type Borrowed<'a> = &'a Self;
11089        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11090            value
11091        }
11092    }
11093
11094    unsafe impl fidl::encoding::TypeMarker for PdProcessedRaInfo {
11095        type Owned = Self;
11096
11097        #[inline(always)]
11098        fn inline_align(_context: fidl::encoding::Context) -> usize {
11099            8
11100        }
11101
11102        #[inline(always)]
11103        fn inline_size(_context: fidl::encoding::Context) -> usize {
11104            16
11105        }
11106    }
11107
11108    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PdProcessedRaInfo, D>
11109        for &PdProcessedRaInfo
11110    {
11111        unsafe fn encode(
11112            self,
11113            encoder: &mut fidl::encoding::Encoder<'_, D>,
11114            offset: usize,
11115            mut depth: fidl::encoding::Depth,
11116        ) -> fidl::Result<()> {
11117            encoder.debug_check_bounds::<PdProcessedRaInfo>(offset);
11118            // Vector header
11119            let max_ordinal: u64 = self.max_ordinal_present();
11120            encoder.write_num(max_ordinal, offset);
11121            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11122            // Calling encoder.out_of_line_offset(0) is not allowed.
11123            if max_ordinal == 0 {
11124                return Ok(());
11125            }
11126            depth.increment()?;
11127            let envelope_size = 8;
11128            let bytes_len = max_ordinal as usize * envelope_size;
11129            #[allow(unused_variables)]
11130            let offset = encoder.out_of_line_offset(bytes_len);
11131            let mut _prev_end_offset: usize = 0;
11132            if 1 > max_ordinal {
11133                return Ok(());
11134            }
11135
11136            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11137            // are envelope_size bytes.
11138            let cur_offset: usize = (1 - 1) * envelope_size;
11139
11140            // Zero reserved fields.
11141            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11142
11143            // Safety:
11144            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11145            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11146            //   envelope_size bytes, there is always sufficient room.
11147            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11148                self.num_platform_ra_received
11149                    .as_ref()
11150                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11151                encoder,
11152                offset + cur_offset,
11153                depth,
11154            )?;
11155
11156            _prev_end_offset = cur_offset + envelope_size;
11157            if 2 > max_ordinal {
11158                return Ok(());
11159            }
11160
11161            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11162            // are envelope_size bytes.
11163            let cur_offset: usize = (2 - 1) * envelope_size;
11164
11165            // Zero reserved fields.
11166            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11167
11168            // Safety:
11169            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11170            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11171            //   envelope_size bytes, there is always sufficient room.
11172            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11173                self.num_platform_pio_processed
11174                    .as_ref()
11175                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11176                encoder,
11177                offset + cur_offset,
11178                depth,
11179            )?;
11180
11181            _prev_end_offset = cur_offset + envelope_size;
11182            if 3 > max_ordinal {
11183                return Ok(());
11184            }
11185
11186            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11187            // are envelope_size bytes.
11188            let cur_offset: usize = (3 - 1) * envelope_size;
11189
11190            // Zero reserved fields.
11191            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11192
11193            // Safety:
11194            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11195            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11196            //   envelope_size bytes, there is always sufficient room.
11197            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11198                self.last_platform_ra_msec
11199                    .as_ref()
11200                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11201                encoder,
11202                offset + cur_offset,
11203                depth,
11204            )?;
11205
11206            _prev_end_offset = cur_offset + envelope_size;
11207
11208            Ok(())
11209        }
11210    }
11211
11212    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PdProcessedRaInfo {
11213        #[inline(always)]
11214        fn new_empty() -> Self {
11215            Self::default()
11216        }
11217
11218        unsafe fn decode(
11219            &mut self,
11220            decoder: &mut fidl::encoding::Decoder<'_, D>,
11221            offset: usize,
11222            mut depth: fidl::encoding::Depth,
11223        ) -> fidl::Result<()> {
11224            decoder.debug_check_bounds::<Self>(offset);
11225            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11226                None => return Err(fidl::Error::NotNullable),
11227                Some(len) => len,
11228            };
11229            // Calling decoder.out_of_line_offset(0) is not allowed.
11230            if len == 0 {
11231                return Ok(());
11232            };
11233            depth.increment()?;
11234            let envelope_size = 8;
11235            let bytes_len = len * envelope_size;
11236            let offset = decoder.out_of_line_offset(bytes_len)?;
11237            // Decode the envelope for each type.
11238            let mut _next_ordinal_to_read = 0;
11239            let mut next_offset = offset;
11240            let end_offset = offset + bytes_len;
11241            _next_ordinal_to_read += 1;
11242            if next_offset >= end_offset {
11243                return Ok(());
11244            }
11245
11246            // Decode unknown envelopes for gaps in ordinals.
11247            while _next_ordinal_to_read < 1 {
11248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11249                _next_ordinal_to_read += 1;
11250                next_offset += envelope_size;
11251            }
11252
11253            let next_out_of_line = decoder.next_out_of_line();
11254            let handles_before = decoder.remaining_handles();
11255            if let Some((inlined, num_bytes, num_handles)) =
11256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11257            {
11258                let member_inline_size =
11259                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11260                if inlined != (member_inline_size <= 4) {
11261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11262                }
11263                let inner_offset;
11264                let mut inner_depth = depth.clone();
11265                if inlined {
11266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11267                    inner_offset = next_offset;
11268                } else {
11269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11270                    inner_depth.increment()?;
11271                }
11272                let val_ref =
11273                    self.num_platform_ra_received.get_or_insert_with(|| fidl::new_empty!(u32, D));
11274                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11276                {
11277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11278                }
11279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11281                }
11282            }
11283
11284            next_offset += envelope_size;
11285            _next_ordinal_to_read += 1;
11286            if next_offset >= end_offset {
11287                return Ok(());
11288            }
11289
11290            // Decode unknown envelopes for gaps in ordinals.
11291            while _next_ordinal_to_read < 2 {
11292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11293                _next_ordinal_to_read += 1;
11294                next_offset += envelope_size;
11295            }
11296
11297            let next_out_of_line = decoder.next_out_of_line();
11298            let handles_before = decoder.remaining_handles();
11299            if let Some((inlined, num_bytes, num_handles)) =
11300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11301            {
11302                let member_inline_size =
11303                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11304                if inlined != (member_inline_size <= 4) {
11305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11306                }
11307                let inner_offset;
11308                let mut inner_depth = depth.clone();
11309                if inlined {
11310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11311                    inner_offset = next_offset;
11312                } else {
11313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11314                    inner_depth.increment()?;
11315                }
11316                let val_ref =
11317                    self.num_platform_pio_processed.get_or_insert_with(|| fidl::new_empty!(u32, D));
11318                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11319                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11320                {
11321                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11322                }
11323                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11324                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11325                }
11326            }
11327
11328            next_offset += envelope_size;
11329            _next_ordinal_to_read += 1;
11330            if next_offset >= end_offset {
11331                return Ok(());
11332            }
11333
11334            // Decode unknown envelopes for gaps in ordinals.
11335            while _next_ordinal_to_read < 3 {
11336                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11337                _next_ordinal_to_read += 1;
11338                next_offset += envelope_size;
11339            }
11340
11341            let next_out_of_line = decoder.next_out_of_line();
11342            let handles_before = decoder.remaining_handles();
11343            if let Some((inlined, num_bytes, num_handles)) =
11344                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11345            {
11346                let member_inline_size =
11347                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11348                if inlined != (member_inline_size <= 4) {
11349                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11350                }
11351                let inner_offset;
11352                let mut inner_depth = depth.clone();
11353                if inlined {
11354                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11355                    inner_offset = next_offset;
11356                } else {
11357                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11358                    inner_depth.increment()?;
11359                }
11360                let val_ref =
11361                    self.last_platform_ra_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
11362                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11364                {
11365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11366                }
11367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11369                }
11370            }
11371
11372            next_offset += envelope_size;
11373
11374            // Decode the remaining unknown envelopes.
11375            while next_offset < end_offset {
11376                _next_ordinal_to_read += 1;
11377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11378                next_offset += envelope_size;
11379            }
11380
11381            Ok(())
11382        }
11383    }
11384
11385    impl SrpServerInfo {
11386        #[inline(always)]
11387        fn max_ordinal_present(&self) -> u64 {
11388            if let Some(_) = self.services_registration {
11389                return 6;
11390            }
11391            if let Some(_) = self.hosts_registration {
11392                return 5;
11393            }
11394            if let Some(_) = self.response_counters {
11395                return 4;
11396            }
11397            if let Some(_) = self.address_mode {
11398                return 3;
11399            }
11400            if let Some(_) = self.port {
11401                return 2;
11402            }
11403            if let Some(_) = self.state {
11404                return 1;
11405            }
11406            0
11407        }
11408    }
11409
11410    impl fidl::encoding::ValueTypeMarker for SrpServerInfo {
11411        type Borrowed<'a> = &'a Self;
11412        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11413            value
11414        }
11415    }
11416
11417    unsafe impl fidl::encoding::TypeMarker for SrpServerInfo {
11418        type Owned = Self;
11419
11420        #[inline(always)]
11421        fn inline_align(_context: fidl::encoding::Context) -> usize {
11422            8
11423        }
11424
11425        #[inline(always)]
11426        fn inline_size(_context: fidl::encoding::Context) -> usize {
11427            16
11428        }
11429    }
11430
11431    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerInfo, D>
11432        for &SrpServerInfo
11433    {
11434        unsafe fn encode(
11435            self,
11436            encoder: &mut fidl::encoding::Encoder<'_, D>,
11437            offset: usize,
11438            mut depth: fidl::encoding::Depth,
11439        ) -> fidl::Result<()> {
11440            encoder.debug_check_bounds::<SrpServerInfo>(offset);
11441            // Vector header
11442            let max_ordinal: u64 = self.max_ordinal_present();
11443            encoder.write_num(max_ordinal, offset);
11444            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11445            // Calling encoder.out_of_line_offset(0) is not allowed.
11446            if max_ordinal == 0 {
11447                return Ok(());
11448            }
11449            depth.increment()?;
11450            let envelope_size = 8;
11451            let bytes_len = max_ordinal as usize * envelope_size;
11452            #[allow(unused_variables)]
11453            let offset = encoder.out_of_line_offset(bytes_len);
11454            let mut _prev_end_offset: usize = 0;
11455            if 1 > max_ordinal {
11456                return Ok(());
11457            }
11458
11459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11460            // are envelope_size bytes.
11461            let cur_offset: usize = (1 - 1) * envelope_size;
11462
11463            // Zero reserved fields.
11464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11465
11466            // Safety:
11467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11469            //   envelope_size bytes, there is always sufficient room.
11470            fidl::encoding::encode_in_envelope_optional::<SrpServerState, D>(
11471                self.state
11472                    .as_ref()
11473                    .map(<SrpServerState as fidl::encoding::ValueTypeMarker>::borrow),
11474                encoder,
11475                offset + cur_offset,
11476                depth,
11477            )?;
11478
11479            _prev_end_offset = cur_offset + envelope_size;
11480            if 2 > max_ordinal {
11481                return Ok(());
11482            }
11483
11484            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11485            // are envelope_size bytes.
11486            let cur_offset: usize = (2 - 1) * envelope_size;
11487
11488            // Zero reserved fields.
11489            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11490
11491            // Safety:
11492            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11493            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11494            //   envelope_size bytes, there is always sufficient room.
11495            fidl::encoding::encode_in_envelope_optional::<u16, D>(
11496                self.port.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
11497                encoder,
11498                offset + cur_offset,
11499                depth,
11500            )?;
11501
11502            _prev_end_offset = cur_offset + envelope_size;
11503            if 3 > max_ordinal {
11504                return Ok(());
11505            }
11506
11507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11508            // are envelope_size bytes.
11509            let cur_offset: usize = (3 - 1) * envelope_size;
11510
11511            // Zero reserved fields.
11512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11513
11514            // Safety:
11515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11517            //   envelope_size bytes, there is always sufficient room.
11518            fidl::encoding::encode_in_envelope_optional::<SrpServerAddressMode, D>(
11519                self.address_mode
11520                    .as_ref()
11521                    .map(<SrpServerAddressMode as fidl::encoding::ValueTypeMarker>::borrow),
11522                encoder,
11523                offset + cur_offset,
11524                depth,
11525            )?;
11526
11527            _prev_end_offset = cur_offset + envelope_size;
11528            if 4 > max_ordinal {
11529                return Ok(());
11530            }
11531
11532            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11533            // are envelope_size bytes.
11534            let cur_offset: usize = (4 - 1) * envelope_size;
11535
11536            // Zero reserved fields.
11537            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11538
11539            // Safety:
11540            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11541            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11542            //   envelope_size bytes, there is always sufficient room.
11543            fidl::encoding::encode_in_envelope_optional::<SrpServerResponseCounters, D>(
11544                self.response_counters
11545                    .as_ref()
11546                    .map(<SrpServerResponseCounters as fidl::encoding::ValueTypeMarker>::borrow),
11547                encoder,
11548                offset + cur_offset,
11549                depth,
11550            )?;
11551
11552            _prev_end_offset = cur_offset + envelope_size;
11553            if 5 > max_ordinal {
11554                return Ok(());
11555            }
11556
11557            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11558            // are envelope_size bytes.
11559            let cur_offset: usize = (5 - 1) * envelope_size;
11560
11561            // Zero reserved fields.
11562            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11563
11564            // Safety:
11565            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11566            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11567            //   envelope_size bytes, there is always sufficient room.
11568            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11569                self.hosts_registration
11570                    .as_ref()
11571                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11572                encoder,
11573                offset + cur_offset,
11574                depth,
11575            )?;
11576
11577            _prev_end_offset = cur_offset + envelope_size;
11578            if 6 > max_ordinal {
11579                return Ok(());
11580            }
11581
11582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11583            // are envelope_size bytes.
11584            let cur_offset: usize = (6 - 1) * envelope_size;
11585
11586            // Zero reserved fields.
11587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11588
11589            // Safety:
11590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11592            //   envelope_size bytes, there is always sufficient room.
11593            fidl::encoding::encode_in_envelope_optional::<SrpServerRegistration, D>(
11594                self.services_registration
11595                    .as_ref()
11596                    .map(<SrpServerRegistration as fidl::encoding::ValueTypeMarker>::borrow),
11597                encoder,
11598                offset + cur_offset,
11599                depth,
11600            )?;
11601
11602            _prev_end_offset = cur_offset + envelope_size;
11603
11604            Ok(())
11605        }
11606    }
11607
11608    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerInfo {
11609        #[inline(always)]
11610        fn new_empty() -> Self {
11611            Self::default()
11612        }
11613
11614        unsafe fn decode(
11615            &mut self,
11616            decoder: &mut fidl::encoding::Decoder<'_, D>,
11617            offset: usize,
11618            mut depth: fidl::encoding::Depth,
11619        ) -> fidl::Result<()> {
11620            decoder.debug_check_bounds::<Self>(offset);
11621            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11622                None => return Err(fidl::Error::NotNullable),
11623                Some(len) => len,
11624            };
11625            // Calling decoder.out_of_line_offset(0) is not allowed.
11626            if len == 0 {
11627                return Ok(());
11628            };
11629            depth.increment()?;
11630            let envelope_size = 8;
11631            let bytes_len = len * envelope_size;
11632            let offset = decoder.out_of_line_offset(bytes_len)?;
11633            // Decode the envelope for each type.
11634            let mut _next_ordinal_to_read = 0;
11635            let mut next_offset = offset;
11636            let end_offset = offset + bytes_len;
11637            _next_ordinal_to_read += 1;
11638            if next_offset >= end_offset {
11639                return Ok(());
11640            }
11641
11642            // Decode unknown envelopes for gaps in ordinals.
11643            while _next_ordinal_to_read < 1 {
11644                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11645                _next_ordinal_to_read += 1;
11646                next_offset += envelope_size;
11647            }
11648
11649            let next_out_of_line = decoder.next_out_of_line();
11650            let handles_before = decoder.remaining_handles();
11651            if let Some((inlined, num_bytes, num_handles)) =
11652                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11653            {
11654                let member_inline_size =
11655                    <SrpServerState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11656                if inlined != (member_inline_size <= 4) {
11657                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11658                }
11659                let inner_offset;
11660                let mut inner_depth = depth.clone();
11661                if inlined {
11662                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11663                    inner_offset = next_offset;
11664                } else {
11665                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11666                    inner_depth.increment()?;
11667                }
11668                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(SrpServerState, D));
11669                fidl::decode!(SrpServerState, D, val_ref, decoder, inner_offset, inner_depth)?;
11670                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11671                {
11672                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11673                }
11674                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11675                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11676                }
11677            }
11678
11679            next_offset += envelope_size;
11680            _next_ordinal_to_read += 1;
11681            if next_offset >= end_offset {
11682                return Ok(());
11683            }
11684
11685            // Decode unknown envelopes for gaps in ordinals.
11686            while _next_ordinal_to_read < 2 {
11687                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11688                _next_ordinal_to_read += 1;
11689                next_offset += envelope_size;
11690            }
11691
11692            let next_out_of_line = decoder.next_out_of_line();
11693            let handles_before = decoder.remaining_handles();
11694            if let Some((inlined, num_bytes, num_handles)) =
11695                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11696            {
11697                let member_inline_size =
11698                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11699                if inlined != (member_inline_size <= 4) {
11700                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11701                }
11702                let inner_offset;
11703                let mut inner_depth = depth.clone();
11704                if inlined {
11705                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11706                    inner_offset = next_offset;
11707                } else {
11708                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11709                    inner_depth.increment()?;
11710                }
11711                let val_ref = self.port.get_or_insert_with(|| fidl::new_empty!(u16, D));
11712                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11713                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11714                {
11715                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11716                }
11717                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11718                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11719                }
11720            }
11721
11722            next_offset += envelope_size;
11723            _next_ordinal_to_read += 1;
11724            if next_offset >= end_offset {
11725                return Ok(());
11726            }
11727
11728            // Decode unknown envelopes for gaps in ordinals.
11729            while _next_ordinal_to_read < 3 {
11730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11731                _next_ordinal_to_read += 1;
11732                next_offset += envelope_size;
11733            }
11734
11735            let next_out_of_line = decoder.next_out_of_line();
11736            let handles_before = decoder.remaining_handles();
11737            if let Some((inlined, num_bytes, num_handles)) =
11738                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11739            {
11740                let member_inline_size =
11741                    <SrpServerAddressMode as fidl::encoding::TypeMarker>::inline_size(
11742                        decoder.context,
11743                    );
11744                if inlined != (member_inline_size <= 4) {
11745                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11746                }
11747                let inner_offset;
11748                let mut inner_depth = depth.clone();
11749                if inlined {
11750                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11751                    inner_offset = next_offset;
11752                } else {
11753                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11754                    inner_depth.increment()?;
11755                }
11756                let val_ref = self
11757                    .address_mode
11758                    .get_or_insert_with(|| fidl::new_empty!(SrpServerAddressMode, D));
11759                fidl::decode!(
11760                    SrpServerAddressMode,
11761                    D,
11762                    val_ref,
11763                    decoder,
11764                    inner_offset,
11765                    inner_depth
11766                )?;
11767                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11768                {
11769                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11770                }
11771                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11772                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11773                }
11774            }
11775
11776            next_offset += envelope_size;
11777            _next_ordinal_to_read += 1;
11778            if next_offset >= end_offset {
11779                return Ok(());
11780            }
11781
11782            // Decode unknown envelopes for gaps in ordinals.
11783            while _next_ordinal_to_read < 4 {
11784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11785                _next_ordinal_to_read += 1;
11786                next_offset += envelope_size;
11787            }
11788
11789            let next_out_of_line = decoder.next_out_of_line();
11790            let handles_before = decoder.remaining_handles();
11791            if let Some((inlined, num_bytes, num_handles)) =
11792                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11793            {
11794                let member_inline_size =
11795                    <SrpServerResponseCounters as fidl::encoding::TypeMarker>::inline_size(
11796                        decoder.context,
11797                    );
11798                if inlined != (member_inline_size <= 4) {
11799                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11800                }
11801                let inner_offset;
11802                let mut inner_depth = depth.clone();
11803                if inlined {
11804                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11805                    inner_offset = next_offset;
11806                } else {
11807                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11808                    inner_depth.increment()?;
11809                }
11810                let val_ref = self
11811                    .response_counters
11812                    .get_or_insert_with(|| fidl::new_empty!(SrpServerResponseCounters, D));
11813                fidl::decode!(
11814                    SrpServerResponseCounters,
11815                    D,
11816                    val_ref,
11817                    decoder,
11818                    inner_offset,
11819                    inner_depth
11820                )?;
11821                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11822                {
11823                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11824                }
11825                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11826                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11827                }
11828            }
11829
11830            next_offset += envelope_size;
11831            _next_ordinal_to_read += 1;
11832            if next_offset >= end_offset {
11833                return Ok(());
11834            }
11835
11836            // Decode unknown envelopes for gaps in ordinals.
11837            while _next_ordinal_to_read < 5 {
11838                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11839                _next_ordinal_to_read += 1;
11840                next_offset += envelope_size;
11841            }
11842
11843            let next_out_of_line = decoder.next_out_of_line();
11844            let handles_before = decoder.remaining_handles();
11845            if let Some((inlined, num_bytes, num_handles)) =
11846                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11847            {
11848                let member_inline_size =
11849                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11850                        decoder.context,
11851                    );
11852                if inlined != (member_inline_size <= 4) {
11853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11854                }
11855                let inner_offset;
11856                let mut inner_depth = depth.clone();
11857                if inlined {
11858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11859                    inner_offset = next_offset;
11860                } else {
11861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11862                    inner_depth.increment()?;
11863                }
11864                let val_ref = self
11865                    .hosts_registration
11866                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11867                fidl::decode!(
11868                    SrpServerRegistration,
11869                    D,
11870                    val_ref,
11871                    decoder,
11872                    inner_offset,
11873                    inner_depth
11874                )?;
11875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11876                {
11877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11878                }
11879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11881                }
11882            }
11883
11884            next_offset += envelope_size;
11885            _next_ordinal_to_read += 1;
11886            if next_offset >= end_offset {
11887                return Ok(());
11888            }
11889
11890            // Decode unknown envelopes for gaps in ordinals.
11891            while _next_ordinal_to_read < 6 {
11892                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11893                _next_ordinal_to_read += 1;
11894                next_offset += envelope_size;
11895            }
11896
11897            let next_out_of_line = decoder.next_out_of_line();
11898            let handles_before = decoder.remaining_handles();
11899            if let Some((inlined, num_bytes, num_handles)) =
11900                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11901            {
11902                let member_inline_size =
11903                    <SrpServerRegistration as fidl::encoding::TypeMarker>::inline_size(
11904                        decoder.context,
11905                    );
11906                if inlined != (member_inline_size <= 4) {
11907                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11908                }
11909                let inner_offset;
11910                let mut inner_depth = depth.clone();
11911                if inlined {
11912                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11913                    inner_offset = next_offset;
11914                } else {
11915                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11916                    inner_depth.increment()?;
11917                }
11918                let val_ref = self
11919                    .services_registration
11920                    .get_or_insert_with(|| fidl::new_empty!(SrpServerRegistration, D));
11921                fidl::decode!(
11922                    SrpServerRegistration,
11923                    D,
11924                    val_ref,
11925                    decoder,
11926                    inner_offset,
11927                    inner_depth
11928                )?;
11929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11930                {
11931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11932                }
11933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11935                }
11936            }
11937
11938            next_offset += envelope_size;
11939
11940            // Decode the remaining unknown envelopes.
11941            while next_offset < end_offset {
11942                _next_ordinal_to_read += 1;
11943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11944                next_offset += envelope_size;
11945            }
11946
11947            Ok(())
11948        }
11949    }
11950
11951    impl SrpServerRegistration {
11952        #[inline(always)]
11953        fn max_ordinal_present(&self) -> u64 {
11954            if let Some(_) = self.remaining_key_lease_time_total {
11955                return 6;
11956            }
11957            if let Some(_) = self.remaining_lease_time_total {
11958                return 5;
11959            }
11960            if let Some(_) = self.key_lease_time_total {
11961                return 4;
11962            }
11963            if let Some(_) = self.lease_time_total {
11964                return 3;
11965            }
11966            if let Some(_) = self.deleted_count {
11967                return 2;
11968            }
11969            if let Some(_) = self.fresh_count {
11970                return 1;
11971            }
11972            0
11973        }
11974    }
11975
11976    impl fidl::encoding::ValueTypeMarker for SrpServerRegistration {
11977        type Borrowed<'a> = &'a Self;
11978        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11979            value
11980        }
11981    }
11982
11983    unsafe impl fidl::encoding::TypeMarker for SrpServerRegistration {
11984        type Owned = Self;
11985
11986        #[inline(always)]
11987        fn inline_align(_context: fidl::encoding::Context) -> usize {
11988            8
11989        }
11990
11991        #[inline(always)]
11992        fn inline_size(_context: fidl::encoding::Context) -> usize {
11993            16
11994        }
11995    }
11996
11997    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SrpServerRegistration, D>
11998        for &SrpServerRegistration
11999    {
12000        unsafe fn encode(
12001            self,
12002            encoder: &mut fidl::encoding::Encoder<'_, D>,
12003            offset: usize,
12004            mut depth: fidl::encoding::Depth,
12005        ) -> fidl::Result<()> {
12006            encoder.debug_check_bounds::<SrpServerRegistration>(offset);
12007            // Vector header
12008            let max_ordinal: u64 = self.max_ordinal_present();
12009            encoder.write_num(max_ordinal, offset);
12010            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12011            // Calling encoder.out_of_line_offset(0) is not allowed.
12012            if max_ordinal == 0 {
12013                return Ok(());
12014            }
12015            depth.increment()?;
12016            let envelope_size = 8;
12017            let bytes_len = max_ordinal as usize * envelope_size;
12018            #[allow(unused_variables)]
12019            let offset = encoder.out_of_line_offset(bytes_len);
12020            let mut _prev_end_offset: usize = 0;
12021            if 1 > max_ordinal {
12022                return Ok(());
12023            }
12024
12025            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12026            // are envelope_size bytes.
12027            let cur_offset: usize = (1 - 1) * envelope_size;
12028
12029            // Zero reserved fields.
12030            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12031
12032            // Safety:
12033            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12034            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12035            //   envelope_size bytes, there is always sufficient room.
12036            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12037                self.fresh_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12038                encoder,
12039                offset + cur_offset,
12040                depth,
12041            )?;
12042
12043            _prev_end_offset = cur_offset + envelope_size;
12044            if 2 > max_ordinal {
12045                return Ok(());
12046            }
12047
12048            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12049            // are envelope_size bytes.
12050            let cur_offset: usize = (2 - 1) * envelope_size;
12051
12052            // Zero reserved fields.
12053            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12054
12055            // Safety:
12056            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12057            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12058            //   envelope_size bytes, there is always sufficient room.
12059            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12060                self.deleted_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12061                encoder,
12062                offset + cur_offset,
12063                depth,
12064            )?;
12065
12066            _prev_end_offset = cur_offset + envelope_size;
12067            if 3 > max_ordinal {
12068                return Ok(());
12069            }
12070
12071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12072            // are envelope_size bytes.
12073            let cur_offset: usize = (3 - 1) * envelope_size;
12074
12075            // Zero reserved fields.
12076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12077
12078            // Safety:
12079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12081            //   envelope_size bytes, there is always sufficient room.
12082            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12083                self.lease_time_total
12084                    .as_ref()
12085                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12086                encoder,
12087                offset + cur_offset,
12088                depth,
12089            )?;
12090
12091            _prev_end_offset = cur_offset + envelope_size;
12092            if 4 > max_ordinal {
12093                return Ok(());
12094            }
12095
12096            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12097            // are envelope_size bytes.
12098            let cur_offset: usize = (4 - 1) * envelope_size;
12099
12100            // Zero reserved fields.
12101            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12102
12103            // Safety:
12104            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12105            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12106            //   envelope_size bytes, there is always sufficient room.
12107            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12108                self.key_lease_time_total
12109                    .as_ref()
12110                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12111                encoder,
12112                offset + cur_offset,
12113                depth,
12114            )?;
12115
12116            _prev_end_offset = cur_offset + envelope_size;
12117            if 5 > max_ordinal {
12118                return Ok(());
12119            }
12120
12121            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12122            // are envelope_size bytes.
12123            let cur_offset: usize = (5 - 1) * envelope_size;
12124
12125            // Zero reserved fields.
12126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12127
12128            // Safety:
12129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12131            //   envelope_size bytes, there is always sufficient room.
12132            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12133                self.remaining_lease_time_total
12134                    .as_ref()
12135                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12136                encoder,
12137                offset + cur_offset,
12138                depth,
12139            )?;
12140
12141            _prev_end_offset = cur_offset + envelope_size;
12142            if 6 > max_ordinal {
12143                return Ok(());
12144            }
12145
12146            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12147            // are envelope_size bytes.
12148            let cur_offset: usize = (6 - 1) * envelope_size;
12149
12150            // Zero reserved fields.
12151            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12152
12153            // Safety:
12154            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12155            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12156            //   envelope_size bytes, there is always sufficient room.
12157            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12158                self.remaining_key_lease_time_total
12159                    .as_ref()
12160                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12161                encoder,
12162                offset + cur_offset,
12163                depth,
12164            )?;
12165
12166            _prev_end_offset = cur_offset + envelope_size;
12167
12168            Ok(())
12169        }
12170    }
12171
12172    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SrpServerRegistration {
12173        #[inline(always)]
12174        fn new_empty() -> Self {
12175            Self::default()
12176        }
12177
12178        unsafe fn decode(
12179            &mut self,
12180            decoder: &mut fidl::encoding::Decoder<'_, D>,
12181            offset: usize,
12182            mut depth: fidl::encoding::Depth,
12183        ) -> fidl::Result<()> {
12184            decoder.debug_check_bounds::<Self>(offset);
12185            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12186                None => return Err(fidl::Error::NotNullable),
12187                Some(len) => len,
12188            };
12189            // Calling decoder.out_of_line_offset(0) is not allowed.
12190            if len == 0 {
12191                return Ok(());
12192            };
12193            depth.increment()?;
12194            let envelope_size = 8;
12195            let bytes_len = len * envelope_size;
12196            let offset = decoder.out_of_line_offset(bytes_len)?;
12197            // Decode the envelope for each type.
12198            let mut _next_ordinal_to_read = 0;
12199            let mut next_offset = offset;
12200            let end_offset = offset + bytes_len;
12201            _next_ordinal_to_read += 1;
12202            if next_offset >= end_offset {
12203                return Ok(());
12204            }
12205
12206            // Decode unknown envelopes for gaps in ordinals.
12207            while _next_ordinal_to_read < 1 {
12208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12209                _next_ordinal_to_read += 1;
12210                next_offset += envelope_size;
12211            }
12212
12213            let next_out_of_line = decoder.next_out_of_line();
12214            let handles_before = decoder.remaining_handles();
12215            if let Some((inlined, num_bytes, num_handles)) =
12216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12217            {
12218                let member_inline_size =
12219                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12220                if inlined != (member_inline_size <= 4) {
12221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12222                }
12223                let inner_offset;
12224                let mut inner_depth = depth.clone();
12225                if inlined {
12226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12227                    inner_offset = next_offset;
12228                } else {
12229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12230                    inner_depth.increment()?;
12231                }
12232                let val_ref = self.fresh_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12233                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12234                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12235                {
12236                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12237                }
12238                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12239                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12240                }
12241            }
12242
12243            next_offset += envelope_size;
12244            _next_ordinal_to_read += 1;
12245            if next_offset >= end_offset {
12246                return Ok(());
12247            }
12248
12249            // Decode unknown envelopes for gaps in ordinals.
12250            while _next_ordinal_to_read < 2 {
12251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12252                _next_ordinal_to_read += 1;
12253                next_offset += envelope_size;
12254            }
12255
12256            let next_out_of_line = decoder.next_out_of_line();
12257            let handles_before = decoder.remaining_handles();
12258            if let Some((inlined, num_bytes, num_handles)) =
12259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12260            {
12261                let member_inline_size =
12262                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12263                if inlined != (member_inline_size <= 4) {
12264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12265                }
12266                let inner_offset;
12267                let mut inner_depth = depth.clone();
12268                if inlined {
12269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12270                    inner_offset = next_offset;
12271                } else {
12272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12273                    inner_depth.increment()?;
12274                }
12275                let val_ref = self.deleted_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
12276                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12277                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12278                {
12279                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12280                }
12281                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12282                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12283                }
12284            }
12285
12286            next_offset += envelope_size;
12287            _next_ordinal_to_read += 1;
12288            if next_offset >= end_offset {
12289                return Ok(());
12290            }
12291
12292            // Decode unknown envelopes for gaps in ordinals.
12293            while _next_ordinal_to_read < 3 {
12294                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12295                _next_ordinal_to_read += 1;
12296                next_offset += envelope_size;
12297            }
12298
12299            let next_out_of_line = decoder.next_out_of_line();
12300            let handles_before = decoder.remaining_handles();
12301            if let Some((inlined, num_bytes, num_handles)) =
12302                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12303            {
12304                let member_inline_size =
12305                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12306                if inlined != (member_inline_size <= 4) {
12307                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12308                }
12309                let inner_offset;
12310                let mut inner_depth = depth.clone();
12311                if inlined {
12312                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12313                    inner_offset = next_offset;
12314                } else {
12315                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12316                    inner_depth.increment()?;
12317                }
12318                let val_ref = self.lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12319                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12320                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12321                {
12322                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12323                }
12324                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12325                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12326                }
12327            }
12328
12329            next_offset += envelope_size;
12330            _next_ordinal_to_read += 1;
12331            if next_offset >= end_offset {
12332                return Ok(());
12333            }
12334
12335            // Decode unknown envelopes for gaps in ordinals.
12336            while _next_ordinal_to_read < 4 {
12337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12338                _next_ordinal_to_read += 1;
12339                next_offset += envelope_size;
12340            }
12341
12342            let next_out_of_line = decoder.next_out_of_line();
12343            let handles_before = decoder.remaining_handles();
12344            if let Some((inlined, num_bytes, num_handles)) =
12345                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12346            {
12347                let member_inline_size =
12348                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12349                if inlined != (member_inline_size <= 4) {
12350                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12351                }
12352                let inner_offset;
12353                let mut inner_depth = depth.clone();
12354                if inlined {
12355                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12356                    inner_offset = next_offset;
12357                } else {
12358                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12359                    inner_depth.increment()?;
12360                }
12361                let val_ref =
12362                    self.key_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12363                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12364                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12365                {
12366                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12367                }
12368                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12369                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12370                }
12371            }
12372
12373            next_offset += envelope_size;
12374            _next_ordinal_to_read += 1;
12375            if next_offset >= end_offset {
12376                return Ok(());
12377            }
12378
12379            // Decode unknown envelopes for gaps in ordinals.
12380            while _next_ordinal_to_read < 5 {
12381                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12382                _next_ordinal_to_read += 1;
12383                next_offset += envelope_size;
12384            }
12385
12386            let next_out_of_line = decoder.next_out_of_line();
12387            let handles_before = decoder.remaining_handles();
12388            if let Some((inlined, num_bytes, num_handles)) =
12389                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12390            {
12391                let member_inline_size =
12392                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12393                if inlined != (member_inline_size <= 4) {
12394                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12395                }
12396                let inner_offset;
12397                let mut inner_depth = depth.clone();
12398                if inlined {
12399                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12400                    inner_offset = next_offset;
12401                } else {
12402                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12403                    inner_depth.increment()?;
12404                }
12405                let val_ref =
12406                    self.remaining_lease_time_total.get_or_insert_with(|| fidl::new_empty!(i64, D));
12407                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12408                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12409                {
12410                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12411                }
12412                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12413                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12414                }
12415            }
12416
12417            next_offset += envelope_size;
12418            _next_ordinal_to_read += 1;
12419            if next_offset >= end_offset {
12420                return Ok(());
12421            }
12422
12423            // Decode unknown envelopes for gaps in ordinals.
12424            while _next_ordinal_to_read < 6 {
12425                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12426                _next_ordinal_to_read += 1;
12427                next_offset += envelope_size;
12428            }
12429
12430            let next_out_of_line = decoder.next_out_of_line();
12431            let handles_before = decoder.remaining_handles();
12432            if let Some((inlined, num_bytes, num_handles)) =
12433                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12434            {
12435                let member_inline_size =
12436                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12437                if inlined != (member_inline_size <= 4) {
12438                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12439                }
12440                let inner_offset;
12441                let mut inner_depth = depth.clone();
12442                if inlined {
12443                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12444                    inner_offset = next_offset;
12445                } else {
12446                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12447                    inner_depth.increment()?;
12448                }
12449                let val_ref = self
12450                    .remaining_key_lease_time_total
12451                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
12452                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12453                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12454                {
12455                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12456                }
12457                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12458                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12459                }
12460            }
12461
12462            next_offset += envelope_size;
12463
12464            // Decode the remaining unknown envelopes.
12465            while next_offset < end_offset {
12466                _next_ordinal_to_read += 1;
12467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12468                next_offset += envelope_size;
12469            }
12470
12471            Ok(())
12472        }
12473    }
12474
12475    impl SrpServerResponseCounters {
12476        #[inline(always)]
12477        fn max_ordinal_present(&self) -> u64 {
12478            if let Some(_) = self.other_response {
12479                return 6;
12480            }
12481            if let Some(_) = self.refused_response {
12482                return 5;
12483            }
12484            if let Some(_) = self.name_exists_response {
12485                return 4;
12486            }
12487            if let Some(_) = self.format_error_response {
12488                return 3;
12489            }
12490            if let Some(_) = self.server_failure_response {
12491                return 2;
12492            }
12493            if let Some(_) = self.success_response {
12494                return 1;
12495            }
12496            0
12497        }
12498    }
12499
12500    impl fidl::encoding::ValueTypeMarker for SrpServerResponseCounters {
12501        type Borrowed<'a> = &'a Self;
12502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12503            value
12504        }
12505    }
12506
12507    unsafe impl fidl::encoding::TypeMarker for SrpServerResponseCounters {
12508        type Owned = Self;
12509
12510        #[inline(always)]
12511        fn inline_align(_context: fidl::encoding::Context) -> usize {
12512            8
12513        }
12514
12515        #[inline(always)]
12516        fn inline_size(_context: fidl::encoding::Context) -> usize {
12517            16
12518        }
12519    }
12520
12521    unsafe impl<D: fidl::encoding::ResourceDialect>
12522        fidl::encoding::Encode<SrpServerResponseCounters, D> for &SrpServerResponseCounters
12523    {
12524        unsafe fn encode(
12525            self,
12526            encoder: &mut fidl::encoding::Encoder<'_, D>,
12527            offset: usize,
12528            mut depth: fidl::encoding::Depth,
12529        ) -> fidl::Result<()> {
12530            encoder.debug_check_bounds::<SrpServerResponseCounters>(offset);
12531            // Vector header
12532            let max_ordinal: u64 = self.max_ordinal_present();
12533            encoder.write_num(max_ordinal, offset);
12534            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12535            // Calling encoder.out_of_line_offset(0) is not allowed.
12536            if max_ordinal == 0 {
12537                return Ok(());
12538            }
12539            depth.increment()?;
12540            let envelope_size = 8;
12541            let bytes_len = max_ordinal as usize * envelope_size;
12542            #[allow(unused_variables)]
12543            let offset = encoder.out_of_line_offset(bytes_len);
12544            let mut _prev_end_offset: usize = 0;
12545            if 1 > max_ordinal {
12546                return Ok(());
12547            }
12548
12549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12550            // are envelope_size bytes.
12551            let cur_offset: usize = (1 - 1) * envelope_size;
12552
12553            // Zero reserved fields.
12554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12555
12556            // Safety:
12557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12559            //   envelope_size bytes, there is always sufficient room.
12560            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12561                self.success_response
12562                    .as_ref()
12563                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12564                encoder,
12565                offset + cur_offset,
12566                depth,
12567            )?;
12568
12569            _prev_end_offset = cur_offset + envelope_size;
12570            if 2 > max_ordinal {
12571                return Ok(());
12572            }
12573
12574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12575            // are envelope_size bytes.
12576            let cur_offset: usize = (2 - 1) * envelope_size;
12577
12578            // Zero reserved fields.
12579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12580
12581            // Safety:
12582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12584            //   envelope_size bytes, there is always sufficient room.
12585            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12586                self.server_failure_response
12587                    .as_ref()
12588                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12589                encoder,
12590                offset + cur_offset,
12591                depth,
12592            )?;
12593
12594            _prev_end_offset = cur_offset + envelope_size;
12595            if 3 > max_ordinal {
12596                return Ok(());
12597            }
12598
12599            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12600            // are envelope_size bytes.
12601            let cur_offset: usize = (3 - 1) * envelope_size;
12602
12603            // Zero reserved fields.
12604            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12605
12606            // Safety:
12607            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12608            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12609            //   envelope_size bytes, there is always sufficient room.
12610            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12611                self.format_error_response
12612                    .as_ref()
12613                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12614                encoder,
12615                offset + cur_offset,
12616                depth,
12617            )?;
12618
12619            _prev_end_offset = cur_offset + envelope_size;
12620            if 4 > max_ordinal {
12621                return Ok(());
12622            }
12623
12624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12625            // are envelope_size bytes.
12626            let cur_offset: usize = (4 - 1) * envelope_size;
12627
12628            // Zero reserved fields.
12629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12630
12631            // Safety:
12632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12634            //   envelope_size bytes, there is always sufficient room.
12635            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12636                self.name_exists_response
12637                    .as_ref()
12638                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12639                encoder,
12640                offset + cur_offset,
12641                depth,
12642            )?;
12643
12644            _prev_end_offset = cur_offset + envelope_size;
12645            if 5 > max_ordinal {
12646                return Ok(());
12647            }
12648
12649            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12650            // are envelope_size bytes.
12651            let cur_offset: usize = (5 - 1) * envelope_size;
12652
12653            // Zero reserved fields.
12654            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12655
12656            // Safety:
12657            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12658            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12659            //   envelope_size bytes, there is always sufficient room.
12660            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12661                self.refused_response
12662                    .as_ref()
12663                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12664                encoder,
12665                offset + cur_offset,
12666                depth,
12667            )?;
12668
12669            _prev_end_offset = cur_offset + envelope_size;
12670            if 6 > max_ordinal {
12671                return Ok(());
12672            }
12673
12674            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12675            // are envelope_size bytes.
12676            let cur_offset: usize = (6 - 1) * envelope_size;
12677
12678            // Zero reserved fields.
12679            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12680
12681            // Safety:
12682            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12683            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12684            //   envelope_size bytes, there is always sufficient room.
12685            fidl::encoding::encode_in_envelope_optional::<u32, D>(
12686                self.other_response.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
12687                encoder,
12688                offset + cur_offset,
12689                depth,
12690            )?;
12691
12692            _prev_end_offset = cur_offset + envelope_size;
12693
12694            Ok(())
12695        }
12696    }
12697
12698    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12699        for SrpServerResponseCounters
12700    {
12701        #[inline(always)]
12702        fn new_empty() -> Self {
12703            Self::default()
12704        }
12705
12706        unsafe fn decode(
12707            &mut self,
12708            decoder: &mut fidl::encoding::Decoder<'_, D>,
12709            offset: usize,
12710            mut depth: fidl::encoding::Depth,
12711        ) -> fidl::Result<()> {
12712            decoder.debug_check_bounds::<Self>(offset);
12713            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12714                None => return Err(fidl::Error::NotNullable),
12715                Some(len) => len,
12716            };
12717            // Calling decoder.out_of_line_offset(0) is not allowed.
12718            if len == 0 {
12719                return Ok(());
12720            };
12721            depth.increment()?;
12722            let envelope_size = 8;
12723            let bytes_len = len * envelope_size;
12724            let offset = decoder.out_of_line_offset(bytes_len)?;
12725            // Decode the envelope for each type.
12726            let mut _next_ordinal_to_read = 0;
12727            let mut next_offset = offset;
12728            let end_offset = offset + bytes_len;
12729            _next_ordinal_to_read += 1;
12730            if next_offset >= end_offset {
12731                return Ok(());
12732            }
12733
12734            // Decode unknown envelopes for gaps in ordinals.
12735            while _next_ordinal_to_read < 1 {
12736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12737                _next_ordinal_to_read += 1;
12738                next_offset += envelope_size;
12739            }
12740
12741            let next_out_of_line = decoder.next_out_of_line();
12742            let handles_before = decoder.remaining_handles();
12743            if let Some((inlined, num_bytes, num_handles)) =
12744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12745            {
12746                let member_inline_size =
12747                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12748                if inlined != (member_inline_size <= 4) {
12749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12750                }
12751                let inner_offset;
12752                let mut inner_depth = depth.clone();
12753                if inlined {
12754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12755                    inner_offset = next_offset;
12756                } else {
12757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12758                    inner_depth.increment()?;
12759                }
12760                let val_ref = self.success_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12761                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12763                {
12764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12765                }
12766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12768                }
12769            }
12770
12771            next_offset += envelope_size;
12772            _next_ordinal_to_read += 1;
12773            if next_offset >= end_offset {
12774                return Ok(());
12775            }
12776
12777            // Decode unknown envelopes for gaps in ordinals.
12778            while _next_ordinal_to_read < 2 {
12779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12780                _next_ordinal_to_read += 1;
12781                next_offset += envelope_size;
12782            }
12783
12784            let next_out_of_line = decoder.next_out_of_line();
12785            let handles_before = decoder.remaining_handles();
12786            if let Some((inlined, num_bytes, num_handles)) =
12787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12788            {
12789                let member_inline_size =
12790                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12791                if inlined != (member_inline_size <= 4) {
12792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12793                }
12794                let inner_offset;
12795                let mut inner_depth = depth.clone();
12796                if inlined {
12797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12798                    inner_offset = next_offset;
12799                } else {
12800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12801                    inner_depth.increment()?;
12802                }
12803                let val_ref =
12804                    self.server_failure_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12805                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12806                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12807                {
12808                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12809                }
12810                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12811                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12812                }
12813            }
12814
12815            next_offset += envelope_size;
12816            _next_ordinal_to_read += 1;
12817            if next_offset >= end_offset {
12818                return Ok(());
12819            }
12820
12821            // Decode unknown envelopes for gaps in ordinals.
12822            while _next_ordinal_to_read < 3 {
12823                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12824                _next_ordinal_to_read += 1;
12825                next_offset += envelope_size;
12826            }
12827
12828            let next_out_of_line = decoder.next_out_of_line();
12829            let handles_before = decoder.remaining_handles();
12830            if let Some((inlined, num_bytes, num_handles)) =
12831                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12832            {
12833                let member_inline_size =
12834                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12835                if inlined != (member_inline_size <= 4) {
12836                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12837                }
12838                let inner_offset;
12839                let mut inner_depth = depth.clone();
12840                if inlined {
12841                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12842                    inner_offset = next_offset;
12843                } else {
12844                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12845                    inner_depth.increment()?;
12846                }
12847                let val_ref =
12848                    self.format_error_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12849                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12851                {
12852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12853                }
12854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12856                }
12857            }
12858
12859            next_offset += envelope_size;
12860            _next_ordinal_to_read += 1;
12861            if next_offset >= end_offset {
12862                return Ok(());
12863            }
12864
12865            // Decode unknown envelopes for gaps in ordinals.
12866            while _next_ordinal_to_read < 4 {
12867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12868                _next_ordinal_to_read += 1;
12869                next_offset += envelope_size;
12870            }
12871
12872            let next_out_of_line = decoder.next_out_of_line();
12873            let handles_before = decoder.remaining_handles();
12874            if let Some((inlined, num_bytes, num_handles)) =
12875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12876            {
12877                let member_inline_size =
12878                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12879                if inlined != (member_inline_size <= 4) {
12880                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12881                }
12882                let inner_offset;
12883                let mut inner_depth = depth.clone();
12884                if inlined {
12885                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12886                    inner_offset = next_offset;
12887                } else {
12888                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12889                    inner_depth.increment()?;
12890                }
12891                let val_ref =
12892                    self.name_exists_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12893                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12894                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12895                {
12896                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12897                }
12898                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12899                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12900                }
12901            }
12902
12903            next_offset += envelope_size;
12904            _next_ordinal_to_read += 1;
12905            if next_offset >= end_offset {
12906                return Ok(());
12907            }
12908
12909            // Decode unknown envelopes for gaps in ordinals.
12910            while _next_ordinal_to_read < 5 {
12911                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12912                _next_ordinal_to_read += 1;
12913                next_offset += envelope_size;
12914            }
12915
12916            let next_out_of_line = decoder.next_out_of_line();
12917            let handles_before = decoder.remaining_handles();
12918            if let Some((inlined, num_bytes, num_handles)) =
12919                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12920            {
12921                let member_inline_size =
12922                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12923                if inlined != (member_inline_size <= 4) {
12924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12925                }
12926                let inner_offset;
12927                let mut inner_depth = depth.clone();
12928                if inlined {
12929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12930                    inner_offset = next_offset;
12931                } else {
12932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12933                    inner_depth.increment()?;
12934                }
12935                let val_ref = self.refused_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12936                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12937                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12938                {
12939                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12940                }
12941                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12942                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12943                }
12944            }
12945
12946            next_offset += envelope_size;
12947            _next_ordinal_to_read += 1;
12948            if next_offset >= end_offset {
12949                return Ok(());
12950            }
12951
12952            // Decode unknown envelopes for gaps in ordinals.
12953            while _next_ordinal_to_read < 6 {
12954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12955                _next_ordinal_to_read += 1;
12956                next_offset += envelope_size;
12957            }
12958
12959            let next_out_of_line = decoder.next_out_of_line();
12960            let handles_before = decoder.remaining_handles();
12961            if let Some((inlined, num_bytes, num_handles)) =
12962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12963            {
12964                let member_inline_size =
12965                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12966                if inlined != (member_inline_size <= 4) {
12967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12968                }
12969                let inner_offset;
12970                let mut inner_depth = depth.clone();
12971                if inlined {
12972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12973                    inner_offset = next_offset;
12974                } else {
12975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12976                    inner_depth.increment()?;
12977                }
12978                let val_ref = self.other_response.get_or_insert_with(|| fidl::new_empty!(u32, D));
12979                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12980                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12981                {
12982                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12983                }
12984                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12985                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12986                }
12987            }
12988
12989            next_offset += envelope_size;
12990
12991            // Decode the remaining unknown envelopes.
12992            while next_offset < end_offset {
12993                _next_ordinal_to_read += 1;
12994                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12995                next_offset += envelope_size;
12996            }
12997
12998            Ok(())
12999        }
13000    }
13001
13002    impl Telemetry {
13003        #[inline(always)]
13004        fn max_ordinal_present(&self) -> u64 {
13005            if let Some(_) = self.border_agent_counters {
13006                return 25;
13007            }
13008            if let Some(_) = self.link_metrics_entries {
13009                return 24;
13010            }
13011            if let Some(_) = self.dhcp6pd_info {
13012                return 23;
13013            }
13014            if let Some(_) = self.upstream_dns_info {
13015                return 22;
13016            }
13017            if let Some(_) = self.trel_peers_info {
13018                return 21;
13019            }
13020            if let Some(_) = self.trel_counters {
13021                return 20;
13022            }
13023            if let Some(_) = self.nat64_info {
13024                return 19;
13025            }
13026            if let Some(_) = self.uptime {
13027                return 18;
13028            }
13029            if let Some(_) = self.leader_data {
13030                return 17;
13031            }
13032            if let Some(_) = self.dnssd_counters {
13033                return 16;
13034            }
13035            if let Some(_) = self.srp_server_info {
13036                return 15;
13037            }
13038            if let Some(_) = self.thread_border_routing_counters {
13039                return 14;
13040            }
13041            if let Some(_) = self.thread_stable_network_data {
13042                return 13;
13043            }
13044            if let Some(_) = self.thread_network_data {
13045                return 12;
13046            }
13047            if let Some(_) = self.thread_stable_network_data_version {
13048                return 11;
13049            }
13050            if let Some(_) = self.thread_network_data_version {
13051                return 10;
13052            }
13053            if let Some(_) = self.thread_rloc {
13054                return 9;
13055            }
13056            if let Some(_) = self.thread_router_id {
13057                return 8;
13058            }
13059            if let Some(_) = self.thread_link_mode {
13060                return 7;
13061            }
13062            if let Some(_) = self.rcp_version {
13063                return 6;
13064            }
13065            if let Some(_) = self.stack_version {
13066                return 5;
13067            }
13068            if let Some(_) = self.partition_id {
13069                return 4;
13070            }
13071            if let Some(_) = self.channel_index {
13072                return 3;
13073            }
13074            if let Some(_) = self.tx_power {
13075                return 2;
13076            }
13077            if let Some(_) = self.rssi {
13078                return 1;
13079            }
13080            0
13081        }
13082    }
13083
13084    impl fidl::encoding::ValueTypeMarker for Telemetry {
13085        type Borrowed<'a> = &'a Self;
13086        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13087            value
13088        }
13089    }
13090
13091    unsafe impl fidl::encoding::TypeMarker for Telemetry {
13092        type Owned = Self;
13093
13094        #[inline(always)]
13095        fn inline_align(_context: fidl::encoding::Context) -> usize {
13096            8
13097        }
13098
13099        #[inline(always)]
13100        fn inline_size(_context: fidl::encoding::Context) -> usize {
13101            16
13102        }
13103    }
13104
13105    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Telemetry, D>
13106        for &Telemetry
13107    {
13108        unsafe fn encode(
13109            self,
13110            encoder: &mut fidl::encoding::Encoder<'_, D>,
13111            offset: usize,
13112            mut depth: fidl::encoding::Depth,
13113        ) -> fidl::Result<()> {
13114            encoder.debug_check_bounds::<Telemetry>(offset);
13115            // Vector header
13116            let max_ordinal: u64 = self.max_ordinal_present();
13117            encoder.write_num(max_ordinal, offset);
13118            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13119            // Calling encoder.out_of_line_offset(0) is not allowed.
13120            if max_ordinal == 0 {
13121                return Ok(());
13122            }
13123            depth.increment()?;
13124            let envelope_size = 8;
13125            let bytes_len = max_ordinal as usize * envelope_size;
13126            #[allow(unused_variables)]
13127            let offset = encoder.out_of_line_offset(bytes_len);
13128            let mut _prev_end_offset: usize = 0;
13129            if 1 > max_ordinal {
13130                return Ok(());
13131            }
13132
13133            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13134            // are envelope_size bytes.
13135            let cur_offset: usize = (1 - 1) * envelope_size;
13136
13137            // Zero reserved fields.
13138            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13139
13140            // Safety:
13141            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13142            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13143            //   envelope_size bytes, there is always sufficient room.
13144            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13145                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13146                encoder,
13147                offset + cur_offset,
13148                depth,
13149            )?;
13150
13151            _prev_end_offset = cur_offset + envelope_size;
13152            if 2 > max_ordinal {
13153                return Ok(());
13154            }
13155
13156            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13157            // are envelope_size bytes.
13158            let cur_offset: usize = (2 - 1) * envelope_size;
13159
13160            // Zero reserved fields.
13161            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13162
13163            // Safety:
13164            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13165            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13166            //   envelope_size bytes, there is always sufficient room.
13167            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13168                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13169                encoder,
13170                offset + cur_offset,
13171                depth,
13172            )?;
13173
13174            _prev_end_offset = cur_offset + envelope_size;
13175            if 3 > max_ordinal {
13176                return Ok(());
13177            }
13178
13179            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13180            // are envelope_size bytes.
13181            let cur_offset: usize = (3 - 1) * envelope_size;
13182
13183            // Zero reserved fields.
13184            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13185
13186            // Safety:
13187            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13188            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13189            //   envelope_size bytes, there is always sufficient room.
13190            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13191                self.channel_index.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13192                encoder,
13193                offset + cur_offset,
13194                depth,
13195            )?;
13196
13197            _prev_end_offset = cur_offset + envelope_size;
13198            if 4 > max_ordinal {
13199                return Ok(());
13200            }
13201
13202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13203            // are envelope_size bytes.
13204            let cur_offset: usize = (4 - 1) * envelope_size;
13205
13206            // Zero reserved fields.
13207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13208
13209            // Safety:
13210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13212            //   envelope_size bytes, there is always sufficient room.
13213            fidl::encoding::encode_in_envelope_optional::<u32, D>(
13214                self.partition_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
13215                encoder,
13216                offset + cur_offset,
13217                depth,
13218            )?;
13219
13220            _prev_end_offset = cur_offset + envelope_size;
13221            if 5 > max_ordinal {
13222                return Ok(());
13223            }
13224
13225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13226            // are envelope_size bytes.
13227            let cur_offset: usize = (5 - 1) * envelope_size;
13228
13229            // Zero reserved fields.
13230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13231
13232            // Safety:
13233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13235            //   envelope_size bytes, there is always sufficient room.
13236            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13237                self.stack_version.as_ref().map(
13238                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13239                ),
13240                encoder,
13241                offset + cur_offset,
13242                depth,
13243            )?;
13244
13245            _prev_end_offset = cur_offset + envelope_size;
13246            if 6 > max_ordinal {
13247                return Ok(());
13248            }
13249
13250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13251            // are envelope_size bytes.
13252            let cur_offset: usize = (6 - 1) * envelope_size;
13253
13254            // Zero reserved fields.
13255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13256
13257            // Safety:
13258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13260            //   envelope_size bytes, there is always sufficient room.
13261            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
13262                self.rcp_version.as_ref().map(
13263                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
13264                ),
13265                encoder,
13266                offset + cur_offset,
13267                depth,
13268            )?;
13269
13270            _prev_end_offset = cur_offset + envelope_size;
13271            if 7 > max_ordinal {
13272                return Ok(());
13273            }
13274
13275            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13276            // are envelope_size bytes.
13277            let cur_offset: usize = (7 - 1) * envelope_size;
13278
13279            // Zero reserved fields.
13280            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13281
13282            // Safety:
13283            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13284            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13285            //   envelope_size bytes, there is always sufficient room.
13286            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13287                self.thread_link_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13288                encoder,
13289                offset + cur_offset,
13290                depth,
13291            )?;
13292
13293            _prev_end_offset = cur_offset + envelope_size;
13294            if 8 > max_ordinal {
13295                return Ok(());
13296            }
13297
13298            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13299            // are envelope_size bytes.
13300            let cur_offset: usize = (8 - 1) * envelope_size;
13301
13302            // Zero reserved fields.
13303            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13304
13305            // Safety:
13306            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13307            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13308            //   envelope_size bytes, there is always sufficient room.
13309            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13310                self.thread_router_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13311                encoder,
13312                offset + cur_offset,
13313                depth,
13314            )?;
13315
13316            _prev_end_offset = cur_offset + envelope_size;
13317            if 9 > max_ordinal {
13318                return Ok(());
13319            }
13320
13321            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13322            // are envelope_size bytes.
13323            let cur_offset: usize = (9 - 1) * envelope_size;
13324
13325            // Zero reserved fields.
13326            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13327
13328            // Safety:
13329            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13330            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13331            //   envelope_size bytes, there is always sufficient room.
13332            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13333                self.thread_rloc.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13334                encoder,
13335                offset + cur_offset,
13336                depth,
13337            )?;
13338
13339            _prev_end_offset = cur_offset + envelope_size;
13340            if 10 > max_ordinal {
13341                return Ok(());
13342            }
13343
13344            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13345            // are envelope_size bytes.
13346            let cur_offset: usize = (10 - 1) * envelope_size;
13347
13348            // Zero reserved fields.
13349            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13350
13351            // Safety:
13352            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13353            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13354            //   envelope_size bytes, there is always sufficient room.
13355            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13356                self.thread_network_data_version
13357                    .as_ref()
13358                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13359                encoder,
13360                offset + cur_offset,
13361                depth,
13362            )?;
13363
13364            _prev_end_offset = cur_offset + envelope_size;
13365            if 11 > max_ordinal {
13366                return Ok(());
13367            }
13368
13369            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13370            // are envelope_size bytes.
13371            let cur_offset: usize = (11 - 1) * envelope_size;
13372
13373            // Zero reserved fields.
13374            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13375
13376            // Safety:
13377            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13378            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13379            //   envelope_size bytes, there is always sufficient room.
13380            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13381                self.thread_stable_network_data_version
13382                    .as_ref()
13383                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13384                encoder,
13385                offset + cur_offset,
13386                depth,
13387            )?;
13388
13389            _prev_end_offset = cur_offset + envelope_size;
13390            if 12 > max_ordinal {
13391                return Ok(());
13392            }
13393
13394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13395            // are envelope_size bytes.
13396            let cur_offset: usize = (12 - 1) * envelope_size;
13397
13398            // Zero reserved fields.
13399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13400
13401            // Safety:
13402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13404            //   envelope_size bytes, there is always sufficient room.
13405            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13406                self.thread_network_data.as_ref().map(
13407                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13408                ),
13409                encoder,
13410                offset + cur_offset,
13411                depth,
13412            )?;
13413
13414            _prev_end_offset = cur_offset + envelope_size;
13415            if 13 > max_ordinal {
13416                return Ok(());
13417            }
13418
13419            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13420            // are envelope_size bytes.
13421            let cur_offset: usize = (13 - 1) * envelope_size;
13422
13423            // Zero reserved fields.
13424            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13425
13426            // Safety:
13427            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13428            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13429            //   envelope_size bytes, there is always sufficient room.
13430            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 255>, D>(
13431                self.thread_stable_network_data.as_ref().map(
13432                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::ValueTypeMarker>::borrow,
13433                ),
13434                encoder,
13435                offset + cur_offset,
13436                depth,
13437            )?;
13438
13439            _prev_end_offset = cur_offset + envelope_size;
13440            if 14 > max_ordinal {
13441                return Ok(());
13442            }
13443
13444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13445            // are envelope_size bytes.
13446            let cur_offset: usize = (14 - 1) * envelope_size;
13447
13448            // Zero reserved fields.
13449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13450
13451            // Safety:
13452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13454            //   envelope_size bytes, there is always sufficient room.
13455            fidl::encoding::encode_in_envelope_optional::<BorderRoutingCounters, D>(
13456                self.thread_border_routing_counters
13457                    .as_ref()
13458                    .map(<BorderRoutingCounters as fidl::encoding::ValueTypeMarker>::borrow),
13459                encoder,
13460                offset + cur_offset,
13461                depth,
13462            )?;
13463
13464            _prev_end_offset = cur_offset + envelope_size;
13465            if 15 > max_ordinal {
13466                return Ok(());
13467            }
13468
13469            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13470            // are envelope_size bytes.
13471            let cur_offset: usize = (15 - 1) * envelope_size;
13472
13473            // Zero reserved fields.
13474            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13475
13476            // Safety:
13477            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13478            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13479            //   envelope_size bytes, there is always sufficient room.
13480            fidl::encoding::encode_in_envelope_optional::<SrpServerInfo, D>(
13481                self.srp_server_info
13482                    .as_ref()
13483                    .map(<SrpServerInfo as fidl::encoding::ValueTypeMarker>::borrow),
13484                encoder,
13485                offset + cur_offset,
13486                depth,
13487            )?;
13488
13489            _prev_end_offset = cur_offset + envelope_size;
13490            if 16 > max_ordinal {
13491                return Ok(());
13492            }
13493
13494            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13495            // are envelope_size bytes.
13496            let cur_offset: usize = (16 - 1) * envelope_size;
13497
13498            // Zero reserved fields.
13499            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13500
13501            // Safety:
13502            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13503            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13504            //   envelope_size bytes, there is always sufficient room.
13505            fidl::encoding::encode_in_envelope_optional::<DnssdCounters, D>(
13506                self.dnssd_counters
13507                    .as_ref()
13508                    .map(<DnssdCounters as fidl::encoding::ValueTypeMarker>::borrow),
13509                encoder,
13510                offset + cur_offset,
13511                depth,
13512            )?;
13513
13514            _prev_end_offset = cur_offset + envelope_size;
13515            if 17 > max_ordinal {
13516                return Ok(());
13517            }
13518
13519            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13520            // are envelope_size bytes.
13521            let cur_offset: usize = (17 - 1) * envelope_size;
13522
13523            // Zero reserved fields.
13524            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13525
13526            // Safety:
13527            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13528            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13529            //   envelope_size bytes, there is always sufficient room.
13530            fidl::encoding::encode_in_envelope_optional::<LeaderData, D>(
13531                self.leader_data
13532                    .as_ref()
13533                    .map(<LeaderData as fidl::encoding::ValueTypeMarker>::borrow),
13534                encoder,
13535                offset + cur_offset,
13536                depth,
13537            )?;
13538
13539            _prev_end_offset = cur_offset + envelope_size;
13540            if 18 > max_ordinal {
13541                return Ok(());
13542            }
13543
13544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13545            // are envelope_size bytes.
13546            let cur_offset: usize = (18 - 1) * envelope_size;
13547
13548            // Zero reserved fields.
13549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13550
13551            // Safety:
13552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13554            //   envelope_size bytes, there is always sufficient room.
13555            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13556                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13557                encoder,
13558                offset + cur_offset,
13559                depth,
13560            )?;
13561
13562            _prev_end_offset = cur_offset + envelope_size;
13563            if 19 > max_ordinal {
13564                return Ok(());
13565            }
13566
13567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13568            // are envelope_size bytes.
13569            let cur_offset: usize = (19 - 1) * envelope_size;
13570
13571            // Zero reserved fields.
13572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13573
13574            // Safety:
13575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13577            //   envelope_size bytes, there is always sufficient room.
13578            fidl::encoding::encode_in_envelope_optional::<Nat64Info, D>(
13579                self.nat64_info
13580                    .as_ref()
13581                    .map(<Nat64Info as fidl::encoding::ValueTypeMarker>::borrow),
13582                encoder,
13583                offset + cur_offset,
13584                depth,
13585            )?;
13586
13587            _prev_end_offset = cur_offset + envelope_size;
13588            if 20 > max_ordinal {
13589                return Ok(());
13590            }
13591
13592            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13593            // are envelope_size bytes.
13594            let cur_offset: usize = (20 - 1) * envelope_size;
13595
13596            // Zero reserved fields.
13597            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13598
13599            // Safety:
13600            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13601            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13602            //   envelope_size bytes, there is always sufficient room.
13603            fidl::encoding::encode_in_envelope_optional::<TrelCounters, D>(
13604                self.trel_counters
13605                    .as_ref()
13606                    .map(<TrelCounters as fidl::encoding::ValueTypeMarker>::borrow),
13607                encoder,
13608                offset + cur_offset,
13609                depth,
13610            )?;
13611
13612            _prev_end_offset = cur_offset + envelope_size;
13613            if 21 > max_ordinal {
13614                return Ok(());
13615            }
13616
13617            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13618            // are envelope_size bytes.
13619            let cur_offset: usize = (21 - 1) * envelope_size;
13620
13621            // Zero reserved fields.
13622            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13623
13624            // Safety:
13625            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13626            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13627            //   envelope_size bytes, there is always sufficient room.
13628            fidl::encoding::encode_in_envelope_optional::<TrelPeersInfo, D>(
13629                self.trel_peers_info
13630                    .as_ref()
13631                    .map(<TrelPeersInfo as fidl::encoding::ValueTypeMarker>::borrow),
13632                encoder,
13633                offset + cur_offset,
13634                depth,
13635            )?;
13636
13637            _prev_end_offset = cur_offset + envelope_size;
13638            if 22 > max_ordinal {
13639                return Ok(());
13640            }
13641
13642            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13643            // are envelope_size bytes.
13644            let cur_offset: usize = (22 - 1) * envelope_size;
13645
13646            // Zero reserved fields.
13647            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13648
13649            // Safety:
13650            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13651            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13652            //   envelope_size bytes, there is always sufficient room.
13653            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsInfo, D>(
13654                self.upstream_dns_info
13655                    .as_ref()
13656                    .map(<UpstreamDnsInfo as fidl::encoding::ValueTypeMarker>::borrow),
13657                encoder,
13658                offset + cur_offset,
13659                depth,
13660            )?;
13661
13662            _prev_end_offset = cur_offset + envelope_size;
13663            if 23 > max_ordinal {
13664                return Ok(());
13665            }
13666
13667            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13668            // are envelope_size bytes.
13669            let cur_offset: usize = (23 - 1) * envelope_size;
13670
13671            // Zero reserved fields.
13672            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13673
13674            // Safety:
13675            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13676            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13677            //   envelope_size bytes, there is always sufficient room.
13678            fidl::encoding::encode_in_envelope_optional::<Dhcp6PdInfo, D>(
13679                self.dhcp6pd_info
13680                    .as_ref()
13681                    .map(<Dhcp6PdInfo as fidl::encoding::ValueTypeMarker>::borrow),
13682                encoder,
13683                offset + cur_offset,
13684                depth,
13685            )?;
13686
13687            _prev_end_offset = cur_offset + envelope_size;
13688            if 24 > max_ordinal {
13689                return Ok(());
13690            }
13691
13692            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13693            // are envelope_size bytes.
13694            let cur_offset: usize = (24 - 1) * envelope_size;
13695
13696            // Zero reserved fields.
13697            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13698
13699            // Safety:
13700            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13701            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13702            //   envelope_size bytes, there is always sufficient room.
13703            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LinkMetricsEntry, 64>, D>(
13704            self.link_metrics_entries.as_ref().map(<fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::ValueTypeMarker>::borrow),
13705            encoder, offset + cur_offset, depth
13706        )?;
13707
13708            _prev_end_offset = cur_offset + envelope_size;
13709            if 25 > max_ordinal {
13710                return Ok(());
13711            }
13712
13713            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13714            // are envelope_size bytes.
13715            let cur_offset: usize = (25 - 1) * envelope_size;
13716
13717            // Zero reserved fields.
13718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13719
13720            // Safety:
13721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13723            //   envelope_size bytes, there is always sufficient room.
13724            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D>(
13725            self.border_agent_counters.as_ref().map(<fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::ValueTypeMarker>::borrow),
13726            encoder, offset + cur_offset, depth
13727        )?;
13728
13729            _prev_end_offset = cur_offset + envelope_size;
13730
13731            Ok(())
13732        }
13733    }
13734
13735    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Telemetry {
13736        #[inline(always)]
13737        fn new_empty() -> Self {
13738            Self::default()
13739        }
13740
13741        unsafe fn decode(
13742            &mut self,
13743            decoder: &mut fidl::encoding::Decoder<'_, D>,
13744            offset: usize,
13745            mut depth: fidl::encoding::Depth,
13746        ) -> fidl::Result<()> {
13747            decoder.debug_check_bounds::<Self>(offset);
13748            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13749                None => return Err(fidl::Error::NotNullable),
13750                Some(len) => len,
13751            };
13752            // Calling decoder.out_of_line_offset(0) is not allowed.
13753            if len == 0 {
13754                return Ok(());
13755            };
13756            depth.increment()?;
13757            let envelope_size = 8;
13758            let bytes_len = len * envelope_size;
13759            let offset = decoder.out_of_line_offset(bytes_len)?;
13760            // Decode the envelope for each type.
13761            let mut _next_ordinal_to_read = 0;
13762            let mut next_offset = offset;
13763            let end_offset = offset + bytes_len;
13764            _next_ordinal_to_read += 1;
13765            if next_offset >= end_offset {
13766                return Ok(());
13767            }
13768
13769            // Decode unknown envelopes for gaps in ordinals.
13770            while _next_ordinal_to_read < 1 {
13771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13772                _next_ordinal_to_read += 1;
13773                next_offset += envelope_size;
13774            }
13775
13776            let next_out_of_line = decoder.next_out_of_line();
13777            let handles_before = decoder.remaining_handles();
13778            if let Some((inlined, num_bytes, num_handles)) =
13779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13780            {
13781                let member_inline_size =
13782                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13783                if inlined != (member_inline_size <= 4) {
13784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13785                }
13786                let inner_offset;
13787                let mut inner_depth = depth.clone();
13788                if inlined {
13789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13790                    inner_offset = next_offset;
13791                } else {
13792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13793                    inner_depth.increment()?;
13794                }
13795                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
13796                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13798                {
13799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13800                }
13801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13803                }
13804            }
13805
13806            next_offset += envelope_size;
13807            _next_ordinal_to_read += 1;
13808            if next_offset >= end_offset {
13809                return Ok(());
13810            }
13811
13812            // Decode unknown envelopes for gaps in ordinals.
13813            while _next_ordinal_to_read < 2 {
13814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13815                _next_ordinal_to_read += 1;
13816                next_offset += envelope_size;
13817            }
13818
13819            let next_out_of_line = decoder.next_out_of_line();
13820            let handles_before = decoder.remaining_handles();
13821            if let Some((inlined, num_bytes, num_handles)) =
13822                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13823            {
13824                let member_inline_size =
13825                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13826                if inlined != (member_inline_size <= 4) {
13827                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13828                }
13829                let inner_offset;
13830                let mut inner_depth = depth.clone();
13831                if inlined {
13832                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13833                    inner_offset = next_offset;
13834                } else {
13835                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13836                    inner_depth.increment()?;
13837                }
13838                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
13839                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13840                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13841                {
13842                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13843                }
13844                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13845                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13846                }
13847            }
13848
13849            next_offset += envelope_size;
13850            _next_ordinal_to_read += 1;
13851            if next_offset >= end_offset {
13852                return Ok(());
13853            }
13854
13855            // Decode unknown envelopes for gaps in ordinals.
13856            while _next_ordinal_to_read < 3 {
13857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13858                _next_ordinal_to_read += 1;
13859                next_offset += envelope_size;
13860            }
13861
13862            let next_out_of_line = decoder.next_out_of_line();
13863            let handles_before = decoder.remaining_handles();
13864            if let Some((inlined, num_bytes, num_handles)) =
13865                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13866            {
13867                let member_inline_size =
13868                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13869                if inlined != (member_inline_size <= 4) {
13870                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13871                }
13872                let inner_offset;
13873                let mut inner_depth = depth.clone();
13874                if inlined {
13875                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13876                    inner_offset = next_offset;
13877                } else {
13878                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13879                    inner_depth.increment()?;
13880                }
13881                let val_ref = self.channel_index.get_or_insert_with(|| fidl::new_empty!(u16, D));
13882                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13883                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13884                {
13885                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13886                }
13887                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13888                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13889                }
13890            }
13891
13892            next_offset += envelope_size;
13893            _next_ordinal_to_read += 1;
13894            if next_offset >= end_offset {
13895                return Ok(());
13896            }
13897
13898            // Decode unknown envelopes for gaps in ordinals.
13899            while _next_ordinal_to_read < 4 {
13900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13901                _next_ordinal_to_read += 1;
13902                next_offset += envelope_size;
13903            }
13904
13905            let next_out_of_line = decoder.next_out_of_line();
13906            let handles_before = decoder.remaining_handles();
13907            if let Some((inlined, num_bytes, num_handles)) =
13908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13909            {
13910                let member_inline_size =
13911                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13912                if inlined != (member_inline_size <= 4) {
13913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13914                }
13915                let inner_offset;
13916                let mut inner_depth = depth.clone();
13917                if inlined {
13918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13919                    inner_offset = next_offset;
13920                } else {
13921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13922                    inner_depth.increment()?;
13923                }
13924                let val_ref = self.partition_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
13925                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
13926                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13927                {
13928                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13929                }
13930                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13931                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13932                }
13933            }
13934
13935            next_offset += envelope_size;
13936            _next_ordinal_to_read += 1;
13937            if next_offset >= end_offset {
13938                return Ok(());
13939            }
13940
13941            // Decode unknown envelopes for gaps in ordinals.
13942            while _next_ordinal_to_read < 5 {
13943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13944                _next_ordinal_to_read += 1;
13945                next_offset += envelope_size;
13946            }
13947
13948            let next_out_of_line = decoder.next_out_of_line();
13949            let handles_before = decoder.remaining_handles();
13950            if let Some((inlined, num_bytes, num_handles)) =
13951                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13952            {
13953                let member_inline_size =
13954                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
13955                        decoder.context,
13956                    );
13957                if inlined != (member_inline_size <= 4) {
13958                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13959                }
13960                let inner_offset;
13961                let mut inner_depth = depth.clone();
13962                if inlined {
13963                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13964                    inner_offset = next_offset;
13965                } else {
13966                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13967                    inner_depth.increment()?;
13968                }
13969                let val_ref = self
13970                    .stack_version
13971                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
13972                fidl::decode!(
13973                    fidl::encoding::BoundedString<256>,
13974                    D,
13975                    val_ref,
13976                    decoder,
13977                    inner_offset,
13978                    inner_depth
13979                )?;
13980                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13981                {
13982                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13983                }
13984                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13985                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13986                }
13987            }
13988
13989            next_offset += envelope_size;
13990            _next_ordinal_to_read += 1;
13991            if next_offset >= end_offset {
13992                return Ok(());
13993            }
13994
13995            // Decode unknown envelopes for gaps in ordinals.
13996            while _next_ordinal_to_read < 6 {
13997                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13998                _next_ordinal_to_read += 1;
13999                next_offset += envelope_size;
14000            }
14001
14002            let next_out_of_line = decoder.next_out_of_line();
14003            let handles_before = decoder.remaining_handles();
14004            if let Some((inlined, num_bytes, num_handles)) =
14005                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14006            {
14007                let member_inline_size =
14008                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
14009                        decoder.context,
14010                    );
14011                if inlined != (member_inline_size <= 4) {
14012                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14013                }
14014                let inner_offset;
14015                let mut inner_depth = depth.clone();
14016                if inlined {
14017                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14018                    inner_offset = next_offset;
14019                } else {
14020                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14021                    inner_depth.increment()?;
14022                }
14023                let val_ref = self
14024                    .rcp_version
14025                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
14026                fidl::decode!(
14027                    fidl::encoding::BoundedString<256>,
14028                    D,
14029                    val_ref,
14030                    decoder,
14031                    inner_offset,
14032                    inner_depth
14033                )?;
14034                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14035                {
14036                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14037                }
14038                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14039                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14040                }
14041            }
14042
14043            next_offset += envelope_size;
14044            _next_ordinal_to_read += 1;
14045            if next_offset >= end_offset {
14046                return Ok(());
14047            }
14048
14049            // Decode unknown envelopes for gaps in ordinals.
14050            while _next_ordinal_to_read < 7 {
14051                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14052                _next_ordinal_to_read += 1;
14053                next_offset += envelope_size;
14054            }
14055
14056            let next_out_of_line = decoder.next_out_of_line();
14057            let handles_before = decoder.remaining_handles();
14058            if let Some((inlined, num_bytes, num_handles)) =
14059                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14060            {
14061                let member_inline_size =
14062                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14063                if inlined != (member_inline_size <= 4) {
14064                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14065                }
14066                let inner_offset;
14067                let mut inner_depth = depth.clone();
14068                if inlined {
14069                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14070                    inner_offset = next_offset;
14071                } else {
14072                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14073                    inner_depth.increment()?;
14074                }
14075                let val_ref = self.thread_link_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
14076                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14078                {
14079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14080                }
14081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14083                }
14084            }
14085
14086            next_offset += envelope_size;
14087            _next_ordinal_to_read += 1;
14088            if next_offset >= end_offset {
14089                return Ok(());
14090            }
14091
14092            // Decode unknown envelopes for gaps in ordinals.
14093            while _next_ordinal_to_read < 8 {
14094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14095                _next_ordinal_to_read += 1;
14096                next_offset += envelope_size;
14097            }
14098
14099            let next_out_of_line = decoder.next_out_of_line();
14100            let handles_before = decoder.remaining_handles();
14101            if let Some((inlined, num_bytes, num_handles)) =
14102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14103            {
14104                let member_inline_size =
14105                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14106                if inlined != (member_inline_size <= 4) {
14107                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14108                }
14109                let inner_offset;
14110                let mut inner_depth = depth.clone();
14111                if inlined {
14112                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14113                    inner_offset = next_offset;
14114                } else {
14115                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14116                    inner_depth.increment()?;
14117                }
14118                let val_ref = self.thread_router_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
14119                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14121                {
14122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14123                }
14124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14126                }
14127            }
14128
14129            next_offset += envelope_size;
14130            _next_ordinal_to_read += 1;
14131            if next_offset >= end_offset {
14132                return Ok(());
14133            }
14134
14135            // Decode unknown envelopes for gaps in ordinals.
14136            while _next_ordinal_to_read < 9 {
14137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14138                _next_ordinal_to_read += 1;
14139                next_offset += envelope_size;
14140            }
14141
14142            let next_out_of_line = decoder.next_out_of_line();
14143            let handles_before = decoder.remaining_handles();
14144            if let Some((inlined, num_bytes, num_handles)) =
14145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14146            {
14147                let member_inline_size =
14148                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14149                if inlined != (member_inline_size <= 4) {
14150                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14151                }
14152                let inner_offset;
14153                let mut inner_depth = depth.clone();
14154                if inlined {
14155                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14156                    inner_offset = next_offset;
14157                } else {
14158                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14159                    inner_depth.increment()?;
14160                }
14161                let val_ref = self.thread_rloc.get_or_insert_with(|| fidl::new_empty!(u16, D));
14162                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14164                {
14165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14166                }
14167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14169                }
14170            }
14171
14172            next_offset += envelope_size;
14173            _next_ordinal_to_read += 1;
14174            if next_offset >= end_offset {
14175                return Ok(());
14176            }
14177
14178            // Decode unknown envelopes for gaps in ordinals.
14179            while _next_ordinal_to_read < 10 {
14180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14181                _next_ordinal_to_read += 1;
14182                next_offset += envelope_size;
14183            }
14184
14185            let next_out_of_line = decoder.next_out_of_line();
14186            let handles_before = decoder.remaining_handles();
14187            if let Some((inlined, num_bytes, num_handles)) =
14188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14189            {
14190                let member_inline_size =
14191                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14192                if inlined != (member_inline_size <= 4) {
14193                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14194                }
14195                let inner_offset;
14196                let mut inner_depth = depth.clone();
14197                if inlined {
14198                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14199                    inner_offset = next_offset;
14200                } else {
14201                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14202                    inner_depth.increment()?;
14203                }
14204                let val_ref =
14205                    self.thread_network_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
14206                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14208                {
14209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14210                }
14211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14213                }
14214            }
14215
14216            next_offset += envelope_size;
14217            _next_ordinal_to_read += 1;
14218            if next_offset >= end_offset {
14219                return Ok(());
14220            }
14221
14222            // Decode unknown envelopes for gaps in ordinals.
14223            while _next_ordinal_to_read < 11 {
14224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14225                _next_ordinal_to_read += 1;
14226                next_offset += envelope_size;
14227            }
14228
14229            let next_out_of_line = decoder.next_out_of_line();
14230            let handles_before = decoder.remaining_handles();
14231            if let Some((inlined, num_bytes, num_handles)) =
14232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14233            {
14234                let member_inline_size =
14235                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14236                if inlined != (member_inline_size <= 4) {
14237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14238                }
14239                let inner_offset;
14240                let mut inner_depth = depth.clone();
14241                if inlined {
14242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14243                    inner_offset = next_offset;
14244                } else {
14245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14246                    inner_depth.increment()?;
14247                }
14248                let val_ref = self
14249                    .thread_stable_network_data_version
14250                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
14251                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14253                {
14254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14255                }
14256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14258                }
14259            }
14260
14261            next_offset += envelope_size;
14262            _next_ordinal_to_read += 1;
14263            if next_offset >= end_offset {
14264                return Ok(());
14265            }
14266
14267            // Decode unknown envelopes for gaps in ordinals.
14268            while _next_ordinal_to_read < 12 {
14269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14270                _next_ordinal_to_read += 1;
14271                next_offset += envelope_size;
14272            }
14273
14274            let next_out_of_line = decoder.next_out_of_line();
14275            let handles_before = decoder.remaining_handles();
14276            if let Some((inlined, num_bytes, num_handles)) =
14277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14278            {
14279                let member_inline_size =
14280                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14281                        decoder.context,
14282                    );
14283                if inlined != (member_inline_size <= 4) {
14284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14285                }
14286                let inner_offset;
14287                let mut inner_depth = depth.clone();
14288                if inlined {
14289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14290                    inner_offset = next_offset;
14291                } else {
14292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14293                    inner_depth.increment()?;
14294                }
14295                let val_ref = self
14296                    .thread_network_data
14297                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14298                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14300                {
14301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14302                }
14303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14305                }
14306            }
14307
14308            next_offset += envelope_size;
14309            _next_ordinal_to_read += 1;
14310            if next_offset >= end_offset {
14311                return Ok(());
14312            }
14313
14314            // Decode unknown envelopes for gaps in ordinals.
14315            while _next_ordinal_to_read < 13 {
14316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14317                _next_ordinal_to_read += 1;
14318                next_offset += envelope_size;
14319            }
14320
14321            let next_out_of_line = decoder.next_out_of_line();
14322            let handles_before = decoder.remaining_handles();
14323            if let Some((inlined, num_bytes, num_handles)) =
14324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14325            {
14326                let member_inline_size =
14327                    <fidl::encoding::Vector<u8, 255> as fidl::encoding::TypeMarker>::inline_size(
14328                        decoder.context,
14329                    );
14330                if inlined != (member_inline_size <= 4) {
14331                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14332                }
14333                let inner_offset;
14334                let mut inner_depth = depth.clone();
14335                if inlined {
14336                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14337                    inner_offset = next_offset;
14338                } else {
14339                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14340                    inner_depth.increment()?;
14341                }
14342                let val_ref = self
14343                    .thread_stable_network_data
14344                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 255>, D));
14345                fidl::decode!(fidl::encoding::Vector<u8, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
14346                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14347                {
14348                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14349                }
14350                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14351                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14352                }
14353            }
14354
14355            next_offset += envelope_size;
14356            _next_ordinal_to_read += 1;
14357            if next_offset >= end_offset {
14358                return Ok(());
14359            }
14360
14361            // Decode unknown envelopes for gaps in ordinals.
14362            while _next_ordinal_to_read < 14 {
14363                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14364                _next_ordinal_to_read += 1;
14365                next_offset += envelope_size;
14366            }
14367
14368            let next_out_of_line = decoder.next_out_of_line();
14369            let handles_before = decoder.remaining_handles();
14370            if let Some((inlined, num_bytes, num_handles)) =
14371                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14372            {
14373                let member_inline_size =
14374                    <BorderRoutingCounters as fidl::encoding::TypeMarker>::inline_size(
14375                        decoder.context,
14376                    );
14377                if inlined != (member_inline_size <= 4) {
14378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14379                }
14380                let inner_offset;
14381                let mut inner_depth = depth.clone();
14382                if inlined {
14383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14384                    inner_offset = next_offset;
14385                } else {
14386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14387                    inner_depth.increment()?;
14388                }
14389                let val_ref = self
14390                    .thread_border_routing_counters
14391                    .get_or_insert_with(|| fidl::new_empty!(BorderRoutingCounters, D));
14392                fidl::decode!(
14393                    BorderRoutingCounters,
14394                    D,
14395                    val_ref,
14396                    decoder,
14397                    inner_offset,
14398                    inner_depth
14399                )?;
14400                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14401                {
14402                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14403                }
14404                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14405                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14406                }
14407            }
14408
14409            next_offset += envelope_size;
14410            _next_ordinal_to_read += 1;
14411            if next_offset >= end_offset {
14412                return Ok(());
14413            }
14414
14415            // Decode unknown envelopes for gaps in ordinals.
14416            while _next_ordinal_to_read < 15 {
14417                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14418                _next_ordinal_to_read += 1;
14419                next_offset += envelope_size;
14420            }
14421
14422            let next_out_of_line = decoder.next_out_of_line();
14423            let handles_before = decoder.remaining_handles();
14424            if let Some((inlined, num_bytes, num_handles)) =
14425                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14426            {
14427                let member_inline_size =
14428                    <SrpServerInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14429                if inlined != (member_inline_size <= 4) {
14430                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14431                }
14432                let inner_offset;
14433                let mut inner_depth = depth.clone();
14434                if inlined {
14435                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14436                    inner_offset = next_offset;
14437                } else {
14438                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14439                    inner_depth.increment()?;
14440                }
14441                let val_ref =
14442                    self.srp_server_info.get_or_insert_with(|| fidl::new_empty!(SrpServerInfo, D));
14443                fidl::decode!(SrpServerInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14445                {
14446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14447                }
14448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14450                }
14451            }
14452
14453            next_offset += envelope_size;
14454            _next_ordinal_to_read += 1;
14455            if next_offset >= end_offset {
14456                return Ok(());
14457            }
14458
14459            // Decode unknown envelopes for gaps in ordinals.
14460            while _next_ordinal_to_read < 16 {
14461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14462                _next_ordinal_to_read += 1;
14463                next_offset += envelope_size;
14464            }
14465
14466            let next_out_of_line = decoder.next_out_of_line();
14467            let handles_before = decoder.remaining_handles();
14468            if let Some((inlined, num_bytes, num_handles)) =
14469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14470            {
14471                let member_inline_size =
14472                    <DnssdCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14473                if inlined != (member_inline_size <= 4) {
14474                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14475                }
14476                let inner_offset;
14477                let mut inner_depth = depth.clone();
14478                if inlined {
14479                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14480                    inner_offset = next_offset;
14481                } else {
14482                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14483                    inner_depth.increment()?;
14484                }
14485                let val_ref =
14486                    self.dnssd_counters.get_or_insert_with(|| fidl::new_empty!(DnssdCounters, D));
14487                fidl::decode!(DnssdCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14489                {
14490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14491                }
14492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14494                }
14495            }
14496
14497            next_offset += envelope_size;
14498            _next_ordinal_to_read += 1;
14499            if next_offset >= end_offset {
14500                return Ok(());
14501            }
14502
14503            // Decode unknown envelopes for gaps in ordinals.
14504            while _next_ordinal_to_read < 17 {
14505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14506                _next_ordinal_to_read += 1;
14507                next_offset += envelope_size;
14508            }
14509
14510            let next_out_of_line = decoder.next_out_of_line();
14511            let handles_before = decoder.remaining_handles();
14512            if let Some((inlined, num_bytes, num_handles)) =
14513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14514            {
14515                let member_inline_size =
14516                    <LeaderData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14517                if inlined != (member_inline_size <= 4) {
14518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14519                }
14520                let inner_offset;
14521                let mut inner_depth = depth.clone();
14522                if inlined {
14523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14524                    inner_offset = next_offset;
14525                } else {
14526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14527                    inner_depth.increment()?;
14528                }
14529                let val_ref =
14530                    self.leader_data.get_or_insert_with(|| fidl::new_empty!(LeaderData, D));
14531                fidl::decode!(LeaderData, D, val_ref, decoder, inner_offset, inner_depth)?;
14532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14533                {
14534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14535                }
14536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14538                }
14539            }
14540
14541            next_offset += envelope_size;
14542            _next_ordinal_to_read += 1;
14543            if next_offset >= end_offset {
14544                return Ok(());
14545            }
14546
14547            // Decode unknown envelopes for gaps in ordinals.
14548            while _next_ordinal_to_read < 18 {
14549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14550                _next_ordinal_to_read += 1;
14551                next_offset += envelope_size;
14552            }
14553
14554            let next_out_of_line = decoder.next_out_of_line();
14555            let handles_before = decoder.remaining_handles();
14556            if let Some((inlined, num_bytes, num_handles)) =
14557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14558            {
14559                let member_inline_size =
14560                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14561                if inlined != (member_inline_size <= 4) {
14562                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14563                }
14564                let inner_offset;
14565                let mut inner_depth = depth.clone();
14566                if inlined {
14567                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14568                    inner_offset = next_offset;
14569                } else {
14570                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14571                    inner_depth.increment()?;
14572                }
14573                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
14574                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
14575                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14576                {
14577                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14578                }
14579                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14580                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14581                }
14582            }
14583
14584            next_offset += envelope_size;
14585            _next_ordinal_to_read += 1;
14586            if next_offset >= end_offset {
14587                return Ok(());
14588            }
14589
14590            // Decode unknown envelopes for gaps in ordinals.
14591            while _next_ordinal_to_read < 19 {
14592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14593                _next_ordinal_to_read += 1;
14594                next_offset += envelope_size;
14595            }
14596
14597            let next_out_of_line = decoder.next_out_of_line();
14598            let handles_before = decoder.remaining_handles();
14599            if let Some((inlined, num_bytes, num_handles)) =
14600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14601            {
14602                let member_inline_size =
14603                    <Nat64Info as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14604                if inlined != (member_inline_size <= 4) {
14605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14606                }
14607                let inner_offset;
14608                let mut inner_depth = depth.clone();
14609                if inlined {
14610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14611                    inner_offset = next_offset;
14612                } else {
14613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14614                    inner_depth.increment()?;
14615                }
14616                let val_ref = self.nat64_info.get_or_insert_with(|| fidl::new_empty!(Nat64Info, D));
14617                fidl::decode!(Nat64Info, D, val_ref, decoder, inner_offset, inner_depth)?;
14618                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14619                {
14620                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14621                }
14622                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14623                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14624                }
14625            }
14626
14627            next_offset += envelope_size;
14628            _next_ordinal_to_read += 1;
14629            if next_offset >= end_offset {
14630                return Ok(());
14631            }
14632
14633            // Decode unknown envelopes for gaps in ordinals.
14634            while _next_ordinal_to_read < 20 {
14635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14636                _next_ordinal_to_read += 1;
14637                next_offset += envelope_size;
14638            }
14639
14640            let next_out_of_line = decoder.next_out_of_line();
14641            let handles_before = decoder.remaining_handles();
14642            if let Some((inlined, num_bytes, num_handles)) =
14643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14644            {
14645                let member_inline_size =
14646                    <TrelCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14647                if inlined != (member_inline_size <= 4) {
14648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14649                }
14650                let inner_offset;
14651                let mut inner_depth = depth.clone();
14652                if inlined {
14653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14654                    inner_offset = next_offset;
14655                } else {
14656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14657                    inner_depth.increment()?;
14658                }
14659                let val_ref =
14660                    self.trel_counters.get_or_insert_with(|| fidl::new_empty!(TrelCounters, D));
14661                fidl::decode!(TrelCounters, D, val_ref, decoder, inner_offset, inner_depth)?;
14662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14663                {
14664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14665                }
14666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14668                }
14669            }
14670
14671            next_offset += envelope_size;
14672            _next_ordinal_to_read += 1;
14673            if next_offset >= end_offset {
14674                return Ok(());
14675            }
14676
14677            // Decode unknown envelopes for gaps in ordinals.
14678            while _next_ordinal_to_read < 21 {
14679                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14680                _next_ordinal_to_read += 1;
14681                next_offset += envelope_size;
14682            }
14683
14684            let next_out_of_line = decoder.next_out_of_line();
14685            let handles_before = decoder.remaining_handles();
14686            if let Some((inlined, num_bytes, num_handles)) =
14687                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14688            {
14689                let member_inline_size =
14690                    <TrelPeersInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14691                if inlined != (member_inline_size <= 4) {
14692                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14693                }
14694                let inner_offset;
14695                let mut inner_depth = depth.clone();
14696                if inlined {
14697                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14698                    inner_offset = next_offset;
14699                } else {
14700                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14701                    inner_depth.increment()?;
14702                }
14703                let val_ref =
14704                    self.trel_peers_info.get_or_insert_with(|| fidl::new_empty!(TrelPeersInfo, D));
14705                fidl::decode!(TrelPeersInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14706                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14707                {
14708                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14709                }
14710                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14711                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14712                }
14713            }
14714
14715            next_offset += envelope_size;
14716            _next_ordinal_to_read += 1;
14717            if next_offset >= end_offset {
14718                return Ok(());
14719            }
14720
14721            // Decode unknown envelopes for gaps in ordinals.
14722            while _next_ordinal_to_read < 22 {
14723                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14724                _next_ordinal_to_read += 1;
14725                next_offset += envelope_size;
14726            }
14727
14728            let next_out_of_line = decoder.next_out_of_line();
14729            let handles_before = decoder.remaining_handles();
14730            if let Some((inlined, num_bytes, num_handles)) =
14731                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14732            {
14733                let member_inline_size =
14734                    <UpstreamDnsInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14735                if inlined != (member_inline_size <= 4) {
14736                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14737                }
14738                let inner_offset;
14739                let mut inner_depth = depth.clone();
14740                if inlined {
14741                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14742                    inner_offset = next_offset;
14743                } else {
14744                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14745                    inner_depth.increment()?;
14746                }
14747                let val_ref = self
14748                    .upstream_dns_info
14749                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsInfo, D));
14750                fidl::decode!(UpstreamDnsInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14752                {
14753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14754                }
14755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14757                }
14758            }
14759
14760            next_offset += envelope_size;
14761            _next_ordinal_to_read += 1;
14762            if next_offset >= end_offset {
14763                return Ok(());
14764            }
14765
14766            // Decode unknown envelopes for gaps in ordinals.
14767            while _next_ordinal_to_read < 23 {
14768                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14769                _next_ordinal_to_read += 1;
14770                next_offset += envelope_size;
14771            }
14772
14773            let next_out_of_line = decoder.next_out_of_line();
14774            let handles_before = decoder.remaining_handles();
14775            if let Some((inlined, num_bytes, num_handles)) =
14776                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14777            {
14778                let member_inline_size =
14779                    <Dhcp6PdInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14780                if inlined != (member_inline_size <= 4) {
14781                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14782                }
14783                let inner_offset;
14784                let mut inner_depth = depth.clone();
14785                if inlined {
14786                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14787                    inner_offset = next_offset;
14788                } else {
14789                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14790                    inner_depth.increment()?;
14791                }
14792                let val_ref =
14793                    self.dhcp6pd_info.get_or_insert_with(|| fidl::new_empty!(Dhcp6PdInfo, D));
14794                fidl::decode!(Dhcp6PdInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
14795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14796                {
14797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14798                }
14799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14801                }
14802            }
14803
14804            next_offset += envelope_size;
14805            _next_ordinal_to_read += 1;
14806            if next_offset >= end_offset {
14807                return Ok(());
14808            }
14809
14810            // Decode unknown envelopes for gaps in ordinals.
14811            while _next_ordinal_to_read < 24 {
14812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14813                _next_ordinal_to_read += 1;
14814                next_offset += envelope_size;
14815            }
14816
14817            let next_out_of_line = decoder.next_out_of_line();
14818            let handles_before = decoder.remaining_handles();
14819            if let Some((inlined, num_bytes, num_handles)) =
14820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14821            {
14822                let member_inline_size = <fidl::encoding::Vector<LinkMetricsEntry, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14823                if inlined != (member_inline_size <= 4) {
14824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14825                }
14826                let inner_offset;
14827                let mut inner_depth = depth.clone();
14828                if inlined {
14829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14830                    inner_offset = next_offset;
14831                } else {
14832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14833                    inner_depth.increment()?;
14834                }
14835                let val_ref = self.link_metrics_entries.get_or_insert_with(
14836                    || fidl::new_empty!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D),
14837                );
14838                fidl::decode!(fidl::encoding::Vector<LinkMetricsEntry, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
14839                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14840                {
14841                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14842                }
14843                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14844                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14845                }
14846            }
14847
14848            next_offset += envelope_size;
14849            _next_ordinal_to_read += 1;
14850            if next_offset >= end_offset {
14851                return Ok(());
14852            }
14853
14854            // Decode unknown envelopes for gaps in ordinals.
14855            while _next_ordinal_to_read < 25 {
14856                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14857                _next_ordinal_to_read += 1;
14858                next_offset += envelope_size;
14859            }
14860
14861            let next_out_of_line = decoder.next_out_of_line();
14862            let handles_before = decoder.remaining_handles();
14863            if let Some((inlined, num_bytes, num_handles)) =
14864                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14865            {
14866                let member_inline_size = <fidl_fuchsia_lowpan_device__common::BorderAgentCounters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14867                if inlined != (member_inline_size <= 4) {
14868                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14869                }
14870                let inner_offset;
14871                let mut inner_depth = depth.clone();
14872                if inlined {
14873                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14874                    inner_offset = next_offset;
14875                } else {
14876                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14877                    inner_depth.increment()?;
14878                }
14879                let val_ref = self.border_agent_counters.get_or_insert_with(|| {
14880                    fidl::new_empty!(fidl_fuchsia_lowpan_device__common::BorderAgentCounters, D)
14881                });
14882                fidl::decode!(
14883                    fidl_fuchsia_lowpan_device__common::BorderAgentCounters,
14884                    D,
14885                    val_ref,
14886                    decoder,
14887                    inner_offset,
14888                    inner_depth
14889                )?;
14890                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14891                {
14892                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14893                }
14894                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14895                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14896                }
14897            }
14898
14899            next_offset += envelope_size;
14900
14901            // Decode the remaining unknown envelopes.
14902            while next_offset < end_offset {
14903                _next_ordinal_to_read += 1;
14904                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14905                next_offset += envelope_size;
14906            }
14907
14908            Ok(())
14909        }
14910    }
14911
14912    impl TrelCounters {
14913        #[inline(always)]
14914        fn max_ordinal_present(&self) -> u64 {
14915            if let Some(_) = self.tx_packets {
14916                return 5;
14917            }
14918            if let Some(_) = self.tx_failure {
14919                return 4;
14920            }
14921            if let Some(_) = self.tx_bytes {
14922                return 3;
14923            }
14924            if let Some(_) = self.rx_packets {
14925                return 2;
14926            }
14927            if let Some(_) = self.rx_bytes {
14928                return 1;
14929            }
14930            0
14931        }
14932    }
14933
14934    impl fidl::encoding::ValueTypeMarker for TrelCounters {
14935        type Borrowed<'a> = &'a Self;
14936        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14937            value
14938        }
14939    }
14940
14941    unsafe impl fidl::encoding::TypeMarker for TrelCounters {
14942        type Owned = Self;
14943
14944        #[inline(always)]
14945        fn inline_align(_context: fidl::encoding::Context) -> usize {
14946            8
14947        }
14948
14949        #[inline(always)]
14950        fn inline_size(_context: fidl::encoding::Context) -> usize {
14951            16
14952        }
14953    }
14954
14955    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelCounters, D>
14956        for &TrelCounters
14957    {
14958        unsafe fn encode(
14959            self,
14960            encoder: &mut fidl::encoding::Encoder<'_, D>,
14961            offset: usize,
14962            mut depth: fidl::encoding::Depth,
14963        ) -> fidl::Result<()> {
14964            encoder.debug_check_bounds::<TrelCounters>(offset);
14965            // Vector header
14966            let max_ordinal: u64 = self.max_ordinal_present();
14967            encoder.write_num(max_ordinal, offset);
14968            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14969            // Calling encoder.out_of_line_offset(0) is not allowed.
14970            if max_ordinal == 0 {
14971                return Ok(());
14972            }
14973            depth.increment()?;
14974            let envelope_size = 8;
14975            let bytes_len = max_ordinal as usize * envelope_size;
14976            #[allow(unused_variables)]
14977            let offset = encoder.out_of_line_offset(bytes_len);
14978            let mut _prev_end_offset: usize = 0;
14979            if 1 > max_ordinal {
14980                return Ok(());
14981            }
14982
14983            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14984            // are envelope_size bytes.
14985            let cur_offset: usize = (1 - 1) * envelope_size;
14986
14987            // Zero reserved fields.
14988            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14989
14990            // Safety:
14991            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14992            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14993            //   envelope_size bytes, there is always sufficient room.
14994            fidl::encoding::encode_in_envelope_optional::<u64, D>(
14995                self.rx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
14996                encoder,
14997                offset + cur_offset,
14998                depth,
14999            )?;
15000
15001            _prev_end_offset = cur_offset + envelope_size;
15002            if 2 > max_ordinal {
15003                return Ok(());
15004            }
15005
15006            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15007            // are envelope_size bytes.
15008            let cur_offset: usize = (2 - 1) * envelope_size;
15009
15010            // Zero reserved fields.
15011            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15012
15013            // Safety:
15014            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15015            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15016            //   envelope_size bytes, there is always sufficient room.
15017            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15018                self.rx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15019                encoder,
15020                offset + cur_offset,
15021                depth,
15022            )?;
15023
15024            _prev_end_offset = cur_offset + envelope_size;
15025            if 3 > max_ordinal {
15026                return Ok(());
15027            }
15028
15029            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15030            // are envelope_size bytes.
15031            let cur_offset: usize = (3 - 1) * envelope_size;
15032
15033            // Zero reserved fields.
15034            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15035
15036            // Safety:
15037            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15038            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15039            //   envelope_size bytes, there is always sufficient room.
15040            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15041                self.tx_bytes.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15042                encoder,
15043                offset + cur_offset,
15044                depth,
15045            )?;
15046
15047            _prev_end_offset = cur_offset + envelope_size;
15048            if 4 > max_ordinal {
15049                return Ok(());
15050            }
15051
15052            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15053            // are envelope_size bytes.
15054            let cur_offset: usize = (4 - 1) * envelope_size;
15055
15056            // Zero reserved fields.
15057            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15058
15059            // Safety:
15060            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15061            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15062            //   envelope_size bytes, there is always sufficient room.
15063            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15064                self.tx_failure.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15065                encoder,
15066                offset + cur_offset,
15067                depth,
15068            )?;
15069
15070            _prev_end_offset = cur_offset + envelope_size;
15071            if 5 > max_ordinal {
15072                return Ok(());
15073            }
15074
15075            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15076            // are envelope_size bytes.
15077            let cur_offset: usize = (5 - 1) * envelope_size;
15078
15079            // Zero reserved fields.
15080            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15081
15082            // Safety:
15083            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15084            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15085            //   envelope_size bytes, there is always sufficient room.
15086            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15087                self.tx_packets.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15088                encoder,
15089                offset + cur_offset,
15090                depth,
15091            )?;
15092
15093            _prev_end_offset = cur_offset + envelope_size;
15094
15095            Ok(())
15096        }
15097    }
15098
15099    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelCounters {
15100        #[inline(always)]
15101        fn new_empty() -> Self {
15102            Self::default()
15103        }
15104
15105        unsafe fn decode(
15106            &mut self,
15107            decoder: &mut fidl::encoding::Decoder<'_, D>,
15108            offset: usize,
15109            mut depth: fidl::encoding::Depth,
15110        ) -> fidl::Result<()> {
15111            decoder.debug_check_bounds::<Self>(offset);
15112            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15113                None => return Err(fidl::Error::NotNullable),
15114                Some(len) => len,
15115            };
15116            // Calling decoder.out_of_line_offset(0) is not allowed.
15117            if len == 0 {
15118                return Ok(());
15119            };
15120            depth.increment()?;
15121            let envelope_size = 8;
15122            let bytes_len = len * envelope_size;
15123            let offset = decoder.out_of_line_offset(bytes_len)?;
15124            // Decode the envelope for each type.
15125            let mut _next_ordinal_to_read = 0;
15126            let mut next_offset = offset;
15127            let end_offset = offset + bytes_len;
15128            _next_ordinal_to_read += 1;
15129            if next_offset >= end_offset {
15130                return Ok(());
15131            }
15132
15133            // Decode unknown envelopes for gaps in ordinals.
15134            while _next_ordinal_to_read < 1 {
15135                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15136                _next_ordinal_to_read += 1;
15137                next_offset += envelope_size;
15138            }
15139
15140            let next_out_of_line = decoder.next_out_of_line();
15141            let handles_before = decoder.remaining_handles();
15142            if let Some((inlined, num_bytes, num_handles)) =
15143                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15144            {
15145                let member_inline_size =
15146                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15147                if inlined != (member_inline_size <= 4) {
15148                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15149                }
15150                let inner_offset;
15151                let mut inner_depth = depth.clone();
15152                if inlined {
15153                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15154                    inner_offset = next_offset;
15155                } else {
15156                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15157                    inner_depth.increment()?;
15158                }
15159                let val_ref = self.rx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15160                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15161                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15162                {
15163                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15164                }
15165                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15166                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15167                }
15168            }
15169
15170            next_offset += envelope_size;
15171            _next_ordinal_to_read += 1;
15172            if next_offset >= end_offset {
15173                return Ok(());
15174            }
15175
15176            // Decode unknown envelopes for gaps in ordinals.
15177            while _next_ordinal_to_read < 2 {
15178                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15179                _next_ordinal_to_read += 1;
15180                next_offset += envelope_size;
15181            }
15182
15183            let next_out_of_line = decoder.next_out_of_line();
15184            let handles_before = decoder.remaining_handles();
15185            if let Some((inlined, num_bytes, num_handles)) =
15186                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15187            {
15188                let member_inline_size =
15189                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15190                if inlined != (member_inline_size <= 4) {
15191                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15192                }
15193                let inner_offset;
15194                let mut inner_depth = depth.clone();
15195                if inlined {
15196                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15197                    inner_offset = next_offset;
15198                } else {
15199                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15200                    inner_depth.increment()?;
15201                }
15202                let val_ref = self.rx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15203                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15204                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15205                {
15206                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15207                }
15208                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15209                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15210                }
15211            }
15212
15213            next_offset += envelope_size;
15214            _next_ordinal_to_read += 1;
15215            if next_offset >= end_offset {
15216                return Ok(());
15217            }
15218
15219            // Decode unknown envelopes for gaps in ordinals.
15220            while _next_ordinal_to_read < 3 {
15221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15222                _next_ordinal_to_read += 1;
15223                next_offset += envelope_size;
15224            }
15225
15226            let next_out_of_line = decoder.next_out_of_line();
15227            let handles_before = decoder.remaining_handles();
15228            if let Some((inlined, num_bytes, num_handles)) =
15229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15230            {
15231                let member_inline_size =
15232                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15233                if inlined != (member_inline_size <= 4) {
15234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15235                }
15236                let inner_offset;
15237                let mut inner_depth = depth.clone();
15238                if inlined {
15239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15240                    inner_offset = next_offset;
15241                } else {
15242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15243                    inner_depth.increment()?;
15244                }
15245                let val_ref = self.tx_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
15246                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15248                {
15249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15250                }
15251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15253                }
15254            }
15255
15256            next_offset += envelope_size;
15257            _next_ordinal_to_read += 1;
15258            if next_offset >= end_offset {
15259                return Ok(());
15260            }
15261
15262            // Decode unknown envelopes for gaps in ordinals.
15263            while _next_ordinal_to_read < 4 {
15264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15265                _next_ordinal_to_read += 1;
15266                next_offset += envelope_size;
15267            }
15268
15269            let next_out_of_line = decoder.next_out_of_line();
15270            let handles_before = decoder.remaining_handles();
15271            if let Some((inlined, num_bytes, num_handles)) =
15272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15273            {
15274                let member_inline_size =
15275                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15276                if inlined != (member_inline_size <= 4) {
15277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15278                }
15279                let inner_offset;
15280                let mut inner_depth = depth.clone();
15281                if inlined {
15282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15283                    inner_offset = next_offset;
15284                } else {
15285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15286                    inner_depth.increment()?;
15287                }
15288                let val_ref = self.tx_failure.get_or_insert_with(|| fidl::new_empty!(u64, D));
15289                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15290                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15291                {
15292                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15293                }
15294                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15295                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15296                }
15297            }
15298
15299            next_offset += envelope_size;
15300            _next_ordinal_to_read += 1;
15301            if next_offset >= end_offset {
15302                return Ok(());
15303            }
15304
15305            // Decode unknown envelopes for gaps in ordinals.
15306            while _next_ordinal_to_read < 5 {
15307                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15308                _next_ordinal_to_read += 1;
15309                next_offset += envelope_size;
15310            }
15311
15312            let next_out_of_line = decoder.next_out_of_line();
15313            let handles_before = decoder.remaining_handles();
15314            if let Some((inlined, num_bytes, num_handles)) =
15315                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15316            {
15317                let member_inline_size =
15318                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15319                if inlined != (member_inline_size <= 4) {
15320                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15321                }
15322                let inner_offset;
15323                let mut inner_depth = depth.clone();
15324                if inlined {
15325                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15326                    inner_offset = next_offset;
15327                } else {
15328                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15329                    inner_depth.increment()?;
15330                }
15331                let val_ref = self.tx_packets.get_or_insert_with(|| fidl::new_empty!(u64, D));
15332                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15334                {
15335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15336                }
15337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15339                }
15340            }
15341
15342            next_offset += envelope_size;
15343
15344            // Decode the remaining unknown envelopes.
15345            while next_offset < end_offset {
15346                _next_ordinal_to_read += 1;
15347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15348                next_offset += envelope_size;
15349            }
15350
15351            Ok(())
15352        }
15353    }
15354
15355    impl TrelPeersInfo {
15356        #[inline(always)]
15357        fn max_ordinal_present(&self) -> u64 {
15358            if let Some(_) = self.num_trel_peers {
15359                return 1;
15360            }
15361            0
15362        }
15363    }
15364
15365    impl fidl::encoding::ValueTypeMarker for TrelPeersInfo {
15366        type Borrowed<'a> = &'a Self;
15367        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15368            value
15369        }
15370    }
15371
15372    unsafe impl fidl::encoding::TypeMarker for TrelPeersInfo {
15373        type Owned = Self;
15374
15375        #[inline(always)]
15376        fn inline_align(_context: fidl::encoding::Context) -> usize {
15377            8
15378        }
15379
15380        #[inline(always)]
15381        fn inline_size(_context: fidl::encoding::Context) -> usize {
15382            16
15383        }
15384    }
15385
15386    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TrelPeersInfo, D>
15387        for &TrelPeersInfo
15388    {
15389        unsafe fn encode(
15390            self,
15391            encoder: &mut fidl::encoding::Encoder<'_, D>,
15392            offset: usize,
15393            mut depth: fidl::encoding::Depth,
15394        ) -> fidl::Result<()> {
15395            encoder.debug_check_bounds::<TrelPeersInfo>(offset);
15396            // Vector header
15397            let max_ordinal: u64 = self.max_ordinal_present();
15398            encoder.write_num(max_ordinal, offset);
15399            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15400            // Calling encoder.out_of_line_offset(0) is not allowed.
15401            if max_ordinal == 0 {
15402                return Ok(());
15403            }
15404            depth.increment()?;
15405            let envelope_size = 8;
15406            let bytes_len = max_ordinal as usize * envelope_size;
15407            #[allow(unused_variables)]
15408            let offset = encoder.out_of_line_offset(bytes_len);
15409            let mut _prev_end_offset: usize = 0;
15410            if 1 > max_ordinal {
15411                return Ok(());
15412            }
15413
15414            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15415            // are envelope_size bytes.
15416            let cur_offset: usize = (1 - 1) * envelope_size;
15417
15418            // Zero reserved fields.
15419            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15420
15421            // Safety:
15422            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15423            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15424            //   envelope_size bytes, there is always sufficient room.
15425            fidl::encoding::encode_in_envelope_optional::<u16, D>(
15426                self.num_trel_peers.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
15427                encoder,
15428                offset + cur_offset,
15429                depth,
15430            )?;
15431
15432            _prev_end_offset = cur_offset + envelope_size;
15433
15434            Ok(())
15435        }
15436    }
15437
15438    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TrelPeersInfo {
15439        #[inline(always)]
15440        fn new_empty() -> Self {
15441            Self::default()
15442        }
15443
15444        unsafe fn decode(
15445            &mut self,
15446            decoder: &mut fidl::encoding::Decoder<'_, D>,
15447            offset: usize,
15448            mut depth: fidl::encoding::Depth,
15449        ) -> fidl::Result<()> {
15450            decoder.debug_check_bounds::<Self>(offset);
15451            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15452                None => return Err(fidl::Error::NotNullable),
15453                Some(len) => len,
15454            };
15455            // Calling decoder.out_of_line_offset(0) is not allowed.
15456            if len == 0 {
15457                return Ok(());
15458            };
15459            depth.increment()?;
15460            let envelope_size = 8;
15461            let bytes_len = len * envelope_size;
15462            let offset = decoder.out_of_line_offset(bytes_len)?;
15463            // Decode the envelope for each type.
15464            let mut _next_ordinal_to_read = 0;
15465            let mut next_offset = offset;
15466            let end_offset = offset + bytes_len;
15467            _next_ordinal_to_read += 1;
15468            if next_offset >= end_offset {
15469                return Ok(());
15470            }
15471
15472            // Decode unknown envelopes for gaps in ordinals.
15473            while _next_ordinal_to_read < 1 {
15474                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15475                _next_ordinal_to_read += 1;
15476                next_offset += envelope_size;
15477            }
15478
15479            let next_out_of_line = decoder.next_out_of_line();
15480            let handles_before = decoder.remaining_handles();
15481            if let Some((inlined, num_bytes, num_handles)) =
15482                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15483            {
15484                let member_inline_size =
15485                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15486                if inlined != (member_inline_size <= 4) {
15487                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15488                }
15489                let inner_offset;
15490                let mut inner_depth = depth.clone();
15491                if inlined {
15492                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15493                    inner_offset = next_offset;
15494                } else {
15495                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15496                    inner_depth.increment()?;
15497                }
15498                let val_ref = self.num_trel_peers.get_or_insert_with(|| fidl::new_empty!(u16, D));
15499                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
15500                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15501                {
15502                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15503                }
15504                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15505                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15506                }
15507            }
15508
15509            next_offset += envelope_size;
15510
15511            // Decode the remaining unknown envelopes.
15512            while next_offset < end_offset {
15513                _next_ordinal_to_read += 1;
15514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15515                next_offset += envelope_size;
15516            }
15517
15518            Ok(())
15519        }
15520    }
15521
15522    impl UpstreamDnsCounters {
15523        #[inline(always)]
15524        fn max_ordinal_present(&self) -> u64 {
15525            if let Some(_) = self.failures {
15526                return 3;
15527            }
15528            if let Some(_) = self.responses {
15529                return 2;
15530            }
15531            if let Some(_) = self.queries {
15532                return 1;
15533            }
15534            0
15535        }
15536    }
15537
15538    impl fidl::encoding::ValueTypeMarker for UpstreamDnsCounters {
15539        type Borrowed<'a> = &'a Self;
15540        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15541            value
15542        }
15543    }
15544
15545    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsCounters {
15546        type Owned = Self;
15547
15548        #[inline(always)]
15549        fn inline_align(_context: fidl::encoding::Context) -> usize {
15550            8
15551        }
15552
15553        #[inline(always)]
15554        fn inline_size(_context: fidl::encoding::Context) -> usize {
15555            16
15556        }
15557    }
15558
15559    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsCounters, D>
15560        for &UpstreamDnsCounters
15561    {
15562        unsafe fn encode(
15563            self,
15564            encoder: &mut fidl::encoding::Encoder<'_, D>,
15565            offset: usize,
15566            mut depth: fidl::encoding::Depth,
15567        ) -> fidl::Result<()> {
15568            encoder.debug_check_bounds::<UpstreamDnsCounters>(offset);
15569            // Vector header
15570            let max_ordinal: u64 = self.max_ordinal_present();
15571            encoder.write_num(max_ordinal, offset);
15572            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15573            // Calling encoder.out_of_line_offset(0) is not allowed.
15574            if max_ordinal == 0 {
15575                return Ok(());
15576            }
15577            depth.increment()?;
15578            let envelope_size = 8;
15579            let bytes_len = max_ordinal as usize * envelope_size;
15580            #[allow(unused_variables)]
15581            let offset = encoder.out_of_line_offset(bytes_len);
15582            let mut _prev_end_offset: usize = 0;
15583            if 1 > max_ordinal {
15584                return Ok(());
15585            }
15586
15587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15588            // are envelope_size bytes.
15589            let cur_offset: usize = (1 - 1) * envelope_size;
15590
15591            // Zero reserved fields.
15592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15593
15594            // Safety:
15595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15597            //   envelope_size bytes, there is always sufficient room.
15598            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15599                self.queries.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15600                encoder,
15601                offset + cur_offset,
15602                depth,
15603            )?;
15604
15605            _prev_end_offset = cur_offset + envelope_size;
15606            if 2 > max_ordinal {
15607                return Ok(());
15608            }
15609
15610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15611            // are envelope_size bytes.
15612            let cur_offset: usize = (2 - 1) * envelope_size;
15613
15614            // Zero reserved fields.
15615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15616
15617            // Safety:
15618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15620            //   envelope_size bytes, there is always sufficient room.
15621            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15622                self.responses.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15623                encoder,
15624                offset + cur_offset,
15625                depth,
15626            )?;
15627
15628            _prev_end_offset = cur_offset + envelope_size;
15629            if 3 > max_ordinal {
15630                return Ok(());
15631            }
15632
15633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15634            // are envelope_size bytes.
15635            let cur_offset: usize = (3 - 1) * envelope_size;
15636
15637            // Zero reserved fields.
15638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15639
15640            // Safety:
15641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15643            //   envelope_size bytes, there is always sufficient room.
15644            fidl::encoding::encode_in_envelope_optional::<u32, D>(
15645                self.failures.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
15646                encoder,
15647                offset + cur_offset,
15648                depth,
15649            )?;
15650
15651            _prev_end_offset = cur_offset + envelope_size;
15652
15653            Ok(())
15654        }
15655    }
15656
15657    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsCounters {
15658        #[inline(always)]
15659        fn new_empty() -> Self {
15660            Self::default()
15661        }
15662
15663        unsafe fn decode(
15664            &mut self,
15665            decoder: &mut fidl::encoding::Decoder<'_, D>,
15666            offset: usize,
15667            mut depth: fidl::encoding::Depth,
15668        ) -> fidl::Result<()> {
15669            decoder.debug_check_bounds::<Self>(offset);
15670            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15671                None => return Err(fidl::Error::NotNullable),
15672                Some(len) => len,
15673            };
15674            // Calling decoder.out_of_line_offset(0) is not allowed.
15675            if len == 0 {
15676                return Ok(());
15677            };
15678            depth.increment()?;
15679            let envelope_size = 8;
15680            let bytes_len = len * envelope_size;
15681            let offset = decoder.out_of_line_offset(bytes_len)?;
15682            // Decode the envelope for each type.
15683            let mut _next_ordinal_to_read = 0;
15684            let mut next_offset = offset;
15685            let end_offset = offset + bytes_len;
15686            _next_ordinal_to_read += 1;
15687            if next_offset >= end_offset {
15688                return Ok(());
15689            }
15690
15691            // Decode unknown envelopes for gaps in ordinals.
15692            while _next_ordinal_to_read < 1 {
15693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15694                _next_ordinal_to_read += 1;
15695                next_offset += envelope_size;
15696            }
15697
15698            let next_out_of_line = decoder.next_out_of_line();
15699            let handles_before = decoder.remaining_handles();
15700            if let Some((inlined, num_bytes, num_handles)) =
15701                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15702            {
15703                let member_inline_size =
15704                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15705                if inlined != (member_inline_size <= 4) {
15706                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15707                }
15708                let inner_offset;
15709                let mut inner_depth = depth.clone();
15710                if inlined {
15711                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15712                    inner_offset = next_offset;
15713                } else {
15714                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15715                    inner_depth.increment()?;
15716                }
15717                let val_ref = self.queries.get_or_insert_with(|| fidl::new_empty!(u32, D));
15718                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15720                {
15721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15722                }
15723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15725                }
15726            }
15727
15728            next_offset += envelope_size;
15729            _next_ordinal_to_read += 1;
15730            if next_offset >= end_offset {
15731                return Ok(());
15732            }
15733
15734            // Decode unknown envelopes for gaps in ordinals.
15735            while _next_ordinal_to_read < 2 {
15736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15737                _next_ordinal_to_read += 1;
15738                next_offset += envelope_size;
15739            }
15740
15741            let next_out_of_line = decoder.next_out_of_line();
15742            let handles_before = decoder.remaining_handles();
15743            if let Some((inlined, num_bytes, num_handles)) =
15744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15745            {
15746                let member_inline_size =
15747                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15748                if inlined != (member_inline_size <= 4) {
15749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15750                }
15751                let inner_offset;
15752                let mut inner_depth = depth.clone();
15753                if inlined {
15754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15755                    inner_offset = next_offset;
15756                } else {
15757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15758                    inner_depth.increment()?;
15759                }
15760                let val_ref = self.responses.get_or_insert_with(|| fidl::new_empty!(u32, D));
15761                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15763                {
15764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15765                }
15766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15768                }
15769            }
15770
15771            next_offset += envelope_size;
15772            _next_ordinal_to_read += 1;
15773            if next_offset >= end_offset {
15774                return Ok(());
15775            }
15776
15777            // Decode unknown envelopes for gaps in ordinals.
15778            while _next_ordinal_to_read < 3 {
15779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15780                _next_ordinal_to_read += 1;
15781                next_offset += envelope_size;
15782            }
15783
15784            let next_out_of_line = decoder.next_out_of_line();
15785            let handles_before = decoder.remaining_handles();
15786            if let Some((inlined, num_bytes, num_handles)) =
15787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15788            {
15789                let member_inline_size =
15790                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15791                if inlined != (member_inline_size <= 4) {
15792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15793                }
15794                let inner_offset;
15795                let mut inner_depth = depth.clone();
15796                if inlined {
15797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15798                    inner_offset = next_offset;
15799                } else {
15800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15801                    inner_depth.increment()?;
15802                }
15803                let val_ref = self.failures.get_or_insert_with(|| fidl::new_empty!(u32, D));
15804                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
15805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15806                {
15807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15808                }
15809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15811                }
15812            }
15813
15814            next_offset += envelope_size;
15815
15816            // Decode the remaining unknown envelopes.
15817            while next_offset < end_offset {
15818                _next_ordinal_to_read += 1;
15819                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15820                next_offset += envelope_size;
15821            }
15822
15823            Ok(())
15824        }
15825    }
15826
15827    impl UpstreamDnsInfo {
15828        #[inline(always)]
15829        fn max_ordinal_present(&self) -> u64 {
15830            if let Some(_) = self.upstream_dns_query_state {
15831                return 1;
15832            }
15833            0
15834        }
15835    }
15836
15837    impl fidl::encoding::ValueTypeMarker for UpstreamDnsInfo {
15838        type Borrowed<'a> = &'a Self;
15839        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15840            value
15841        }
15842    }
15843
15844    unsafe impl fidl::encoding::TypeMarker for UpstreamDnsInfo {
15845        type Owned = Self;
15846
15847        #[inline(always)]
15848        fn inline_align(_context: fidl::encoding::Context) -> usize {
15849            8
15850        }
15851
15852        #[inline(always)]
15853        fn inline_size(_context: fidl::encoding::Context) -> usize {
15854            16
15855        }
15856    }
15857
15858    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpstreamDnsInfo, D>
15859        for &UpstreamDnsInfo
15860    {
15861        unsafe fn encode(
15862            self,
15863            encoder: &mut fidl::encoding::Encoder<'_, D>,
15864            offset: usize,
15865            mut depth: fidl::encoding::Depth,
15866        ) -> fidl::Result<()> {
15867            encoder.debug_check_bounds::<UpstreamDnsInfo>(offset);
15868            // Vector header
15869            let max_ordinal: u64 = self.max_ordinal_present();
15870            encoder.write_num(max_ordinal, offset);
15871            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15872            // Calling encoder.out_of_line_offset(0) is not allowed.
15873            if max_ordinal == 0 {
15874                return Ok(());
15875            }
15876            depth.increment()?;
15877            let envelope_size = 8;
15878            let bytes_len = max_ordinal as usize * envelope_size;
15879            #[allow(unused_variables)]
15880            let offset = encoder.out_of_line_offset(bytes_len);
15881            let mut _prev_end_offset: usize = 0;
15882            if 1 > max_ordinal {
15883                return Ok(());
15884            }
15885
15886            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15887            // are envelope_size bytes.
15888            let cur_offset: usize = (1 - 1) * envelope_size;
15889
15890            // Zero reserved fields.
15891            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15892
15893            // Safety:
15894            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15895            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15896            //   envelope_size bytes, there is always sufficient room.
15897            fidl::encoding::encode_in_envelope_optional::<UpstreamDnsQueryState, D>(
15898                self.upstream_dns_query_state
15899                    .as_ref()
15900                    .map(<UpstreamDnsQueryState as fidl::encoding::ValueTypeMarker>::borrow),
15901                encoder,
15902                offset + cur_offset,
15903                depth,
15904            )?;
15905
15906            _prev_end_offset = cur_offset + envelope_size;
15907
15908            Ok(())
15909        }
15910    }
15911
15912    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpstreamDnsInfo {
15913        #[inline(always)]
15914        fn new_empty() -> Self {
15915            Self::default()
15916        }
15917
15918        unsafe fn decode(
15919            &mut self,
15920            decoder: &mut fidl::encoding::Decoder<'_, D>,
15921            offset: usize,
15922            mut depth: fidl::encoding::Depth,
15923        ) -> fidl::Result<()> {
15924            decoder.debug_check_bounds::<Self>(offset);
15925            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15926                None => return Err(fidl::Error::NotNullable),
15927                Some(len) => len,
15928            };
15929            // Calling decoder.out_of_line_offset(0) is not allowed.
15930            if len == 0 {
15931                return Ok(());
15932            };
15933            depth.increment()?;
15934            let envelope_size = 8;
15935            let bytes_len = len * envelope_size;
15936            let offset = decoder.out_of_line_offset(bytes_len)?;
15937            // Decode the envelope for each type.
15938            let mut _next_ordinal_to_read = 0;
15939            let mut next_offset = offset;
15940            let end_offset = offset + bytes_len;
15941            _next_ordinal_to_read += 1;
15942            if next_offset >= end_offset {
15943                return Ok(());
15944            }
15945
15946            // Decode unknown envelopes for gaps in ordinals.
15947            while _next_ordinal_to_read < 1 {
15948                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15949                _next_ordinal_to_read += 1;
15950                next_offset += envelope_size;
15951            }
15952
15953            let next_out_of_line = decoder.next_out_of_line();
15954            let handles_before = decoder.remaining_handles();
15955            if let Some((inlined, num_bytes, num_handles)) =
15956                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15957            {
15958                let member_inline_size =
15959                    <UpstreamDnsQueryState as fidl::encoding::TypeMarker>::inline_size(
15960                        decoder.context,
15961                    );
15962                if inlined != (member_inline_size <= 4) {
15963                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15964                }
15965                let inner_offset;
15966                let mut inner_depth = depth.clone();
15967                if inlined {
15968                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15969                    inner_offset = next_offset;
15970                } else {
15971                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15972                    inner_depth.increment()?;
15973                }
15974                let val_ref = self
15975                    .upstream_dns_query_state
15976                    .get_or_insert_with(|| fidl::new_empty!(UpstreamDnsQueryState, D));
15977                fidl::decode!(
15978                    UpstreamDnsQueryState,
15979                    D,
15980                    val_ref,
15981                    decoder,
15982                    inner_offset,
15983                    inner_depth
15984                )?;
15985                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15986                {
15987                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15988                }
15989                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15990                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15991                }
15992            }
15993
15994            next_offset += envelope_size;
15995
15996            // Decode the remaining unknown envelopes.
15997            while next_offset < end_offset {
15998                _next_ordinal_to_read += 1;
15999                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16000                next_offset += envelope_size;
16001            }
16002
16003            Ok(())
16004        }
16005    }
16006
16007    impl fidl::encoding::ValueTypeMarker for JoinParams {
16008        type Borrowed<'a> = &'a Self;
16009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16010            value
16011        }
16012    }
16013
16014    unsafe impl fidl::encoding::TypeMarker for JoinParams {
16015        type Owned = Self;
16016
16017        #[inline(always)]
16018        fn inline_align(_context: fidl::encoding::Context) -> usize {
16019            8
16020        }
16021
16022        #[inline(always)]
16023        fn inline_size(_context: fidl::encoding::Context) -> usize {
16024            16
16025        }
16026    }
16027
16028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinParams, D>
16029        for &JoinParams
16030    {
16031        #[inline]
16032        unsafe fn encode(
16033            self,
16034            encoder: &mut fidl::encoding::Encoder<'_, D>,
16035            offset: usize,
16036            _depth: fidl::encoding::Depth,
16037        ) -> fidl::Result<()> {
16038            encoder.debug_check_bounds::<JoinParams>(offset);
16039            encoder.write_num::<u64>(self.ordinal(), offset);
16040            match self {
16041            JoinParams::ProvisioningParameter(ref val) => {
16042                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::ProvisioningParams, D>(
16043                    <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16044                    encoder, offset + 8, _depth
16045                )
16046            }
16047            JoinParams::JoinerParameter(ref val) => {
16048                fidl::encoding::encode_in_envelope::<JoinerCommissioningParams, D>(
16049                    <JoinerCommissioningParams as fidl::encoding::ValueTypeMarker>::borrow(val),
16050                    encoder, offset + 8, _depth
16051                )
16052            }
16053            JoinParams::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16054        }
16055        }
16056    }
16057
16058    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinParams {
16059        #[inline(always)]
16060        fn new_empty() -> Self {
16061            Self::__SourceBreaking { unknown_ordinal: 0 }
16062        }
16063
16064        #[inline]
16065        unsafe fn decode(
16066            &mut self,
16067            decoder: &mut fidl::encoding::Decoder<'_, D>,
16068            offset: usize,
16069            mut depth: fidl::encoding::Depth,
16070        ) -> fidl::Result<()> {
16071            decoder.debug_check_bounds::<Self>(offset);
16072            #[allow(unused_variables)]
16073            let next_out_of_line = decoder.next_out_of_line();
16074            let handles_before = decoder.remaining_handles();
16075            let (ordinal, inlined, num_bytes, num_handles) =
16076                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16077
16078            let member_inline_size = match ordinal {
16079            1 => <fidl_fuchsia_lowpan_device__common::ProvisioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16080            2 => <JoinerCommissioningParams as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16081            0 => return Err(fidl::Error::UnknownUnionTag),
16082            _ => num_bytes as usize,
16083        };
16084
16085            if inlined != (member_inline_size <= 4) {
16086                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16087            }
16088            let _inner_offset;
16089            if inlined {
16090                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16091                _inner_offset = offset + 8;
16092            } else {
16093                depth.increment()?;
16094                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16095            }
16096            match ordinal {
16097                1 => {
16098                    #[allow(irrefutable_let_patterns)]
16099                    if let JoinParams::ProvisioningParameter(_) = self {
16100                        // Do nothing, read the value into the object
16101                    } else {
16102                        // Initialize `self` to the right variant
16103                        *self = JoinParams::ProvisioningParameter(fidl::new_empty!(
16104                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16105                            D
16106                        ));
16107                    }
16108                    #[allow(irrefutable_let_patterns)]
16109                    if let JoinParams::ProvisioningParameter(ref mut val) = self {
16110                        fidl::decode!(
16111                            fidl_fuchsia_lowpan_device__common::ProvisioningParams,
16112                            D,
16113                            val,
16114                            decoder,
16115                            _inner_offset,
16116                            depth
16117                        )?;
16118                    } else {
16119                        unreachable!()
16120                    }
16121                }
16122                2 => {
16123                    #[allow(irrefutable_let_patterns)]
16124                    if let JoinParams::JoinerParameter(_) = self {
16125                        // Do nothing, read the value into the object
16126                    } else {
16127                        // Initialize `self` to the right variant
16128                        *self = JoinParams::JoinerParameter(fidl::new_empty!(
16129                            JoinerCommissioningParams,
16130                            D
16131                        ));
16132                    }
16133                    #[allow(irrefutable_let_patterns)]
16134                    if let JoinParams::JoinerParameter(ref mut val) = self {
16135                        fidl::decode!(
16136                            JoinerCommissioningParams,
16137                            D,
16138                            val,
16139                            decoder,
16140                            _inner_offset,
16141                            depth
16142                        )?;
16143                    } else {
16144                        unreachable!()
16145                    }
16146                }
16147                #[allow(deprecated)]
16148                ordinal => {
16149                    for _ in 0..num_handles {
16150                        decoder.drop_next_handle()?;
16151                    }
16152                    *self = JoinParams::__SourceBreaking { unknown_ordinal: ordinal };
16153                }
16154            }
16155            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16156                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16157            }
16158            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16159                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16160            }
16161            Ok(())
16162        }
16163    }
16164
16165    impl fidl::encoding::ValueTypeMarker for ProvisioningProgress {
16166        type Borrowed<'a> = &'a Self;
16167        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16168            value
16169        }
16170    }
16171
16172    unsafe impl fidl::encoding::TypeMarker for ProvisioningProgress {
16173        type Owned = Self;
16174
16175        #[inline(always)]
16176        fn inline_align(_context: fidl::encoding::Context) -> usize {
16177            8
16178        }
16179
16180        #[inline(always)]
16181        fn inline_size(_context: fidl::encoding::Context) -> usize {
16182            16
16183        }
16184    }
16185
16186    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProvisioningProgress, D>
16187        for &ProvisioningProgress
16188    {
16189        #[inline]
16190        unsafe fn encode(
16191            self,
16192            encoder: &mut fidl::encoding::Encoder<'_, D>,
16193            offset: usize,
16194            _depth: fidl::encoding::Depth,
16195        ) -> fidl::Result<()> {
16196            encoder.debug_check_bounds::<ProvisioningProgress>(offset);
16197            encoder.write_num::<u64>(self.ordinal(), offset);
16198            match self {
16199            ProvisioningProgress::Progress(ref val) => {
16200                fidl::encoding::encode_in_envelope::<f32, D>(
16201                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
16202                    encoder, offset + 8, _depth
16203                )
16204            }
16205            ProvisioningProgress::Identity(ref val) => {
16206                fidl::encoding::encode_in_envelope::<fidl_fuchsia_lowpan_device__common::Identity, D>(
16207                    <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::ValueTypeMarker>::borrow(val),
16208                    encoder, offset + 8, _depth
16209                )
16210            }
16211            ProvisioningProgress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16212        }
16213        }
16214    }
16215
16216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProvisioningProgress {
16217        #[inline(always)]
16218        fn new_empty() -> Self {
16219            Self::__SourceBreaking { unknown_ordinal: 0 }
16220        }
16221
16222        #[inline]
16223        unsafe fn decode(
16224            &mut self,
16225            decoder: &mut fidl::encoding::Decoder<'_, D>,
16226            offset: usize,
16227            mut depth: fidl::encoding::Depth,
16228        ) -> fidl::Result<()> {
16229            decoder.debug_check_bounds::<Self>(offset);
16230            #[allow(unused_variables)]
16231            let next_out_of_line = decoder.next_out_of_line();
16232            let handles_before = decoder.remaining_handles();
16233            let (ordinal, inlined, num_bytes, num_handles) =
16234                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16235
16236            let member_inline_size = match ordinal {
16237            1 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16238            2 => <fidl_fuchsia_lowpan_device__common::Identity as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16239            0 => return Err(fidl::Error::UnknownUnionTag),
16240            _ => num_bytes as usize,
16241        };
16242
16243            if inlined != (member_inline_size <= 4) {
16244                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16245            }
16246            let _inner_offset;
16247            if inlined {
16248                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16249                _inner_offset = offset + 8;
16250            } else {
16251                depth.increment()?;
16252                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16253            }
16254            match ordinal {
16255                1 => {
16256                    #[allow(irrefutable_let_patterns)]
16257                    if let ProvisioningProgress::Progress(_) = self {
16258                        // Do nothing, read the value into the object
16259                    } else {
16260                        // Initialize `self` to the right variant
16261                        *self = ProvisioningProgress::Progress(fidl::new_empty!(f32, D));
16262                    }
16263                    #[allow(irrefutable_let_patterns)]
16264                    if let ProvisioningProgress::Progress(ref mut val) = self {
16265                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
16266                    } else {
16267                        unreachable!()
16268                    }
16269                }
16270                2 => {
16271                    #[allow(irrefutable_let_patterns)]
16272                    if let ProvisioningProgress::Identity(_) = self {
16273                        // Do nothing, read the value into the object
16274                    } else {
16275                        // Initialize `self` to the right variant
16276                        *self = ProvisioningProgress::Identity(fidl::new_empty!(
16277                            fidl_fuchsia_lowpan_device__common::Identity,
16278                            D
16279                        ));
16280                    }
16281                    #[allow(irrefutable_let_patterns)]
16282                    if let ProvisioningProgress::Identity(ref mut val) = self {
16283                        fidl::decode!(
16284                            fidl_fuchsia_lowpan_device__common::Identity,
16285                            D,
16286                            val,
16287                            decoder,
16288                            _inner_offset,
16289                            depth
16290                        )?;
16291                    } else {
16292                        unreachable!()
16293                    }
16294                }
16295                #[allow(deprecated)]
16296                ordinal => {
16297                    for _ in 0..num_handles {
16298                        decoder.drop_next_handle()?;
16299                    }
16300                    *self = ProvisioningProgress::__SourceBreaking { unknown_ordinal: ordinal };
16301                }
16302            }
16303            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16304                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16305            }
16306            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16307                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16308            }
16309            Ok(())
16310        }
16311    }
16312}