Skip to main content

fidl_fuchsia_net_interfaces_admin_common/
fidl_fuchsia_net_interfaces_admin_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
11/// Reasons from IP address removal.
12#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum AddressRemovalReason {
15    /// The address is not a valid address.
16    Invalid = 1,
17    /// The address is already assigned to the interface.
18    AlreadyAssigned = 2,
19    /// Duplicate Address Detection failed.
20    ///
21    /// A neighbor was found to hold the address.
22    DadFailed = 3,
23    /// The address was removed as a result of the interface being removed.
24    InterfaceRemoved = 4,
25    /// The address was removed from the interface by user action.
26    UserRemoved = 5,
27    /// Invalid address properties or parameters during addition or properties
28    /// update.
29    InvalidProperties = 6,
30    /// The address was voluntarily forfeited.
31    ///
32    /// While performing ongoing address conflict detection, a neighbor was
33    /// found to be using the address. This error is similar to `DAD_FAILED`,
34    /// except that it may occur at any time after the address becomes assigned.
35    Forfeited = 7,
36}
37
38impl AddressRemovalReason {
39    #[inline]
40    pub fn from_primitive(prim: u32) -> Option<Self> {
41        match prim {
42            1 => Some(Self::Invalid),
43            2 => Some(Self::AlreadyAssigned),
44            3 => Some(Self::DadFailed),
45            4 => Some(Self::InterfaceRemoved),
46            5 => Some(Self::UserRemoved),
47            6 => Some(Self::InvalidProperties),
48            7 => Some(Self::Forfeited),
49            _ => None,
50        }
51    }
52
53    #[inline]
54    pub const fn into_primitive(self) -> u32 {
55        self as u32
56    }
57}
58
59#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
60pub enum ControlDisableError {
61    #[doc(hidden)]
62    __SourceBreaking { unknown_ordinal: u32 },
63}
64
65/// Pattern that matches an unknown `ControlDisableError` member.
66#[macro_export]
67macro_rules! ControlDisableErrorUnknown {
68    () => {
69        _
70    };
71}
72
73impl ControlDisableError {
74    #[inline]
75    pub fn from_primitive(prim: u32) -> Option<Self> {
76        match prim {
77            _ => None,
78        }
79    }
80
81    #[inline]
82    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
83        match prim {
84            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
85        }
86    }
87
88    #[inline]
89    pub fn unknown() -> Self {
90        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
91    }
92
93    #[inline]
94    pub const fn into_primitive(self) -> u32 {
95        match self {
96            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
97        }
98    }
99
100    #[inline]
101    pub fn is_unknown(&self) -> bool {
102        match self {
103            Self::__SourceBreaking { unknown_ordinal: _ } => true,
104        }
105    }
106}
107
108#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
109pub enum ControlEnableError {
110    #[doc(hidden)]
111    __SourceBreaking { unknown_ordinal: u32 },
112}
113
114/// Pattern that matches an unknown `ControlEnableError` member.
115#[macro_export]
116macro_rules! ControlEnableErrorUnknown {
117    () => {
118        _
119    };
120}
121
122impl ControlEnableError {
123    #[inline]
124    pub fn from_primitive(prim: u32) -> Option<Self> {
125        match prim {
126            _ => None,
127        }
128    }
129
130    #[inline]
131    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
132        match prim {
133            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
134        }
135    }
136
137    #[inline]
138    pub fn unknown() -> Self {
139        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
140    }
141
142    #[inline]
143    pub const fn into_primitive(self) -> u32 {
144        match self {
145            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
146        }
147    }
148
149    #[inline]
150    pub fn is_unknown(&self) -> bool {
151        match self {
152            Self::__SourceBreaking { unknown_ordinal: _ } => true,
153        }
154    }
155}
156
157#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
158pub enum ControlGetConfigurationError {
159    #[doc(hidden)]
160    __SourceBreaking { unknown_ordinal: u32 },
161}
162
163/// Pattern that matches an unknown `ControlGetConfigurationError` member.
164#[macro_export]
165macro_rules! ControlGetConfigurationErrorUnknown {
166    () => {
167        _
168    };
169}
170
171impl ControlGetConfigurationError {
172    #[inline]
173    pub fn from_primitive(prim: u32) -> Option<Self> {
174        match prim {
175            _ => None,
176        }
177    }
178
179    #[inline]
180    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
181        match prim {
182            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
183        }
184    }
185
186    #[inline]
187    pub fn unknown() -> Self {
188        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
189    }
190
191    #[inline]
192    pub const fn into_primitive(self) -> u32 {
193        match self {
194            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
195        }
196    }
197
198    #[inline]
199    pub fn is_unknown(&self) -> bool {
200        match self {
201            Self::__SourceBreaking { unknown_ordinal: _ } => true,
202        }
203    }
204}
205
206#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
207pub enum ControlRemoveAddressError {
208    #[doc(hidden)]
209    __SourceBreaking { unknown_ordinal: u32 },
210}
211
212/// Pattern that matches an unknown `ControlRemoveAddressError` member.
213#[macro_export]
214macro_rules! ControlRemoveAddressErrorUnknown {
215    () => {
216        _
217    };
218}
219
220impl ControlRemoveAddressError {
221    #[inline]
222    pub fn from_primitive(prim: u32) -> Option<Self> {
223        match prim {
224            _ => None,
225        }
226    }
227
228    #[inline]
229    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
230        match prim {
231            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
232        }
233    }
234
235    #[inline]
236    pub fn unknown() -> Self {
237        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
238    }
239
240    #[inline]
241    pub const fn into_primitive(self) -> u32 {
242        match self {
243            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
244        }
245    }
246
247    #[inline]
248    pub fn is_unknown(&self) -> bool {
249        match self {
250            Self::__SourceBreaking { unknown_ordinal: _ } => true,
251        }
252    }
253}
254
255#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
256pub enum ControlRemoveError {
257    /// This interface can't be removed.
258    NotAllowed,
259    #[doc(hidden)]
260    __SourceBreaking { unknown_ordinal: u32 },
261}
262
263/// Pattern that matches an unknown `ControlRemoveError` member.
264#[macro_export]
265macro_rules! ControlRemoveErrorUnknown {
266    () => {
267        _
268    };
269}
270
271impl ControlRemoveError {
272    #[inline]
273    pub fn from_primitive(prim: u32) -> Option<Self> {
274        match prim {
275            1 => Some(Self::NotAllowed),
276            _ => None,
277        }
278    }
279
280    #[inline]
281    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
282        match prim {
283            1 => Self::NotAllowed,
284            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
285        }
286    }
287
288    #[inline]
289    pub fn unknown() -> Self {
290        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
291    }
292
293    #[inline]
294    pub const fn into_primitive(self) -> u32 {
295        match self {
296            Self::NotAllowed => 1,
297            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
298        }
299    }
300
301    #[inline]
302    pub fn is_unknown(&self) -> bool {
303        match self {
304            Self::__SourceBreaking { unknown_ordinal: _ } => true,
305            _ => false,
306        }
307    }
308}
309
310#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
311pub enum ControlSetConfigurationError {
312    /// Indicates that the provided value for `config.ipv4.forwarding` is
313    /// unsupported.
314    Ipv4ForwardingUnsupported,
315    /// Indicates that the provided value for `config.ipv4.multicast_forwarding`
316    /// is unsupported.
317    Ipv4MulticastForwardingUnsupported,
318    /// Indicates that the provided value for `config.ipv4.igmp.version` is
319    /// unsupported.
320    Ipv4IgmpVersionUnsupported,
321    /// Indicates that the provided value for `config.ipv6.forwarding` is
322    /// unsupported.
323    Ipv6ForwardingUnsupported,
324    /// Indicates that the provided value for `config.ipv6.multicast_forwarding`
325    /// is unsupported.
326    Ipv6MulticastForwardingUnsupported,
327    /// Indicates that the provided value for `config.ipv6.mld.version` is
328    /// unsupported.
329    Ipv6MldVersionUnsupported,
330    /// Indicates that a zero value was provided for a field that must be
331    /// nonzero.
332    IllegalZeroValue,
333    /// Indicates that ARP configurations are not supported for this device.
334    ///
335    /// Devices without a link (notably loopback) do not support ARP.
336    ArpNotSupported,
337    /// Indicates that NDP configurations are not supported for this device.
338    ///
339    /// Devices without a link (notably loopback) do not support NDP.
340    NdpNotSupported,
341    /// Indicates that a negative value was provided for a field that must be
342    /// non-negative.
343    IllegalNegativeValue,
344    #[doc(hidden)]
345    __SourceBreaking { unknown_ordinal: u32 },
346}
347
348/// Pattern that matches an unknown `ControlSetConfigurationError` member.
349#[macro_export]
350macro_rules! ControlSetConfigurationErrorUnknown {
351    () => {
352        _
353    };
354}
355
356impl ControlSetConfigurationError {
357    #[inline]
358    pub fn from_primitive(prim: u32) -> Option<Self> {
359        match prim {
360            1 => Some(Self::Ipv4ForwardingUnsupported),
361            2 => Some(Self::Ipv4MulticastForwardingUnsupported),
362            3 => Some(Self::Ipv4IgmpVersionUnsupported),
363            4 => Some(Self::Ipv6ForwardingUnsupported),
364            5 => Some(Self::Ipv6MulticastForwardingUnsupported),
365            6 => Some(Self::Ipv6MldVersionUnsupported),
366            7 => Some(Self::IllegalZeroValue),
367            8 => Some(Self::ArpNotSupported),
368            9 => Some(Self::NdpNotSupported),
369            10 => Some(Self::IllegalNegativeValue),
370            _ => None,
371        }
372    }
373
374    #[inline]
375    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
376        match prim {
377            1 => Self::Ipv4ForwardingUnsupported,
378            2 => Self::Ipv4MulticastForwardingUnsupported,
379            3 => Self::Ipv4IgmpVersionUnsupported,
380            4 => Self::Ipv6ForwardingUnsupported,
381            5 => Self::Ipv6MulticastForwardingUnsupported,
382            6 => Self::Ipv6MldVersionUnsupported,
383            7 => Self::IllegalZeroValue,
384            8 => Self::ArpNotSupported,
385            9 => Self::NdpNotSupported,
386            10 => Self::IllegalNegativeValue,
387            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
388        }
389    }
390
391    #[inline]
392    pub fn unknown() -> Self {
393        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
394    }
395
396    #[inline]
397    pub const fn into_primitive(self) -> u32 {
398        match self {
399            Self::Ipv4ForwardingUnsupported => 1,
400            Self::Ipv4MulticastForwardingUnsupported => 2,
401            Self::Ipv4IgmpVersionUnsupported => 3,
402            Self::Ipv6ForwardingUnsupported => 4,
403            Self::Ipv6MulticastForwardingUnsupported => 5,
404            Self::Ipv6MldVersionUnsupported => 6,
405            Self::IllegalZeroValue => 7,
406            Self::ArpNotSupported => 8,
407            Self::NdpNotSupported => 9,
408            Self::IllegalNegativeValue => 10,
409            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
410        }
411    }
412
413    #[inline]
414    pub fn is_unknown(&self) -> bool {
415        match self {
416            Self::__SourceBreaking { unknown_ordinal: _ } => true,
417            _ => false,
418        }
419    }
420}
421
422#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
423pub enum IgmpVersion {
424    /// IGMPv1.
425    V1,
426    /// IGMPv2.
427    V2,
428    /// IGMPv3.
429    V3,
430    #[doc(hidden)]
431    __SourceBreaking { unknown_ordinal: u8 },
432}
433
434/// Pattern that matches an unknown `IgmpVersion` member.
435#[macro_export]
436macro_rules! IgmpVersionUnknown {
437    () => {
438        _
439    };
440}
441
442impl IgmpVersion {
443    #[inline]
444    pub fn from_primitive(prim: u8) -> Option<Self> {
445        match prim {
446            1 => Some(Self::V1),
447            2 => Some(Self::V2),
448            3 => Some(Self::V3),
449            _ => None,
450        }
451    }
452
453    #[inline]
454    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
455        match prim {
456            1 => Self::V1,
457            2 => Self::V2,
458            3 => Self::V3,
459            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
460        }
461    }
462
463    #[inline]
464    pub fn unknown() -> Self {
465        Self::__SourceBreaking { unknown_ordinal: 0xff }
466    }
467
468    #[inline]
469    pub const fn into_primitive(self) -> u8 {
470        match self {
471            Self::V1 => 1,
472            Self::V2 => 2,
473            Self::V3 => 3,
474            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
475        }
476    }
477
478    #[inline]
479    pub fn is_unknown(&self) -> bool {
480        match self {
481            Self::__SourceBreaking { unknown_ordinal: _ } => true,
482            _ => false,
483        }
484    }
485}
486
487#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
488pub enum InterfaceRemovedReason {
489    /// Interface failed to be instantiated because the requested name
490    /// is in use.
491    DuplicateName,
492    /// The requested port is already bound to an interface.
493    PortAlreadyBound,
494    /// The provided device port can't be made into an interface because
495    /// of incompatible configuration.
496    BadPort,
497    /// The device port backing this interface has been closed.
498    PortClosed,
499    /// Administrative user action removed the interface.
500    User,
501    /// The netstack managed routes designation is invalid when creating
502    /// the interface.
503    InvalidNetstackManagedRoutesDesignation,
504    /// Cannot create a local route table as requested for the interface.
505    LocalRouteTableUnavailable,
506    #[doc(hidden)]
507    __SourceBreaking { unknown_ordinal: u32 },
508}
509
510/// Pattern that matches an unknown `InterfaceRemovedReason` member.
511#[macro_export]
512macro_rules! InterfaceRemovedReasonUnknown {
513    () => {
514        _
515    };
516}
517
518impl InterfaceRemovedReason {
519    #[inline]
520    pub fn from_primitive(prim: u32) -> Option<Self> {
521        match prim {
522            1 => Some(Self::DuplicateName),
523            2 => Some(Self::PortAlreadyBound),
524            3 => Some(Self::BadPort),
525            4 => Some(Self::PortClosed),
526            5 => Some(Self::User),
527            6 => Some(Self::InvalidNetstackManagedRoutesDesignation),
528            7 => Some(Self::LocalRouteTableUnavailable),
529            _ => None,
530        }
531    }
532
533    #[inline]
534    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
535        match prim {
536            1 => Self::DuplicateName,
537            2 => Self::PortAlreadyBound,
538            3 => Self::BadPort,
539            4 => Self::PortClosed,
540            5 => Self::User,
541            6 => Self::InvalidNetstackManagedRoutesDesignation,
542            7 => Self::LocalRouteTableUnavailable,
543            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
544        }
545    }
546
547    #[inline]
548    pub fn unknown() -> Self {
549        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
550    }
551
552    #[inline]
553    pub const fn into_primitive(self) -> u32 {
554        match self {
555            Self::DuplicateName => 1,
556            Self::PortAlreadyBound => 2,
557            Self::BadPort => 3,
558            Self::PortClosed => 4,
559            Self::User => 5,
560            Self::InvalidNetstackManagedRoutesDesignation => 6,
561            Self::LocalRouteTableUnavailable => 7,
562            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
563        }
564    }
565
566    #[inline]
567    pub fn is_unknown(&self) -> bool {
568        match self {
569            Self::__SourceBreaking { unknown_ordinal: _ } => true,
570            _ => false,
571        }
572    }
573}
574
575#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
576pub enum MldVersion {
577    /// MLDv1.
578    V1,
579    /// MLDv2.
580    V2,
581    #[doc(hidden)]
582    __SourceBreaking { unknown_ordinal: u8 },
583}
584
585/// Pattern that matches an unknown `MldVersion` member.
586#[macro_export]
587macro_rules! MldVersionUnknown {
588    () => {
589        _
590    };
591}
592
593impl MldVersion {
594    #[inline]
595    pub fn from_primitive(prim: u8) -> Option<Self> {
596        match prim {
597            1 => Some(Self::V1),
598            2 => Some(Self::V2),
599            _ => None,
600        }
601    }
602
603    #[inline]
604    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
605        match prim {
606            1 => Self::V1,
607            2 => Self::V2,
608            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
609        }
610    }
611
612    #[inline]
613    pub fn unknown() -> Self {
614        Self::__SourceBreaking { unknown_ordinal: 0xff }
615    }
616
617    #[inline]
618    pub const fn into_primitive(self) -> u8 {
619        match self {
620            Self::V1 => 1,
621            Self::V2 => 2,
622            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
623        }
624    }
625
626    #[inline]
627    pub fn is_unknown(&self) -> bool {
628        match self {
629            Self::__SourceBreaking { unknown_ordinal: _ } => true,
630            _ => false,
631        }
632    }
633}
634
635#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
636pub struct AddressStateProviderOnAddressRemovedRequest {
637    pub error: AddressRemovalReason,
638}
639
640impl fidl::Persistable for AddressStateProviderOnAddressRemovedRequest {}
641
642#[derive(Clone, Debug, PartialEq)]
643pub struct AddressStateProviderUpdateAddressPropertiesRequest {
644    pub address_properties: AddressProperties,
645}
646
647impl fidl::Persistable for AddressStateProviderUpdateAddressPropertiesRequest {}
648
649#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
650pub struct AddressStateProviderWatchAddressAssignmentStateResponse {
651    pub assignment_state: fidl_fuchsia_net_interfaces_common::AddressAssignmentState,
652}
653
654impl fidl::Persistable for AddressStateProviderWatchAddressAssignmentStateResponse {}
655
656#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
657#[repr(C)]
658pub struct ControlGetIdResponse {
659    pub id: u64,
660}
661
662impl fidl::Persistable for ControlGetIdResponse {}
663
664#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
665pub struct ControlOnInterfaceRemovedRequest {
666    pub reason: InterfaceRemovedReason,
667}
668
669impl fidl::Persistable for ControlOnInterfaceRemovedRequest {}
670
671#[derive(Clone, Debug, PartialEq)]
672pub struct ControlRemoveAddressRequest {
673    pub address: fidl_fuchsia_net_common::Subnet,
674}
675
676impl fidl::Persistable for ControlRemoveAddressRequest {}
677
678#[derive(Clone, Debug, PartialEq)]
679pub struct ControlSetConfigurationRequest {
680    pub config: Configuration,
681}
682
683impl fidl::Persistable for ControlSetConfigurationRequest {}
684
685#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
686pub struct ControlDisableResponse {
687    pub did_disable: bool,
688}
689
690impl fidl::Persistable for ControlDisableResponse {}
691
692#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
693pub struct ControlEnableResponse {
694    pub did_enable: bool,
695}
696
697impl fidl::Persistable for ControlEnableResponse {}
698
699#[derive(Clone, Debug, PartialEq)]
700pub struct ControlGetConfigurationResponse {
701    pub config: Configuration,
702}
703
704impl fidl::Persistable for ControlGetConfigurationResponse {}
705
706#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
707pub struct ControlRemoveAddressResponse {
708    pub did_remove: bool,
709}
710
711impl fidl::Persistable for ControlRemoveAddressResponse {}
712
713#[derive(Clone, Debug, PartialEq)]
714pub struct ControlSetConfigurationResponse {
715    pub previous_config: Configuration,
716}
717
718impl fidl::Persistable for ControlSetConfigurationResponse {}
719
720#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
721pub struct Empty;
722
723impl fidl::Persistable for Empty {}
724
725/// Address assignment parameters.
726#[derive(Clone, Debug, Default, PartialEq)]
727pub struct AddressParameters {
728    /// The initial properties of the address.
729    ///
730    /// If not set, interpreted as an empty `AddressProperties`.
731    pub initial_properties: Option<AddressProperties>,
732    /// True if the address is temporary.
733    ///
734    /// A temporary address is intended to be used for a short period of time
735    /// (hours to days), and its lifetime may not be extended, as detailed in
736    /// [RFC 4941](https://tools.ietf.org/html/rfc4941).
737    ///
738    /// Both temporary and non-temporary addresses have preferred and valid
739    /// lifetimes, but temporary addresses may not be renewed beyond their
740    /// initial lifetime.
741    ///
742    /// Information used in source address selection; temporary addresses are
743    /// preferred over non-temporary addresses if both types are available, as
744    /// detailed in
745    /// [RFC 6724, section 5](https://tools.ietf.org/html/rfc6724#section-5).
746    ///
747    /// If not set, interpreted as false.
748    pub temporary: Option<bool>,
749    /// True if the subnet route corresponding to the address should be
750    /// installed, and removed once the address is removed.
751    ///
752    /// For example, if `Control#AddAddress` is called with 192.168.1.5/24, and
753    /// `add_subnet_route` is true, then a route with destination 192.168.1.0/24
754    /// will be installed through the interface the address is being added to.
755    /// If the address is removed for any reason, the route will also be
756    /// removed.
757    ///
758    /// The subnet route is always installed in the main table (see
759    /// https://fxbug.dev/42074223#c13 for more details). In the future, we
760    /// should allow the user of this API to specify where the route should be
761    /// installed and provide proof of access.
762    pub add_subnet_route: Option<bool>,
763    /// True if Duplicate Address Detection (DAD) should be performed.
764    ///
765    /// For IPv6, DAD is defined in RFC 4862, Section 5.4.
766    ///
767    /// For IPv4, Address Conflict Detection (ACD) is defined in RFC 5227. For
768    /// simplicity's sake, both specifications are refered to as DAD on this
769    /// API.
770    ///
771    /// If not set, interpreted as `true` for IPv6 addresses, and `false` for
772    /// IPv4 addresses.
773    ///
774    /// Note, the `fuchsia.net.interfaces.admin/Control` API allows setting
775    /// per-interface DAD configuration. DAD will only be performed for a given
776    /// address if its interface's configuration allows for it. Setting this
777    /// property to `true` will not override the interface's DAD configuration.
778    pub perform_dad: Option<bool>,
779    #[doc(hidden)]
780    pub __source_breaking: fidl::marker::SourceBreaking,
781}
782
783impl fidl::Persistable for AddressParameters {}
784
785/// Properties of an IP address.
786#[derive(Clone, Debug, Default, PartialEq)]
787pub struct AddressProperties {
788    /// Information about the preferred lifetime of the address.
789    ///
790    /// If not set, interpreted as
791    /// `PreferredLifetimeInfo.preferred_lifetime_end = zx.Time.INFINITE`.
792    pub preferred_lifetime_info: Option<fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo>,
793    /// The end of the valid lifetime of the address.
794    ///
795    /// The address should *not* be considered invalid if `zx.Time` is in the
796    /// past. `valid_lifetime_end` is exchanged as a means to inform the
797    /// deadline where invalidation is expected to happen.
798    ///
799    /// Refers to the valid lifetime of the address, as defined in
800    /// [RFC 4862, section 2](https://tools.ietf.org/html/rfc4862#section-2).
801    ///
802    /// Must be greater than 0. If `zx.Time.INFINITE`, the valid lifetime does
803    /// not expire.
804    ///
805    /// If not set, interpreted as `zx.Time.INFINITE`.
806    pub valid_lifetime_end: Option<i64>,
807    #[doc(hidden)]
808    pub __source_breaking: fidl::marker::SourceBreaking,
809}
810
811impl fidl::Persistable for AddressProperties {}
812
813#[derive(Clone, Debug, Default, PartialEq)]
814pub struct ArpConfiguration {
815    /// Neighbor Unreachabilty Detection over ARP configuration.
816    pub nud: Option<NudConfiguration>,
817    /// Duplicate Address Detection over ARP configuration.
818    ///
819    /// Note that for IPv4, "Duplicate Address Detection" refers to
820    /// Address Conflict Detection, as defined in RFC 5227.
821    pub dad: Option<DadConfiguration>,
822    #[doc(hidden)]
823    pub __source_breaking: fidl::marker::SourceBreaking,
824}
825
826impl fidl::Persistable for ArpConfiguration {}
827
828/// The configuration for an interface.
829#[derive(Clone, Debug, Default, PartialEq)]
830pub struct Configuration {
831    /// The IPv4 configuration for an interface.
832    pub ipv4: Option<Ipv4Configuration>,
833    /// The IPv6 configuration for an interface.
834    pub ipv6: Option<Ipv6Configuration>,
835    #[doc(hidden)]
836    pub __source_breaking: fidl::marker::SourceBreaking,
837}
838
839impl fidl::Persistable for Configuration {}
840
841/// DAD (Duplicate Address Detection) configuration for an interface.
842#[derive(Clone, Debug, Default, PartialEq)]
843pub struct DadConfiguration {
844    /// Number of transmissions before an address is considered available for
845    /// use.
846    ///
847    /// A value of zero effectively disables DAD for the interface.
848    pub transmits: Option<u16>,
849    #[doc(hidden)]
850    pub __source_breaking: fidl::marker::SourceBreaking,
851}
852
853impl fidl::Persistable for DadConfiguration {}
854
855#[derive(Clone, Debug, Default, PartialEq)]
856pub struct IgmpConfiguration {
857    /// Indicates the version of IGMP to be performed.
858    ///
859    /// Note that the stack may perform lower versioned IGMP as required
860    /// for backwards compatibility with other nodes on the network per
861    /// IGMP requirements.
862    pub version: Option<IgmpVersion>,
863    #[doc(hidden)]
864    pub __source_breaking: fidl::marker::SourceBreaking,
865}
866
867impl fidl::Persistable for IgmpConfiguration {}
868
869#[derive(Clone, Debug, Default, PartialEq)]
870pub struct Ipv4Configuration {
871    /// Controls whether or not IPv4 unicast packets may be forwarded if not
872    /// destined to the host.
873    pub unicast_forwarding: Option<bool>,
874    /// Controls whether or not IPv4 multicast packets may be forwarded.
875    pub multicast_forwarding: Option<bool>,
876    /// Controls IGMP configuration.
877    pub igmp: Option<IgmpConfiguration>,
878    /// Controls ARP configuration.
879    pub arp: Option<ArpConfiguration>,
880    /// Controls whether or not IPv4 is enabled on the interface.
881    ///
882    /// If set to false, IPv4 is disabled on the interface.
883    pub enabled: Option<bool>,
884    #[doc(hidden)]
885    pub __source_breaking: fidl::marker::SourceBreaking,
886}
887
888impl fidl::Persistable for Ipv4Configuration {}
889
890#[derive(Clone, Debug, Default, PartialEq)]
891pub struct Ipv6Configuration {
892    /// Controls whether or not IPv6 unicast packets may be forwarded if not
893    /// destined to the host.
894    pub unicast_forwarding: Option<bool>,
895    /// Controls whether or not IPv6 multicast packets may be forwarded.
896    pub multicast_forwarding: Option<bool>,
897    /// Controls MLD configuration.
898    pub mld: Option<MldConfiguration>,
899    /// Controls NDP configuration.
900    pub ndp: Option<NdpConfiguration>,
901    /// Controls whether or not IPv6 is enabled on the interface.
902    ///
903    /// If set to false, IPv6 is disabled on the interface.
904    pub enabled: Option<bool>,
905    #[doc(hidden)]
906    pub __source_breaking: fidl::marker::SourceBreaking,
907}
908
909impl fidl::Persistable for Ipv6Configuration {}
910
911#[derive(Clone, Debug, Default, PartialEq)]
912pub struct MldConfiguration {
913    /// Indicates the version of MLD to be performed.
914    ///
915    /// Note that the stack may perform lower versioned MLD as required
916    /// for backwards compatibility with other nodes on the network per
917    /// MLD requirements.
918    pub version: Option<MldVersion>,
919    #[doc(hidden)]
920    pub __source_breaking: fidl::marker::SourceBreaking,
921}
922
923impl fidl::Persistable for MldConfiguration {}
924
925#[derive(Clone, Debug, Default, PartialEq)]
926pub struct NdpConfiguration {
927    /// Neighbor Unreachabilty Detection over NDP configuration.
928    pub nud: Option<NudConfiguration>,
929    /// Duplicate Address Detection over NDP configuration.
930    pub dad: Option<DadConfiguration>,
931    /// SLAAC (Stateless Address Auto-configuration) configuration.
932    pub slaac: Option<SlaacConfiguration>,
933    /// Controls route discovery configuration.
934    pub route_discovery: Option<RouteDiscoveryConfiguration>,
935    /// Controls Router Solicitation configuration.
936    pub router_solicitations: Option<RouterSolicitationConfiguration>,
937    #[doc(hidden)]
938    pub __source_breaking: fidl::marker::SourceBreaking,
939}
940
941impl fidl::Persistable for NdpConfiguration {}
942
943/// NudConfiguration for an interface.
944///
945/// This is scoped to IPv4 or IPv6 configuration by the [`Configuration`] type.
946#[derive(Clone, Debug, Default, PartialEq)]
947pub struct NudConfiguration {
948    /// The number of multicast solicitations before considering a neighbor
949    /// unreachable.
950    ///
951    /// Must be nonzero. `ILLEGAL_ZERO_VALUE` is returned on
952    /// [`Control.SetConfiguration`] otherwise.
953    pub max_multicast_solicitations: Option<u16>,
954    /// The number of unicast solicitations before considering a neighbor
955    /// unreachable.
956    ///
957    /// Must be nonzero.
958    pub max_unicast_solicitations: Option<u16>,
959    /// A base duration for computing the random reachable time.
960    ///
961    /// Reachable time is the duration for which a neighbor is considered
962    /// reachable after a positive reachability confirmation is received.
963    /// After this time, an entry will transition from REACHABLE to STALE state.
964    ///
965    /// Referred to as "BaseReachableTime" by RFC 4861.
966    ///
967    /// Must be greater than 0.
968    pub base_reachable_time: Option<i64>,
969    /// The time between retransmissions of neighbor probes (Neighbor
970    /// Solicitations for IPv6 and ARP requests for IPv4) to a neighbor when
971    /// resolving the address or when probing the reachability of a neighbor
972    /// as defined in [RFC 4861 section 6.3.2].
973    ///
974    /// Referred to as "RetransTimer" by RFC 4861.
975    ///
976    /// For IPv6, this value will not be used if the router has provided an
977    /// override as per [RFC 4861 section 6.3.2]:
978    ///  The RetransTimer variable SHOULD be copied from the Retrans Timer
979    ///  field, if the received value is non-zero.
980    /// Usually networks don't advertise a non-zero RetransTimer, so this value
981    /// will be used in those environments.
982    ///
983    /// Must be greater than 0.
984    pub retrans_timer: Option<i64>,
985    #[doc(hidden)]
986    pub __source_breaking: fidl::marker::SourceBreaking,
987}
988
989impl fidl::Persistable for NudConfiguration {}
990
991#[derive(Clone, Debug, Default, PartialEq)]
992pub struct RouteDiscoveryConfiguration {
993    /// Whether the interface will add a default route for routes
994    /// learned via Router Advertisements as described in [RFC 4861].
995    ///
996    /// Note that setting this to false will not remove any existing
997    /// default routes learned via Router Advertisements. Those routes
998    /// will be removed when their lifetime expires.
999    ///
1000    /// [RFC 4861]: https://datatracker.ietf.org/doc/html/rfc4861
1001    pub allow_default_route: Option<bool>,
1002    #[doc(hidden)]
1003    pub __source_breaking: fidl::marker::SourceBreaking,
1004}
1005
1006impl fidl::Persistable for RouteDiscoveryConfiguration {}
1007
1008#[derive(Clone, Debug, Default, PartialEq)]
1009pub struct RouterSolicitationConfiguration {
1010    /// Controls the maximum number of Router Solicitations that
1011    /// will be sent, as described in [RFC 4861 Section 6.3.7].
1012    ///
1013    /// Setting this value to zero disables Router Solicitations.
1014    ///
1015    /// Note that setting this takes effect immediately. An
1016    /// interface that has already started sending router
1017    /// solicitations will see the limit change, and will stop or
1018    /// continue router solicitations, as appropriate.
1019    ///
1020    /// [RFC 4861 Section 6.3.7]: https://datatracker.ietf.org/doc/html/rfc4861#section-6.3.7
1021    pub max: Option<u8>,
1022    #[doc(hidden)]
1023    pub __source_breaking: fidl::marker::SourceBreaking,
1024}
1025
1026impl fidl::Persistable for RouterSolicitationConfiguration {}
1027
1028#[derive(Clone, Debug, Default, PartialEq)]
1029pub struct SlaacConfiguration {
1030    /// Controls whether temporary addresses as described in
1031    /// [RFC 4941] are generated.
1032    ///
1033    /// Note that assigned SLAAC temporary addresses will remain
1034    /// assigned when this configuration goes from enabled to
1035    /// disabled.
1036    ///
1037    /// [RFC 4941]: https://datatracker.ietf.org/doc/html/rfc4941
1038    pub temporary_address: Option<bool>,
1039    #[doc(hidden)]
1040    pub __source_breaking: fidl::marker::SourceBreaking,
1041}
1042
1043impl fidl::Persistable for SlaacConfiguration {}
1044
1045pub mod address_state_provider_ordinals {
1046    pub const UPDATE_ADDRESS_PROPERTIES: u64 = 0x52bdf5ed96ef573c;
1047    pub const WATCH_ADDRESS_ASSIGNMENT_STATE: u64 = 0x740bb58c1b2d3188;
1048    pub const DETACH: u64 = 0xc752381d739622f;
1049    pub const REMOVE: u64 = 0x554407fe183e78ad;
1050    pub const ON_ADDRESS_ADDED: u64 = 0x624f6ea62cce189e;
1051    pub const ON_ADDRESS_REMOVED: u64 = 0x2480eb672ffd5962;
1052}
1053
1054pub mod control_ordinals {
1055    pub const ADD_ADDRESS: u64 = 0x1349d36da453ce;
1056    pub const REMOVE_ADDRESS: u64 = 0x213ba73da997a620;
1057    pub const GET_ID: u64 = 0x2a2459768d9ecc6f;
1058    pub const SET_CONFIGURATION: u64 = 0x573923b7b4bde27f;
1059    pub const GET_CONFIGURATION: u64 = 0x5f5d239820bdcc65;
1060    pub const ENABLE: u64 = 0x15c983d3a8ac0b98;
1061    pub const DISABLE: u64 = 0x98d3a585d905473;
1062    pub const DETACH: u64 = 0x78ee27518b2dbfa;
1063    pub const GET_AUTHORIZATION_FOR_INTERFACE: u64 = 0xc1de2ab60b5cb9e;
1064    pub const REMOVE: u64 = 0x13aab8bbecc7ff0b;
1065    pub const ON_INTERFACE_REMOVED: u64 = 0x800d39e76c1cddd;
1066}
1067
1068pub mod device_control_ordinals {
1069    pub const CREATE_INTERFACE: u64 = 0x4ff8be7351d12f86;
1070    pub const DETACH: u64 = 0x57489f1554d489d2;
1071}
1072
1073pub mod installer_ordinals {
1074    pub const INSTALL_DEVICE: u64 = 0x3e84524dcecab23a;
1075    pub const INSTALL_BLACKHOLE_INTERFACE: u64 = 0x2ce57e87cdbcb809;
1076}
1077
1078mod internal {
1079    use super::*;
1080    unsafe impl fidl::encoding::TypeMarker for AddressRemovalReason {
1081        type Owned = Self;
1082
1083        #[inline(always)]
1084        fn inline_align(_context: fidl::encoding::Context) -> usize {
1085            std::mem::align_of::<u32>()
1086        }
1087
1088        #[inline(always)]
1089        fn inline_size(_context: fidl::encoding::Context) -> usize {
1090            std::mem::size_of::<u32>()
1091        }
1092
1093        #[inline(always)]
1094        fn encode_is_copy() -> bool {
1095            true
1096        }
1097
1098        #[inline(always)]
1099        fn decode_is_copy() -> bool {
1100            false
1101        }
1102    }
1103
1104    impl fidl::encoding::ValueTypeMarker for AddressRemovalReason {
1105        type Borrowed<'a> = Self;
1106        #[inline(always)]
1107        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1108            *value
1109        }
1110    }
1111
1112    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1113        for AddressRemovalReason
1114    {
1115        #[inline]
1116        unsafe fn encode(
1117            self,
1118            encoder: &mut fidl::encoding::Encoder<'_, D>,
1119            offset: usize,
1120            _depth: fidl::encoding::Depth,
1121        ) -> fidl::Result<()> {
1122            encoder.debug_check_bounds::<Self>(offset);
1123            encoder.write_num(self.into_primitive(), offset);
1124            Ok(())
1125        }
1126    }
1127
1128    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressRemovalReason {
1129        #[inline(always)]
1130        fn new_empty() -> Self {
1131            Self::Invalid
1132        }
1133
1134        #[inline]
1135        unsafe fn decode(
1136            &mut self,
1137            decoder: &mut fidl::encoding::Decoder<'_, D>,
1138            offset: usize,
1139            _depth: fidl::encoding::Depth,
1140        ) -> fidl::Result<()> {
1141            decoder.debug_check_bounds::<Self>(offset);
1142            let prim = decoder.read_num::<u32>(offset);
1143
1144            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1145            Ok(())
1146        }
1147    }
1148    unsafe impl fidl::encoding::TypeMarker for ControlDisableError {
1149        type Owned = Self;
1150
1151        #[inline(always)]
1152        fn inline_align(_context: fidl::encoding::Context) -> usize {
1153            std::mem::align_of::<u32>()
1154        }
1155
1156        #[inline(always)]
1157        fn inline_size(_context: fidl::encoding::Context) -> usize {
1158            std::mem::size_of::<u32>()
1159        }
1160
1161        #[inline(always)]
1162        fn encode_is_copy() -> bool {
1163            false
1164        }
1165
1166        #[inline(always)]
1167        fn decode_is_copy() -> bool {
1168            false
1169        }
1170    }
1171
1172    impl fidl::encoding::ValueTypeMarker for ControlDisableError {
1173        type Borrowed<'a> = Self;
1174        #[inline(always)]
1175        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1176            *value
1177        }
1178    }
1179
1180    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1181        for ControlDisableError
1182    {
1183        #[inline]
1184        unsafe fn encode(
1185            self,
1186            encoder: &mut fidl::encoding::Encoder<'_, D>,
1187            offset: usize,
1188            _depth: fidl::encoding::Depth,
1189        ) -> fidl::Result<()> {
1190            encoder.debug_check_bounds::<Self>(offset);
1191            encoder.write_num(self.into_primitive(), offset);
1192            Ok(())
1193        }
1194    }
1195
1196    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlDisableError {
1197        #[inline(always)]
1198        fn new_empty() -> Self {
1199            Self::unknown()
1200        }
1201
1202        #[inline]
1203        unsafe fn decode(
1204            &mut self,
1205            decoder: &mut fidl::encoding::Decoder<'_, D>,
1206            offset: usize,
1207            _depth: fidl::encoding::Depth,
1208        ) -> fidl::Result<()> {
1209            decoder.debug_check_bounds::<Self>(offset);
1210            let prim = decoder.read_num::<u32>(offset);
1211
1212            *self = Self::from_primitive_allow_unknown(prim);
1213            Ok(())
1214        }
1215    }
1216    unsafe impl fidl::encoding::TypeMarker for ControlEnableError {
1217        type Owned = Self;
1218
1219        #[inline(always)]
1220        fn inline_align(_context: fidl::encoding::Context) -> usize {
1221            std::mem::align_of::<u32>()
1222        }
1223
1224        #[inline(always)]
1225        fn inline_size(_context: fidl::encoding::Context) -> usize {
1226            std::mem::size_of::<u32>()
1227        }
1228
1229        #[inline(always)]
1230        fn encode_is_copy() -> bool {
1231            false
1232        }
1233
1234        #[inline(always)]
1235        fn decode_is_copy() -> bool {
1236            false
1237        }
1238    }
1239
1240    impl fidl::encoding::ValueTypeMarker for ControlEnableError {
1241        type Borrowed<'a> = Self;
1242        #[inline(always)]
1243        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1244            *value
1245        }
1246    }
1247
1248    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1249        for ControlEnableError
1250    {
1251        #[inline]
1252        unsafe fn encode(
1253            self,
1254            encoder: &mut fidl::encoding::Encoder<'_, D>,
1255            offset: usize,
1256            _depth: fidl::encoding::Depth,
1257        ) -> fidl::Result<()> {
1258            encoder.debug_check_bounds::<Self>(offset);
1259            encoder.write_num(self.into_primitive(), offset);
1260            Ok(())
1261        }
1262    }
1263
1264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlEnableError {
1265        #[inline(always)]
1266        fn new_empty() -> Self {
1267            Self::unknown()
1268        }
1269
1270        #[inline]
1271        unsafe fn decode(
1272            &mut self,
1273            decoder: &mut fidl::encoding::Decoder<'_, D>,
1274            offset: usize,
1275            _depth: fidl::encoding::Depth,
1276        ) -> fidl::Result<()> {
1277            decoder.debug_check_bounds::<Self>(offset);
1278            let prim = decoder.read_num::<u32>(offset);
1279
1280            *self = Self::from_primitive_allow_unknown(prim);
1281            Ok(())
1282        }
1283    }
1284    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationError {
1285        type Owned = Self;
1286
1287        #[inline(always)]
1288        fn inline_align(_context: fidl::encoding::Context) -> usize {
1289            std::mem::align_of::<u32>()
1290        }
1291
1292        #[inline(always)]
1293        fn inline_size(_context: fidl::encoding::Context) -> usize {
1294            std::mem::size_of::<u32>()
1295        }
1296
1297        #[inline(always)]
1298        fn encode_is_copy() -> bool {
1299            false
1300        }
1301
1302        #[inline(always)]
1303        fn decode_is_copy() -> bool {
1304            false
1305        }
1306    }
1307
1308    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationError {
1309        type Borrowed<'a> = Self;
1310        #[inline(always)]
1311        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1312            *value
1313        }
1314    }
1315
1316    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1317        for ControlGetConfigurationError
1318    {
1319        #[inline]
1320        unsafe fn encode(
1321            self,
1322            encoder: &mut fidl::encoding::Encoder<'_, D>,
1323            offset: usize,
1324            _depth: fidl::encoding::Depth,
1325        ) -> fidl::Result<()> {
1326            encoder.debug_check_bounds::<Self>(offset);
1327            encoder.write_num(self.into_primitive(), offset);
1328            Ok(())
1329        }
1330    }
1331
1332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1333        for ControlGetConfigurationError
1334    {
1335        #[inline(always)]
1336        fn new_empty() -> Self {
1337            Self::unknown()
1338        }
1339
1340        #[inline]
1341        unsafe fn decode(
1342            &mut self,
1343            decoder: &mut fidl::encoding::Decoder<'_, D>,
1344            offset: usize,
1345            _depth: fidl::encoding::Depth,
1346        ) -> fidl::Result<()> {
1347            decoder.debug_check_bounds::<Self>(offset);
1348            let prim = decoder.read_num::<u32>(offset);
1349
1350            *self = Self::from_primitive_allow_unknown(prim);
1351            Ok(())
1352        }
1353    }
1354    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressError {
1355        type Owned = Self;
1356
1357        #[inline(always)]
1358        fn inline_align(_context: fidl::encoding::Context) -> usize {
1359            std::mem::align_of::<u32>()
1360        }
1361
1362        #[inline(always)]
1363        fn inline_size(_context: fidl::encoding::Context) -> usize {
1364            std::mem::size_of::<u32>()
1365        }
1366
1367        #[inline(always)]
1368        fn encode_is_copy() -> bool {
1369            false
1370        }
1371
1372        #[inline(always)]
1373        fn decode_is_copy() -> bool {
1374            false
1375        }
1376    }
1377
1378    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressError {
1379        type Borrowed<'a> = Self;
1380        #[inline(always)]
1381        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1382            *value
1383        }
1384    }
1385
1386    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1387        for ControlRemoveAddressError
1388    {
1389        #[inline]
1390        unsafe fn encode(
1391            self,
1392            encoder: &mut fidl::encoding::Encoder<'_, D>,
1393            offset: usize,
1394            _depth: fidl::encoding::Depth,
1395        ) -> fidl::Result<()> {
1396            encoder.debug_check_bounds::<Self>(offset);
1397            encoder.write_num(self.into_primitive(), offset);
1398            Ok(())
1399        }
1400    }
1401
1402    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1403        for ControlRemoveAddressError
1404    {
1405        #[inline(always)]
1406        fn new_empty() -> Self {
1407            Self::unknown()
1408        }
1409
1410        #[inline]
1411        unsafe fn decode(
1412            &mut self,
1413            decoder: &mut fidl::encoding::Decoder<'_, D>,
1414            offset: usize,
1415            _depth: fidl::encoding::Depth,
1416        ) -> fidl::Result<()> {
1417            decoder.debug_check_bounds::<Self>(offset);
1418            let prim = decoder.read_num::<u32>(offset);
1419
1420            *self = Self::from_primitive_allow_unknown(prim);
1421            Ok(())
1422        }
1423    }
1424    unsafe impl fidl::encoding::TypeMarker for ControlRemoveError {
1425        type Owned = Self;
1426
1427        #[inline(always)]
1428        fn inline_align(_context: fidl::encoding::Context) -> usize {
1429            std::mem::align_of::<u32>()
1430        }
1431
1432        #[inline(always)]
1433        fn inline_size(_context: fidl::encoding::Context) -> usize {
1434            std::mem::size_of::<u32>()
1435        }
1436
1437        #[inline(always)]
1438        fn encode_is_copy() -> bool {
1439            false
1440        }
1441
1442        #[inline(always)]
1443        fn decode_is_copy() -> bool {
1444            false
1445        }
1446    }
1447
1448    impl fidl::encoding::ValueTypeMarker for ControlRemoveError {
1449        type Borrowed<'a> = Self;
1450        #[inline(always)]
1451        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1452            *value
1453        }
1454    }
1455
1456    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1457        for ControlRemoveError
1458    {
1459        #[inline]
1460        unsafe fn encode(
1461            self,
1462            encoder: &mut fidl::encoding::Encoder<'_, D>,
1463            offset: usize,
1464            _depth: fidl::encoding::Depth,
1465        ) -> fidl::Result<()> {
1466            encoder.debug_check_bounds::<Self>(offset);
1467            encoder.write_num(self.into_primitive(), offset);
1468            Ok(())
1469        }
1470    }
1471
1472    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlRemoveError {
1473        #[inline(always)]
1474        fn new_empty() -> Self {
1475            Self::unknown()
1476        }
1477
1478        #[inline]
1479        unsafe fn decode(
1480            &mut self,
1481            decoder: &mut fidl::encoding::Decoder<'_, D>,
1482            offset: usize,
1483            _depth: fidl::encoding::Depth,
1484        ) -> fidl::Result<()> {
1485            decoder.debug_check_bounds::<Self>(offset);
1486            let prim = decoder.read_num::<u32>(offset);
1487
1488            *self = Self::from_primitive_allow_unknown(prim);
1489            Ok(())
1490        }
1491    }
1492    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationError {
1493        type Owned = Self;
1494
1495        #[inline(always)]
1496        fn inline_align(_context: fidl::encoding::Context) -> usize {
1497            std::mem::align_of::<u32>()
1498        }
1499
1500        #[inline(always)]
1501        fn inline_size(_context: fidl::encoding::Context) -> usize {
1502            std::mem::size_of::<u32>()
1503        }
1504
1505        #[inline(always)]
1506        fn encode_is_copy() -> bool {
1507            false
1508        }
1509
1510        #[inline(always)]
1511        fn decode_is_copy() -> bool {
1512            false
1513        }
1514    }
1515
1516    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationError {
1517        type Borrowed<'a> = Self;
1518        #[inline(always)]
1519        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1520            *value
1521        }
1522    }
1523
1524    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1525        for ControlSetConfigurationError
1526    {
1527        #[inline]
1528        unsafe fn encode(
1529            self,
1530            encoder: &mut fidl::encoding::Encoder<'_, D>,
1531            offset: usize,
1532            _depth: fidl::encoding::Depth,
1533        ) -> fidl::Result<()> {
1534            encoder.debug_check_bounds::<Self>(offset);
1535            encoder.write_num(self.into_primitive(), offset);
1536            Ok(())
1537        }
1538    }
1539
1540    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1541        for ControlSetConfigurationError
1542    {
1543        #[inline(always)]
1544        fn new_empty() -> Self {
1545            Self::unknown()
1546        }
1547
1548        #[inline]
1549        unsafe fn decode(
1550            &mut self,
1551            decoder: &mut fidl::encoding::Decoder<'_, D>,
1552            offset: usize,
1553            _depth: fidl::encoding::Depth,
1554        ) -> fidl::Result<()> {
1555            decoder.debug_check_bounds::<Self>(offset);
1556            let prim = decoder.read_num::<u32>(offset);
1557
1558            *self = Self::from_primitive_allow_unknown(prim);
1559            Ok(())
1560        }
1561    }
1562    unsafe impl fidl::encoding::TypeMarker for IgmpVersion {
1563        type Owned = Self;
1564
1565        #[inline(always)]
1566        fn inline_align(_context: fidl::encoding::Context) -> usize {
1567            std::mem::align_of::<u8>()
1568        }
1569
1570        #[inline(always)]
1571        fn inline_size(_context: fidl::encoding::Context) -> usize {
1572            std::mem::size_of::<u8>()
1573        }
1574
1575        #[inline(always)]
1576        fn encode_is_copy() -> bool {
1577            false
1578        }
1579
1580        #[inline(always)]
1581        fn decode_is_copy() -> bool {
1582            false
1583        }
1584    }
1585
1586    impl fidl::encoding::ValueTypeMarker for IgmpVersion {
1587        type Borrowed<'a> = Self;
1588        #[inline(always)]
1589        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1590            *value
1591        }
1592    }
1593
1594    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for IgmpVersion {
1595        #[inline]
1596        unsafe fn encode(
1597            self,
1598            encoder: &mut fidl::encoding::Encoder<'_, D>,
1599            offset: usize,
1600            _depth: fidl::encoding::Depth,
1601        ) -> fidl::Result<()> {
1602            encoder.debug_check_bounds::<Self>(offset);
1603            encoder.write_num(self.into_primitive(), offset);
1604            Ok(())
1605        }
1606    }
1607
1608    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpVersion {
1609        #[inline(always)]
1610        fn new_empty() -> Self {
1611            Self::unknown()
1612        }
1613
1614        #[inline]
1615        unsafe fn decode(
1616            &mut self,
1617            decoder: &mut fidl::encoding::Decoder<'_, D>,
1618            offset: usize,
1619            _depth: fidl::encoding::Depth,
1620        ) -> fidl::Result<()> {
1621            decoder.debug_check_bounds::<Self>(offset);
1622            let prim = decoder.read_num::<u8>(offset);
1623
1624            *self = Self::from_primitive_allow_unknown(prim);
1625            Ok(())
1626        }
1627    }
1628    unsafe impl fidl::encoding::TypeMarker for InterfaceRemovedReason {
1629        type Owned = Self;
1630
1631        #[inline(always)]
1632        fn inline_align(_context: fidl::encoding::Context) -> usize {
1633            std::mem::align_of::<u32>()
1634        }
1635
1636        #[inline(always)]
1637        fn inline_size(_context: fidl::encoding::Context) -> usize {
1638            std::mem::size_of::<u32>()
1639        }
1640
1641        #[inline(always)]
1642        fn encode_is_copy() -> bool {
1643            false
1644        }
1645
1646        #[inline(always)]
1647        fn decode_is_copy() -> bool {
1648            false
1649        }
1650    }
1651
1652    impl fidl::encoding::ValueTypeMarker for InterfaceRemovedReason {
1653        type Borrowed<'a> = Self;
1654        #[inline(always)]
1655        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1656            *value
1657        }
1658    }
1659
1660    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1661        for InterfaceRemovedReason
1662    {
1663        #[inline]
1664        unsafe fn encode(
1665            self,
1666            encoder: &mut fidl::encoding::Encoder<'_, D>,
1667            offset: usize,
1668            _depth: fidl::encoding::Depth,
1669        ) -> fidl::Result<()> {
1670            encoder.debug_check_bounds::<Self>(offset);
1671            encoder.write_num(self.into_primitive(), offset);
1672            Ok(())
1673        }
1674    }
1675
1676    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1677        for InterfaceRemovedReason
1678    {
1679        #[inline(always)]
1680        fn new_empty() -> Self {
1681            Self::unknown()
1682        }
1683
1684        #[inline]
1685        unsafe fn decode(
1686            &mut self,
1687            decoder: &mut fidl::encoding::Decoder<'_, D>,
1688            offset: usize,
1689            _depth: fidl::encoding::Depth,
1690        ) -> fidl::Result<()> {
1691            decoder.debug_check_bounds::<Self>(offset);
1692            let prim = decoder.read_num::<u32>(offset);
1693
1694            *self = Self::from_primitive_allow_unknown(prim);
1695            Ok(())
1696        }
1697    }
1698    unsafe impl fidl::encoding::TypeMarker for MldVersion {
1699        type Owned = Self;
1700
1701        #[inline(always)]
1702        fn inline_align(_context: fidl::encoding::Context) -> usize {
1703            std::mem::align_of::<u8>()
1704        }
1705
1706        #[inline(always)]
1707        fn inline_size(_context: fidl::encoding::Context) -> usize {
1708            std::mem::size_of::<u8>()
1709        }
1710
1711        #[inline(always)]
1712        fn encode_is_copy() -> bool {
1713            false
1714        }
1715
1716        #[inline(always)]
1717        fn decode_is_copy() -> bool {
1718            false
1719        }
1720    }
1721
1722    impl fidl::encoding::ValueTypeMarker for MldVersion {
1723        type Borrowed<'a> = Self;
1724        #[inline(always)]
1725        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1726            *value
1727        }
1728    }
1729
1730    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for MldVersion {
1731        #[inline]
1732        unsafe fn encode(
1733            self,
1734            encoder: &mut fidl::encoding::Encoder<'_, D>,
1735            offset: usize,
1736            _depth: fidl::encoding::Depth,
1737        ) -> fidl::Result<()> {
1738            encoder.debug_check_bounds::<Self>(offset);
1739            encoder.write_num(self.into_primitive(), offset);
1740            Ok(())
1741        }
1742    }
1743
1744    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldVersion {
1745        #[inline(always)]
1746        fn new_empty() -> Self {
1747            Self::unknown()
1748        }
1749
1750        #[inline]
1751        unsafe fn decode(
1752            &mut self,
1753            decoder: &mut fidl::encoding::Decoder<'_, D>,
1754            offset: usize,
1755            _depth: fidl::encoding::Depth,
1756        ) -> fidl::Result<()> {
1757            decoder.debug_check_bounds::<Self>(offset);
1758            let prim = decoder.read_num::<u8>(offset);
1759
1760            *self = Self::from_primitive_allow_unknown(prim);
1761            Ok(())
1762        }
1763    }
1764
1765    impl fidl::encoding::ValueTypeMarker for AddressStateProviderOnAddressRemovedRequest {
1766        type Borrowed<'a> = &'a Self;
1767        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1768            value
1769        }
1770    }
1771
1772    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderOnAddressRemovedRequest {
1773        type Owned = Self;
1774
1775        #[inline(always)]
1776        fn inline_align(_context: fidl::encoding::Context) -> usize {
1777            4
1778        }
1779
1780        #[inline(always)]
1781        fn inline_size(_context: fidl::encoding::Context) -> usize {
1782            4
1783        }
1784    }
1785
1786    unsafe impl<D: fidl::encoding::ResourceDialect>
1787        fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D>
1788        for &AddressStateProviderOnAddressRemovedRequest
1789    {
1790        #[inline]
1791        unsafe fn encode(
1792            self,
1793            encoder: &mut fidl::encoding::Encoder<'_, D>,
1794            offset: usize,
1795            _depth: fidl::encoding::Depth,
1796        ) -> fidl::Result<()> {
1797            encoder.debug_check_bounds::<AddressStateProviderOnAddressRemovedRequest>(offset);
1798            // Delegate to tuple encoding.
1799            fidl::encoding::Encode::<AddressStateProviderOnAddressRemovedRequest, D>::encode(
1800                (<AddressRemovalReason as fidl::encoding::ValueTypeMarker>::borrow(&self.error),),
1801                encoder,
1802                offset,
1803                _depth,
1804            )
1805        }
1806    }
1807    unsafe impl<
1808        D: fidl::encoding::ResourceDialect,
1809        T0: fidl::encoding::Encode<AddressRemovalReason, D>,
1810    > fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D> for (T0,)
1811    {
1812        #[inline]
1813        unsafe fn encode(
1814            self,
1815            encoder: &mut fidl::encoding::Encoder<'_, D>,
1816            offset: usize,
1817            depth: fidl::encoding::Depth,
1818        ) -> fidl::Result<()> {
1819            encoder.debug_check_bounds::<AddressStateProviderOnAddressRemovedRequest>(offset);
1820            // Zero out padding regions. There's no need to apply masks
1821            // because the unmasked parts will be overwritten by fields.
1822            // Write the fields.
1823            self.0.encode(encoder, offset + 0, depth)?;
1824            Ok(())
1825        }
1826    }
1827
1828    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1829        for AddressStateProviderOnAddressRemovedRequest
1830    {
1831        #[inline(always)]
1832        fn new_empty() -> Self {
1833            Self { error: fidl::new_empty!(AddressRemovalReason, D) }
1834        }
1835
1836        #[inline]
1837        unsafe fn decode(
1838            &mut self,
1839            decoder: &mut fidl::encoding::Decoder<'_, D>,
1840            offset: usize,
1841            _depth: fidl::encoding::Depth,
1842        ) -> fidl::Result<()> {
1843            decoder.debug_check_bounds::<Self>(offset);
1844            // Verify that padding bytes are zero.
1845            fidl::decode!(AddressRemovalReason, D, &mut self.error, decoder, offset + 0, _depth)?;
1846            Ok(())
1847        }
1848    }
1849
1850    impl fidl::encoding::ValueTypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1851        type Borrowed<'a> = &'a Self;
1852        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1853            value
1854        }
1855    }
1856
1857    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1858        type Owned = Self;
1859
1860        #[inline(always)]
1861        fn inline_align(_context: fidl::encoding::Context) -> usize {
1862            8
1863        }
1864
1865        #[inline(always)]
1866        fn inline_size(_context: fidl::encoding::Context) -> usize {
1867            16
1868        }
1869    }
1870
1871    unsafe impl<D: fidl::encoding::ResourceDialect>
1872        fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D>
1873        for &AddressStateProviderUpdateAddressPropertiesRequest
1874    {
1875        #[inline]
1876        unsafe fn encode(
1877            self,
1878            encoder: &mut fidl::encoding::Encoder<'_, D>,
1879            offset: usize,
1880            _depth: fidl::encoding::Depth,
1881        ) -> fidl::Result<()> {
1882            encoder
1883                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1884            // Delegate to tuple encoding.
1885            fidl::encoding::Encode::<AddressStateProviderUpdateAddressPropertiesRequest, D>::encode(
1886                (<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow(
1887                    &self.address_properties,
1888                ),),
1889                encoder,
1890                offset,
1891                _depth,
1892            )
1893        }
1894    }
1895    unsafe impl<
1896        D: fidl::encoding::ResourceDialect,
1897        T0: fidl::encoding::Encode<AddressProperties, D>,
1898    > fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D> for (T0,)
1899    {
1900        #[inline]
1901        unsafe fn encode(
1902            self,
1903            encoder: &mut fidl::encoding::Encoder<'_, D>,
1904            offset: usize,
1905            depth: fidl::encoding::Depth,
1906        ) -> fidl::Result<()> {
1907            encoder
1908                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1909            // Zero out padding regions. There's no need to apply masks
1910            // because the unmasked parts will be overwritten by fields.
1911            // Write the fields.
1912            self.0.encode(encoder, offset + 0, depth)?;
1913            Ok(())
1914        }
1915    }
1916
1917    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1918        for AddressStateProviderUpdateAddressPropertiesRequest
1919    {
1920        #[inline(always)]
1921        fn new_empty() -> Self {
1922            Self { address_properties: fidl::new_empty!(AddressProperties, D) }
1923        }
1924
1925        #[inline]
1926        unsafe fn decode(
1927            &mut self,
1928            decoder: &mut fidl::encoding::Decoder<'_, D>,
1929            offset: usize,
1930            _depth: fidl::encoding::Depth,
1931        ) -> fidl::Result<()> {
1932            decoder.debug_check_bounds::<Self>(offset);
1933            // Verify that padding bytes are zero.
1934            fidl::decode!(
1935                AddressProperties,
1936                D,
1937                &mut self.address_properties,
1938                decoder,
1939                offset + 0,
1940                _depth
1941            )?;
1942            Ok(())
1943        }
1944    }
1945
1946    impl fidl::encoding::ValueTypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1947        type Borrowed<'a> = &'a Self;
1948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1949            value
1950        }
1951    }
1952
1953    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1954        type Owned = Self;
1955
1956        #[inline(always)]
1957        fn inline_align(_context: fidl::encoding::Context) -> usize {
1958            4
1959        }
1960
1961        #[inline(always)]
1962        fn inline_size(_context: fidl::encoding::Context) -> usize {
1963            4
1964        }
1965    }
1966
1967    unsafe impl<D: fidl::encoding::ResourceDialect>
1968        fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D>
1969        for &AddressStateProviderWatchAddressAssignmentStateResponse
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::<AddressStateProviderWatchAddressAssignmentStateResponse>(
1979                offset,
1980            );
1981            // Delegate to tuple encoding.
1982            fidl::encoding::Encode::<AddressStateProviderWatchAddressAssignmentStateResponse, D>::encode(
1983                (
1984                    <fidl_fuchsia_net_interfaces_common::AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow(&self.assignment_state),
1985                ),
1986                encoder, offset, _depth
1987            )
1988        }
1989    }
1990    unsafe impl<
1991        D: fidl::encoding::ResourceDialect,
1992        T0: fidl::encoding::Encode<fidl_fuchsia_net_interfaces_common::AddressAssignmentState, D>,
1993    > fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D> for (T0,)
1994    {
1995        #[inline]
1996        unsafe fn encode(
1997            self,
1998            encoder: &mut fidl::encoding::Encoder<'_, D>,
1999            offset: usize,
2000            depth: fidl::encoding::Depth,
2001        ) -> fidl::Result<()> {
2002            encoder.debug_check_bounds::<AddressStateProviderWatchAddressAssignmentStateResponse>(
2003                offset,
2004            );
2005            // Zero out padding regions. There's no need to apply masks
2006            // because the unmasked parts will be overwritten by fields.
2007            // Write the fields.
2008            self.0.encode(encoder, offset + 0, depth)?;
2009            Ok(())
2010        }
2011    }
2012
2013    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2014        for AddressStateProviderWatchAddressAssignmentStateResponse
2015    {
2016        #[inline(always)]
2017        fn new_empty() -> Self {
2018            Self {
2019                assignment_state: fidl::new_empty!(
2020                    fidl_fuchsia_net_interfaces_common::AddressAssignmentState,
2021                    D
2022                ),
2023            }
2024        }
2025
2026        #[inline]
2027        unsafe fn decode(
2028            &mut self,
2029            decoder: &mut fidl::encoding::Decoder<'_, D>,
2030            offset: usize,
2031            _depth: fidl::encoding::Depth,
2032        ) -> fidl::Result<()> {
2033            decoder.debug_check_bounds::<Self>(offset);
2034            // Verify that padding bytes are zero.
2035            fidl::decode!(
2036                fidl_fuchsia_net_interfaces_common::AddressAssignmentState,
2037                D,
2038                &mut self.assignment_state,
2039                decoder,
2040                offset + 0,
2041                _depth
2042            )?;
2043            Ok(())
2044        }
2045    }
2046
2047    impl fidl::encoding::ValueTypeMarker for ControlGetIdResponse {
2048        type Borrowed<'a> = &'a Self;
2049        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2050            value
2051        }
2052    }
2053
2054    unsafe impl fidl::encoding::TypeMarker for ControlGetIdResponse {
2055        type Owned = Self;
2056
2057        #[inline(always)]
2058        fn inline_align(_context: fidl::encoding::Context) -> usize {
2059            8
2060        }
2061
2062        #[inline(always)]
2063        fn inline_size(_context: fidl::encoding::Context) -> usize {
2064            8
2065        }
2066        #[inline(always)]
2067        fn encode_is_copy() -> bool {
2068            true
2069        }
2070
2071        #[inline(always)]
2072        fn decode_is_copy() -> bool {
2073            true
2074        }
2075    }
2076
2077    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlGetIdResponse, D>
2078        for &ControlGetIdResponse
2079    {
2080        #[inline]
2081        unsafe fn encode(
2082            self,
2083            encoder: &mut fidl::encoding::Encoder<'_, D>,
2084            offset: usize,
2085            _depth: fidl::encoding::Depth,
2086        ) -> fidl::Result<()> {
2087            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2088            unsafe {
2089                // Copy the object into the buffer.
2090                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2091                (buf_ptr as *mut ControlGetIdResponse)
2092                    .write_unaligned((self as *const ControlGetIdResponse).read());
2093                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2094                // done second because the memcpy will write garbage to these bytes.
2095            }
2096            Ok(())
2097        }
2098    }
2099    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2100        fidl::encoding::Encode<ControlGetIdResponse, D> for (T0,)
2101    {
2102        #[inline]
2103        unsafe fn encode(
2104            self,
2105            encoder: &mut fidl::encoding::Encoder<'_, D>,
2106            offset: usize,
2107            depth: fidl::encoding::Depth,
2108        ) -> fidl::Result<()> {
2109            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2110            // Zero out padding regions. There's no need to apply masks
2111            // because the unmasked parts will be overwritten by fields.
2112            // Write the fields.
2113            self.0.encode(encoder, offset + 0, depth)?;
2114            Ok(())
2115        }
2116    }
2117
2118    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlGetIdResponse {
2119        #[inline(always)]
2120        fn new_empty() -> Self {
2121            Self { id: fidl::new_empty!(u64, D) }
2122        }
2123
2124        #[inline]
2125        unsafe fn decode(
2126            &mut self,
2127            decoder: &mut fidl::encoding::Decoder<'_, D>,
2128            offset: usize,
2129            _depth: fidl::encoding::Depth,
2130        ) -> fidl::Result<()> {
2131            decoder.debug_check_bounds::<Self>(offset);
2132            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2133            // Verify that padding bytes are zero.
2134            // Copy from the buffer into the object.
2135            unsafe {
2136                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2137            }
2138            Ok(())
2139        }
2140    }
2141
2142    impl fidl::encoding::ValueTypeMarker for ControlOnInterfaceRemovedRequest {
2143        type Borrowed<'a> = &'a Self;
2144        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2145            value
2146        }
2147    }
2148
2149    unsafe impl fidl::encoding::TypeMarker for ControlOnInterfaceRemovedRequest {
2150        type Owned = Self;
2151
2152        #[inline(always)]
2153        fn inline_align(_context: fidl::encoding::Context) -> usize {
2154            4
2155        }
2156
2157        #[inline(always)]
2158        fn inline_size(_context: fidl::encoding::Context) -> usize {
2159            4
2160        }
2161    }
2162
2163    unsafe impl<D: fidl::encoding::ResourceDialect>
2164        fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D>
2165        for &ControlOnInterfaceRemovedRequest
2166    {
2167        #[inline]
2168        unsafe fn encode(
2169            self,
2170            encoder: &mut fidl::encoding::Encoder<'_, D>,
2171            offset: usize,
2172            _depth: fidl::encoding::Depth,
2173        ) -> fidl::Result<()> {
2174            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2175            // Delegate to tuple encoding.
2176            fidl::encoding::Encode::<ControlOnInterfaceRemovedRequest, D>::encode(
2177                (<InterfaceRemovedReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
2178                encoder,
2179                offset,
2180                _depth,
2181            )
2182        }
2183    }
2184    unsafe impl<
2185        D: fidl::encoding::ResourceDialect,
2186        T0: fidl::encoding::Encode<InterfaceRemovedReason, D>,
2187    > fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D> for (T0,)
2188    {
2189        #[inline]
2190        unsafe fn encode(
2191            self,
2192            encoder: &mut fidl::encoding::Encoder<'_, D>,
2193            offset: usize,
2194            depth: fidl::encoding::Depth,
2195        ) -> fidl::Result<()> {
2196            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2197            // Zero out padding regions. There's no need to apply masks
2198            // because the unmasked parts will be overwritten by fields.
2199            // Write the fields.
2200            self.0.encode(encoder, offset + 0, depth)?;
2201            Ok(())
2202        }
2203    }
2204
2205    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2206        for ControlOnInterfaceRemovedRequest
2207    {
2208        #[inline(always)]
2209        fn new_empty() -> Self {
2210            Self { reason: fidl::new_empty!(InterfaceRemovedReason, D) }
2211        }
2212
2213        #[inline]
2214        unsafe fn decode(
2215            &mut self,
2216            decoder: &mut fidl::encoding::Decoder<'_, D>,
2217            offset: usize,
2218            _depth: fidl::encoding::Depth,
2219        ) -> fidl::Result<()> {
2220            decoder.debug_check_bounds::<Self>(offset);
2221            // Verify that padding bytes are zero.
2222            fidl::decode!(
2223                InterfaceRemovedReason,
2224                D,
2225                &mut self.reason,
2226                decoder,
2227                offset + 0,
2228                _depth
2229            )?;
2230            Ok(())
2231        }
2232    }
2233
2234    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressRequest {
2235        type Borrowed<'a> = &'a Self;
2236        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2237            value
2238        }
2239    }
2240
2241    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressRequest {
2242        type Owned = Self;
2243
2244        #[inline(always)]
2245        fn inline_align(_context: fidl::encoding::Context) -> usize {
2246            8
2247        }
2248
2249        #[inline(always)]
2250        fn inline_size(_context: fidl::encoding::Context) -> usize {
2251            24
2252        }
2253    }
2254
2255    unsafe impl<D: fidl::encoding::ResourceDialect>
2256        fidl::encoding::Encode<ControlRemoveAddressRequest, D> for &ControlRemoveAddressRequest
2257    {
2258        #[inline]
2259        unsafe fn encode(
2260            self,
2261            encoder: &mut fidl::encoding::Encoder<'_, D>,
2262            offset: usize,
2263            _depth: fidl::encoding::Depth,
2264        ) -> fidl::Result<()> {
2265            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2266            // Delegate to tuple encoding.
2267            fidl::encoding::Encode::<ControlRemoveAddressRequest, D>::encode(
2268                (<fidl_fuchsia_net_common::Subnet as fidl::encoding::ValueTypeMarker>::borrow(
2269                    &self.address,
2270                ),),
2271                encoder,
2272                offset,
2273                _depth,
2274            )
2275        }
2276    }
2277    unsafe impl<
2278        D: fidl::encoding::ResourceDialect,
2279        T0: fidl::encoding::Encode<fidl_fuchsia_net_common::Subnet, D>,
2280    > fidl::encoding::Encode<ControlRemoveAddressRequest, D> for (T0,)
2281    {
2282        #[inline]
2283        unsafe fn encode(
2284            self,
2285            encoder: &mut fidl::encoding::Encoder<'_, D>,
2286            offset: usize,
2287            depth: fidl::encoding::Depth,
2288        ) -> fidl::Result<()> {
2289            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2290            // Zero out padding regions. There's no need to apply masks
2291            // because the unmasked parts will be overwritten by fields.
2292            // Write the fields.
2293            self.0.encode(encoder, offset + 0, depth)?;
2294            Ok(())
2295        }
2296    }
2297
2298    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2299        for ControlRemoveAddressRequest
2300    {
2301        #[inline(always)]
2302        fn new_empty() -> Self {
2303            Self { address: fidl::new_empty!(fidl_fuchsia_net_common::Subnet, D) }
2304        }
2305
2306        #[inline]
2307        unsafe fn decode(
2308            &mut self,
2309            decoder: &mut fidl::encoding::Decoder<'_, D>,
2310            offset: usize,
2311            _depth: fidl::encoding::Depth,
2312        ) -> fidl::Result<()> {
2313            decoder.debug_check_bounds::<Self>(offset);
2314            // Verify that padding bytes are zero.
2315            fidl::decode!(
2316                fidl_fuchsia_net_common::Subnet,
2317                D,
2318                &mut self.address,
2319                decoder,
2320                offset + 0,
2321                _depth
2322            )?;
2323            Ok(())
2324        }
2325    }
2326
2327    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationRequest {
2328        type Borrowed<'a> = &'a Self;
2329        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2330            value
2331        }
2332    }
2333
2334    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationRequest {
2335        type Owned = Self;
2336
2337        #[inline(always)]
2338        fn inline_align(_context: fidl::encoding::Context) -> usize {
2339            8
2340        }
2341
2342        #[inline(always)]
2343        fn inline_size(_context: fidl::encoding::Context) -> usize {
2344            16
2345        }
2346    }
2347
2348    unsafe impl<D: fidl::encoding::ResourceDialect>
2349        fidl::encoding::Encode<ControlSetConfigurationRequest, D>
2350        for &ControlSetConfigurationRequest
2351    {
2352        #[inline]
2353        unsafe fn encode(
2354            self,
2355            encoder: &mut fidl::encoding::Encoder<'_, D>,
2356            offset: usize,
2357            _depth: fidl::encoding::Depth,
2358        ) -> fidl::Result<()> {
2359            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2360            // Delegate to tuple encoding.
2361            fidl::encoding::Encode::<ControlSetConfigurationRequest, D>::encode(
2362                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2363                encoder,
2364                offset,
2365                _depth,
2366            )
2367        }
2368    }
2369    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2370        fidl::encoding::Encode<ControlSetConfigurationRequest, D> for (T0,)
2371    {
2372        #[inline]
2373        unsafe fn encode(
2374            self,
2375            encoder: &mut fidl::encoding::Encoder<'_, D>,
2376            offset: usize,
2377            depth: fidl::encoding::Depth,
2378        ) -> fidl::Result<()> {
2379            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2380            // Zero out padding regions. There's no need to apply masks
2381            // because the unmasked parts will be overwritten by fields.
2382            // Write the fields.
2383            self.0.encode(encoder, offset + 0, depth)?;
2384            Ok(())
2385        }
2386    }
2387
2388    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2389        for ControlSetConfigurationRequest
2390    {
2391        #[inline(always)]
2392        fn new_empty() -> Self {
2393            Self { config: fidl::new_empty!(Configuration, D) }
2394        }
2395
2396        #[inline]
2397        unsafe fn decode(
2398            &mut self,
2399            decoder: &mut fidl::encoding::Decoder<'_, D>,
2400            offset: usize,
2401            _depth: fidl::encoding::Depth,
2402        ) -> fidl::Result<()> {
2403            decoder.debug_check_bounds::<Self>(offset);
2404            // Verify that padding bytes are zero.
2405            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2406            Ok(())
2407        }
2408    }
2409
2410    impl fidl::encoding::ValueTypeMarker for ControlDisableResponse {
2411        type Borrowed<'a> = &'a Self;
2412        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2413            value
2414        }
2415    }
2416
2417    unsafe impl fidl::encoding::TypeMarker for ControlDisableResponse {
2418        type Owned = Self;
2419
2420        #[inline(always)]
2421        fn inline_align(_context: fidl::encoding::Context) -> usize {
2422            1
2423        }
2424
2425        #[inline(always)]
2426        fn inline_size(_context: fidl::encoding::Context) -> usize {
2427            1
2428        }
2429    }
2430
2431    unsafe impl<D: fidl::encoding::ResourceDialect>
2432        fidl::encoding::Encode<ControlDisableResponse, D> for &ControlDisableResponse
2433    {
2434        #[inline]
2435        unsafe fn encode(
2436            self,
2437            encoder: &mut fidl::encoding::Encoder<'_, D>,
2438            offset: usize,
2439            _depth: fidl::encoding::Depth,
2440        ) -> fidl::Result<()> {
2441            encoder.debug_check_bounds::<ControlDisableResponse>(offset);
2442            // Delegate to tuple encoding.
2443            fidl::encoding::Encode::<ControlDisableResponse, D>::encode(
2444                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_disable),),
2445                encoder,
2446                offset,
2447                _depth,
2448            )
2449        }
2450    }
2451    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2452        fidl::encoding::Encode<ControlDisableResponse, D> for (T0,)
2453    {
2454        #[inline]
2455        unsafe fn encode(
2456            self,
2457            encoder: &mut fidl::encoding::Encoder<'_, D>,
2458            offset: usize,
2459            depth: fidl::encoding::Depth,
2460        ) -> fidl::Result<()> {
2461            encoder.debug_check_bounds::<ControlDisableResponse>(offset);
2462            // Zero out padding regions. There's no need to apply masks
2463            // because the unmasked parts will be overwritten by fields.
2464            // Write the fields.
2465            self.0.encode(encoder, offset + 0, depth)?;
2466            Ok(())
2467        }
2468    }
2469
2470    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2471        for ControlDisableResponse
2472    {
2473        #[inline(always)]
2474        fn new_empty() -> Self {
2475            Self { did_disable: fidl::new_empty!(bool, D) }
2476        }
2477
2478        #[inline]
2479        unsafe fn decode(
2480            &mut self,
2481            decoder: &mut fidl::encoding::Decoder<'_, D>,
2482            offset: usize,
2483            _depth: fidl::encoding::Depth,
2484        ) -> fidl::Result<()> {
2485            decoder.debug_check_bounds::<Self>(offset);
2486            // Verify that padding bytes are zero.
2487            fidl::decode!(bool, D, &mut self.did_disable, decoder, offset + 0, _depth)?;
2488            Ok(())
2489        }
2490    }
2491
2492    impl fidl::encoding::ValueTypeMarker for ControlEnableResponse {
2493        type Borrowed<'a> = &'a Self;
2494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2495            value
2496        }
2497    }
2498
2499    unsafe impl fidl::encoding::TypeMarker for ControlEnableResponse {
2500        type Owned = Self;
2501
2502        #[inline(always)]
2503        fn inline_align(_context: fidl::encoding::Context) -> usize {
2504            1
2505        }
2506
2507        #[inline(always)]
2508        fn inline_size(_context: fidl::encoding::Context) -> usize {
2509            1
2510        }
2511    }
2512
2513    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlEnableResponse, D>
2514        for &ControlEnableResponse
2515    {
2516        #[inline]
2517        unsafe fn encode(
2518            self,
2519            encoder: &mut fidl::encoding::Encoder<'_, D>,
2520            offset: usize,
2521            _depth: fidl::encoding::Depth,
2522        ) -> fidl::Result<()> {
2523            encoder.debug_check_bounds::<ControlEnableResponse>(offset);
2524            // Delegate to tuple encoding.
2525            fidl::encoding::Encode::<ControlEnableResponse, D>::encode(
2526                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_enable),),
2527                encoder,
2528                offset,
2529                _depth,
2530            )
2531        }
2532    }
2533    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2534        fidl::encoding::Encode<ControlEnableResponse, D> for (T0,)
2535    {
2536        #[inline]
2537        unsafe fn encode(
2538            self,
2539            encoder: &mut fidl::encoding::Encoder<'_, D>,
2540            offset: usize,
2541            depth: fidl::encoding::Depth,
2542        ) -> fidl::Result<()> {
2543            encoder.debug_check_bounds::<ControlEnableResponse>(offset);
2544            // Zero out padding regions. There's no need to apply masks
2545            // because the unmasked parts will be overwritten by fields.
2546            // Write the fields.
2547            self.0.encode(encoder, offset + 0, depth)?;
2548            Ok(())
2549        }
2550    }
2551
2552    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlEnableResponse {
2553        #[inline(always)]
2554        fn new_empty() -> Self {
2555            Self { did_enable: fidl::new_empty!(bool, D) }
2556        }
2557
2558        #[inline]
2559        unsafe fn decode(
2560            &mut self,
2561            decoder: &mut fidl::encoding::Decoder<'_, D>,
2562            offset: usize,
2563            _depth: fidl::encoding::Depth,
2564        ) -> fidl::Result<()> {
2565            decoder.debug_check_bounds::<Self>(offset);
2566            // Verify that padding bytes are zero.
2567            fidl::decode!(bool, D, &mut self.did_enable, decoder, offset + 0, _depth)?;
2568            Ok(())
2569        }
2570    }
2571
2572    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationResponse {
2573        type Borrowed<'a> = &'a Self;
2574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2575            value
2576        }
2577    }
2578
2579    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationResponse {
2580        type Owned = Self;
2581
2582        #[inline(always)]
2583        fn inline_align(_context: fidl::encoding::Context) -> usize {
2584            8
2585        }
2586
2587        #[inline(always)]
2588        fn inline_size(_context: fidl::encoding::Context) -> usize {
2589            16
2590        }
2591    }
2592
2593    unsafe impl<D: fidl::encoding::ResourceDialect>
2594        fidl::encoding::Encode<ControlGetConfigurationResponse, D>
2595        for &ControlGetConfigurationResponse
2596    {
2597        #[inline]
2598        unsafe fn encode(
2599            self,
2600            encoder: &mut fidl::encoding::Encoder<'_, D>,
2601            offset: usize,
2602            _depth: fidl::encoding::Depth,
2603        ) -> fidl::Result<()> {
2604            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2605            // Delegate to tuple encoding.
2606            fidl::encoding::Encode::<ControlGetConfigurationResponse, D>::encode(
2607                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2608                encoder,
2609                offset,
2610                _depth,
2611            )
2612        }
2613    }
2614    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2615        fidl::encoding::Encode<ControlGetConfigurationResponse, D> for (T0,)
2616    {
2617        #[inline]
2618        unsafe fn encode(
2619            self,
2620            encoder: &mut fidl::encoding::Encoder<'_, D>,
2621            offset: usize,
2622            depth: fidl::encoding::Depth,
2623        ) -> fidl::Result<()> {
2624            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2625            // Zero out padding regions. There's no need to apply masks
2626            // because the unmasked parts will be overwritten by fields.
2627            // Write the fields.
2628            self.0.encode(encoder, offset + 0, depth)?;
2629            Ok(())
2630        }
2631    }
2632
2633    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2634        for ControlGetConfigurationResponse
2635    {
2636        #[inline(always)]
2637        fn new_empty() -> Self {
2638            Self { config: fidl::new_empty!(Configuration, D) }
2639        }
2640
2641        #[inline]
2642        unsafe fn decode(
2643            &mut self,
2644            decoder: &mut fidl::encoding::Decoder<'_, D>,
2645            offset: usize,
2646            _depth: fidl::encoding::Depth,
2647        ) -> fidl::Result<()> {
2648            decoder.debug_check_bounds::<Self>(offset);
2649            // Verify that padding bytes are zero.
2650            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2651            Ok(())
2652        }
2653    }
2654
2655    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressResponse {
2656        type Borrowed<'a> = &'a Self;
2657        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2658            value
2659        }
2660    }
2661
2662    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressResponse {
2663        type Owned = Self;
2664
2665        #[inline(always)]
2666        fn inline_align(_context: fidl::encoding::Context) -> usize {
2667            1
2668        }
2669
2670        #[inline(always)]
2671        fn inline_size(_context: fidl::encoding::Context) -> usize {
2672            1
2673        }
2674    }
2675
2676    unsafe impl<D: fidl::encoding::ResourceDialect>
2677        fidl::encoding::Encode<ControlRemoveAddressResponse, D> for &ControlRemoveAddressResponse
2678    {
2679        #[inline]
2680        unsafe fn encode(
2681            self,
2682            encoder: &mut fidl::encoding::Encoder<'_, D>,
2683            offset: usize,
2684            _depth: fidl::encoding::Depth,
2685        ) -> fidl::Result<()> {
2686            encoder.debug_check_bounds::<ControlRemoveAddressResponse>(offset);
2687            // Delegate to tuple encoding.
2688            fidl::encoding::Encode::<ControlRemoveAddressResponse, D>::encode(
2689                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_remove),),
2690                encoder,
2691                offset,
2692                _depth,
2693            )
2694        }
2695    }
2696    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2697        fidl::encoding::Encode<ControlRemoveAddressResponse, D> for (T0,)
2698    {
2699        #[inline]
2700        unsafe fn encode(
2701            self,
2702            encoder: &mut fidl::encoding::Encoder<'_, D>,
2703            offset: usize,
2704            depth: fidl::encoding::Depth,
2705        ) -> fidl::Result<()> {
2706            encoder.debug_check_bounds::<ControlRemoveAddressResponse>(offset);
2707            // Zero out padding regions. There's no need to apply masks
2708            // because the unmasked parts will be overwritten by fields.
2709            // Write the fields.
2710            self.0.encode(encoder, offset + 0, depth)?;
2711            Ok(())
2712        }
2713    }
2714
2715    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2716        for ControlRemoveAddressResponse
2717    {
2718        #[inline(always)]
2719        fn new_empty() -> Self {
2720            Self { did_remove: fidl::new_empty!(bool, D) }
2721        }
2722
2723        #[inline]
2724        unsafe fn decode(
2725            &mut self,
2726            decoder: &mut fidl::encoding::Decoder<'_, D>,
2727            offset: usize,
2728            _depth: fidl::encoding::Depth,
2729        ) -> fidl::Result<()> {
2730            decoder.debug_check_bounds::<Self>(offset);
2731            // Verify that padding bytes are zero.
2732            fidl::decode!(bool, D, &mut self.did_remove, decoder, offset + 0, _depth)?;
2733            Ok(())
2734        }
2735    }
2736
2737    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationResponse {
2738        type Borrowed<'a> = &'a Self;
2739        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2740            value
2741        }
2742    }
2743
2744    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationResponse {
2745        type Owned = Self;
2746
2747        #[inline(always)]
2748        fn inline_align(_context: fidl::encoding::Context) -> usize {
2749            8
2750        }
2751
2752        #[inline(always)]
2753        fn inline_size(_context: fidl::encoding::Context) -> usize {
2754            16
2755        }
2756    }
2757
2758    unsafe impl<D: fidl::encoding::ResourceDialect>
2759        fidl::encoding::Encode<ControlSetConfigurationResponse, D>
2760        for &ControlSetConfigurationResponse
2761    {
2762        #[inline]
2763        unsafe fn encode(
2764            self,
2765            encoder: &mut fidl::encoding::Encoder<'_, D>,
2766            offset: usize,
2767            _depth: fidl::encoding::Depth,
2768        ) -> fidl::Result<()> {
2769            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2770            // Delegate to tuple encoding.
2771            fidl::encoding::Encode::<ControlSetConfigurationResponse, D>::encode(
2772                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.previous_config),),
2773                encoder,
2774                offset,
2775                _depth,
2776            )
2777        }
2778    }
2779    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2780        fidl::encoding::Encode<ControlSetConfigurationResponse, D> for (T0,)
2781    {
2782        #[inline]
2783        unsafe fn encode(
2784            self,
2785            encoder: &mut fidl::encoding::Encoder<'_, D>,
2786            offset: usize,
2787            depth: fidl::encoding::Depth,
2788        ) -> fidl::Result<()> {
2789            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2790            // Zero out padding regions. There's no need to apply masks
2791            // because the unmasked parts will be overwritten by fields.
2792            // Write the fields.
2793            self.0.encode(encoder, offset + 0, depth)?;
2794            Ok(())
2795        }
2796    }
2797
2798    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2799        for ControlSetConfigurationResponse
2800    {
2801        #[inline(always)]
2802        fn new_empty() -> Self {
2803            Self { previous_config: fidl::new_empty!(Configuration, D) }
2804        }
2805
2806        #[inline]
2807        unsafe fn decode(
2808            &mut self,
2809            decoder: &mut fidl::encoding::Decoder<'_, D>,
2810            offset: usize,
2811            _depth: fidl::encoding::Depth,
2812        ) -> fidl::Result<()> {
2813            decoder.debug_check_bounds::<Self>(offset);
2814            // Verify that padding bytes are zero.
2815            fidl::decode!(
2816                Configuration,
2817                D,
2818                &mut self.previous_config,
2819                decoder,
2820                offset + 0,
2821                _depth
2822            )?;
2823            Ok(())
2824        }
2825    }
2826
2827    impl fidl::encoding::ValueTypeMarker for Empty {
2828        type Borrowed<'a> = &'a Self;
2829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2830            value
2831        }
2832    }
2833
2834    unsafe impl fidl::encoding::TypeMarker for Empty {
2835        type Owned = Self;
2836
2837        #[inline(always)]
2838        fn inline_align(_context: fidl::encoding::Context) -> usize {
2839            1
2840        }
2841
2842        #[inline(always)]
2843        fn inline_size(_context: fidl::encoding::Context) -> usize {
2844            1
2845        }
2846    }
2847
2848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
2849        #[inline]
2850        unsafe fn encode(
2851            self,
2852            encoder: &mut fidl::encoding::Encoder<'_, D>,
2853            offset: usize,
2854            _depth: fidl::encoding::Depth,
2855        ) -> fidl::Result<()> {
2856            encoder.debug_check_bounds::<Empty>(offset);
2857            encoder.write_num(0u8, offset);
2858            Ok(())
2859        }
2860    }
2861
2862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
2863        #[inline(always)]
2864        fn new_empty() -> Self {
2865            Self
2866        }
2867
2868        #[inline]
2869        unsafe fn decode(
2870            &mut self,
2871            decoder: &mut fidl::encoding::Decoder<'_, D>,
2872            offset: usize,
2873            _depth: fidl::encoding::Depth,
2874        ) -> fidl::Result<()> {
2875            decoder.debug_check_bounds::<Self>(offset);
2876            match decoder.read_num::<u8>(offset) {
2877                0 => Ok(()),
2878                _ => Err(fidl::Error::Invalid),
2879            }
2880        }
2881    }
2882
2883    impl AddressParameters {
2884        #[inline(always)]
2885        fn max_ordinal_present(&self) -> u64 {
2886            if let Some(_) = self.perform_dad {
2887                return 4;
2888            }
2889            if let Some(_) = self.add_subnet_route {
2890                return 3;
2891            }
2892            if let Some(_) = self.temporary {
2893                return 2;
2894            }
2895            if let Some(_) = self.initial_properties {
2896                return 1;
2897            }
2898            0
2899        }
2900    }
2901
2902    impl fidl::encoding::ValueTypeMarker for AddressParameters {
2903        type Borrowed<'a> = &'a Self;
2904        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2905            value
2906        }
2907    }
2908
2909    unsafe impl fidl::encoding::TypeMarker for AddressParameters {
2910        type Owned = Self;
2911
2912        #[inline(always)]
2913        fn inline_align(_context: fidl::encoding::Context) -> usize {
2914            8
2915        }
2916
2917        #[inline(always)]
2918        fn inline_size(_context: fidl::encoding::Context) -> usize {
2919            16
2920        }
2921    }
2922
2923    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressParameters, D>
2924        for &AddressParameters
2925    {
2926        unsafe fn encode(
2927            self,
2928            encoder: &mut fidl::encoding::Encoder<'_, D>,
2929            offset: usize,
2930            mut depth: fidl::encoding::Depth,
2931        ) -> fidl::Result<()> {
2932            encoder.debug_check_bounds::<AddressParameters>(offset);
2933            // Vector header
2934            let max_ordinal: u64 = self.max_ordinal_present();
2935            encoder.write_num(max_ordinal, offset);
2936            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2937            // Calling encoder.out_of_line_offset(0) is not allowed.
2938            if max_ordinal == 0 {
2939                return Ok(());
2940            }
2941            depth.increment()?;
2942            let envelope_size = 8;
2943            let bytes_len = max_ordinal as usize * envelope_size;
2944            #[allow(unused_variables)]
2945            let offset = encoder.out_of_line_offset(bytes_len);
2946            let mut _prev_end_offset: usize = 0;
2947            if 1 > max_ordinal {
2948                return Ok(());
2949            }
2950
2951            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2952            // are envelope_size bytes.
2953            let cur_offset: usize = (1 - 1) * envelope_size;
2954
2955            // Zero reserved fields.
2956            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2957
2958            // Safety:
2959            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2960            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2961            //   envelope_size bytes, there is always sufficient room.
2962            fidl::encoding::encode_in_envelope_optional::<AddressProperties, D>(
2963                self.initial_properties
2964                    .as_ref()
2965                    .map(<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow),
2966                encoder,
2967                offset + cur_offset,
2968                depth,
2969            )?;
2970
2971            _prev_end_offset = cur_offset + envelope_size;
2972            if 2 > max_ordinal {
2973                return Ok(());
2974            }
2975
2976            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2977            // are envelope_size bytes.
2978            let cur_offset: usize = (2 - 1) * envelope_size;
2979
2980            // Zero reserved fields.
2981            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2982
2983            // Safety:
2984            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2985            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2986            //   envelope_size bytes, there is always sufficient room.
2987            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2988                self.temporary.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2989                encoder,
2990                offset + cur_offset,
2991                depth,
2992            )?;
2993
2994            _prev_end_offset = cur_offset + envelope_size;
2995            if 3 > max_ordinal {
2996                return Ok(());
2997            }
2998
2999            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3000            // are envelope_size bytes.
3001            let cur_offset: usize = (3 - 1) * envelope_size;
3002
3003            // Zero reserved fields.
3004            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3005
3006            // Safety:
3007            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3008            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3009            //   envelope_size bytes, there is always sufficient room.
3010            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3011                self.add_subnet_route
3012                    .as_ref()
3013                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3014                encoder,
3015                offset + cur_offset,
3016                depth,
3017            )?;
3018
3019            _prev_end_offset = cur_offset + envelope_size;
3020            if 4 > max_ordinal {
3021                return Ok(());
3022            }
3023
3024            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3025            // are envelope_size bytes.
3026            let cur_offset: usize = (4 - 1) * envelope_size;
3027
3028            // Zero reserved fields.
3029            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3030
3031            // Safety:
3032            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3033            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3034            //   envelope_size bytes, there is always sufficient room.
3035            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3036                self.perform_dad.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3037                encoder,
3038                offset + cur_offset,
3039                depth,
3040            )?;
3041
3042            _prev_end_offset = cur_offset + envelope_size;
3043
3044            Ok(())
3045        }
3046    }
3047
3048    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressParameters {
3049        #[inline(always)]
3050        fn new_empty() -> Self {
3051            Self::default()
3052        }
3053
3054        unsafe fn decode(
3055            &mut self,
3056            decoder: &mut fidl::encoding::Decoder<'_, D>,
3057            offset: usize,
3058            mut depth: fidl::encoding::Depth,
3059        ) -> fidl::Result<()> {
3060            decoder.debug_check_bounds::<Self>(offset);
3061            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3062                None => return Err(fidl::Error::NotNullable),
3063                Some(len) => len,
3064            };
3065            // Calling decoder.out_of_line_offset(0) is not allowed.
3066            if len == 0 {
3067                return Ok(());
3068            };
3069            depth.increment()?;
3070            let envelope_size = 8;
3071            let bytes_len = len * envelope_size;
3072            let offset = decoder.out_of_line_offset(bytes_len)?;
3073            // Decode the envelope for each type.
3074            let mut _next_ordinal_to_read = 0;
3075            let mut next_offset = offset;
3076            let end_offset = offset + bytes_len;
3077            _next_ordinal_to_read += 1;
3078            if next_offset >= end_offset {
3079                return Ok(());
3080            }
3081
3082            // Decode unknown envelopes for gaps in ordinals.
3083            while _next_ordinal_to_read < 1 {
3084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3085                _next_ordinal_to_read += 1;
3086                next_offset += envelope_size;
3087            }
3088
3089            let next_out_of_line = decoder.next_out_of_line();
3090            let handles_before = decoder.remaining_handles();
3091            if let Some((inlined, num_bytes, num_handles)) =
3092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3093            {
3094                let member_inline_size =
3095                    <AddressProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3096                if inlined != (member_inline_size <= 4) {
3097                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3098                }
3099                let inner_offset;
3100                let mut inner_depth = depth.clone();
3101                if inlined {
3102                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3103                    inner_offset = next_offset;
3104                } else {
3105                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3106                    inner_depth.increment()?;
3107                }
3108                let val_ref = self
3109                    .initial_properties
3110                    .get_or_insert_with(|| fidl::new_empty!(AddressProperties, D));
3111                fidl::decode!(AddressProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
3112                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3113                {
3114                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3115                }
3116                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3117                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3118                }
3119            }
3120
3121            next_offset += envelope_size;
3122            _next_ordinal_to_read += 1;
3123            if next_offset >= end_offset {
3124                return Ok(());
3125            }
3126
3127            // Decode unknown envelopes for gaps in ordinals.
3128            while _next_ordinal_to_read < 2 {
3129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3130                _next_ordinal_to_read += 1;
3131                next_offset += envelope_size;
3132            }
3133
3134            let next_out_of_line = decoder.next_out_of_line();
3135            let handles_before = decoder.remaining_handles();
3136            if let Some((inlined, num_bytes, num_handles)) =
3137                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3138            {
3139                let member_inline_size =
3140                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3141                if inlined != (member_inline_size <= 4) {
3142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3143                }
3144                let inner_offset;
3145                let mut inner_depth = depth.clone();
3146                if inlined {
3147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3148                    inner_offset = next_offset;
3149                } else {
3150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3151                    inner_depth.increment()?;
3152                }
3153                let val_ref = self.temporary.get_or_insert_with(|| fidl::new_empty!(bool, D));
3154                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3155                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3156                {
3157                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3158                }
3159                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3160                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3161                }
3162            }
3163
3164            next_offset += envelope_size;
3165            _next_ordinal_to_read += 1;
3166            if next_offset >= end_offset {
3167                return Ok(());
3168            }
3169
3170            // Decode unknown envelopes for gaps in ordinals.
3171            while _next_ordinal_to_read < 3 {
3172                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3173                _next_ordinal_to_read += 1;
3174                next_offset += envelope_size;
3175            }
3176
3177            let next_out_of_line = decoder.next_out_of_line();
3178            let handles_before = decoder.remaining_handles();
3179            if let Some((inlined, num_bytes, num_handles)) =
3180                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3181            {
3182                let member_inline_size =
3183                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3184                if inlined != (member_inline_size <= 4) {
3185                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3186                }
3187                let inner_offset;
3188                let mut inner_depth = depth.clone();
3189                if inlined {
3190                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3191                    inner_offset = next_offset;
3192                } else {
3193                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3194                    inner_depth.increment()?;
3195                }
3196                let val_ref =
3197                    self.add_subnet_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
3198                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3199                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3200                {
3201                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3202                }
3203                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3204                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3205                }
3206            }
3207
3208            next_offset += envelope_size;
3209            _next_ordinal_to_read += 1;
3210            if next_offset >= end_offset {
3211                return Ok(());
3212            }
3213
3214            // Decode unknown envelopes for gaps in ordinals.
3215            while _next_ordinal_to_read < 4 {
3216                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3217                _next_ordinal_to_read += 1;
3218                next_offset += envelope_size;
3219            }
3220
3221            let next_out_of_line = decoder.next_out_of_line();
3222            let handles_before = decoder.remaining_handles();
3223            if let Some((inlined, num_bytes, num_handles)) =
3224                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3225            {
3226                let member_inline_size =
3227                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3228                if inlined != (member_inline_size <= 4) {
3229                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3230                }
3231                let inner_offset;
3232                let mut inner_depth = depth.clone();
3233                if inlined {
3234                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3235                    inner_offset = next_offset;
3236                } else {
3237                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3238                    inner_depth.increment()?;
3239                }
3240                let val_ref = self.perform_dad.get_or_insert_with(|| fidl::new_empty!(bool, D));
3241                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3242                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3243                {
3244                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3245                }
3246                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3247                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3248                }
3249            }
3250
3251            next_offset += envelope_size;
3252
3253            // Decode the remaining unknown envelopes.
3254            while next_offset < end_offset {
3255                _next_ordinal_to_read += 1;
3256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3257                next_offset += envelope_size;
3258            }
3259
3260            Ok(())
3261        }
3262    }
3263
3264    impl AddressProperties {
3265        #[inline(always)]
3266        fn max_ordinal_present(&self) -> u64 {
3267            if let Some(_) = self.valid_lifetime_end {
3268                return 2;
3269            }
3270            if let Some(_) = self.preferred_lifetime_info {
3271                return 1;
3272            }
3273            0
3274        }
3275    }
3276
3277    impl fidl::encoding::ValueTypeMarker for AddressProperties {
3278        type Borrowed<'a> = &'a Self;
3279        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3280            value
3281        }
3282    }
3283
3284    unsafe impl fidl::encoding::TypeMarker for AddressProperties {
3285        type Owned = Self;
3286
3287        #[inline(always)]
3288        fn inline_align(_context: fidl::encoding::Context) -> usize {
3289            8
3290        }
3291
3292        #[inline(always)]
3293        fn inline_size(_context: fidl::encoding::Context) -> usize {
3294            16
3295        }
3296    }
3297
3298    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressProperties, D>
3299        for &AddressProperties
3300    {
3301        unsafe fn encode(
3302            self,
3303            encoder: &mut fidl::encoding::Encoder<'_, D>,
3304            offset: usize,
3305            mut depth: fidl::encoding::Depth,
3306        ) -> fidl::Result<()> {
3307            encoder.debug_check_bounds::<AddressProperties>(offset);
3308            // Vector header
3309            let max_ordinal: u64 = self.max_ordinal_present();
3310            encoder.write_num(max_ordinal, offset);
3311            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3312            // Calling encoder.out_of_line_offset(0) is not allowed.
3313            if max_ordinal == 0 {
3314                return Ok(());
3315            }
3316            depth.increment()?;
3317            let envelope_size = 8;
3318            let bytes_len = max_ordinal as usize * envelope_size;
3319            #[allow(unused_variables)]
3320            let offset = encoder.out_of_line_offset(bytes_len);
3321            let mut _prev_end_offset: usize = 0;
3322            if 1 > max_ordinal {
3323                return Ok(());
3324            }
3325
3326            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3327            // are envelope_size bytes.
3328            let cur_offset: usize = (1 - 1) * envelope_size;
3329
3330            // Zero reserved fields.
3331            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3332
3333            // Safety:
3334            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3335            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3336            //   envelope_size bytes, there is always sufficient room.
3337            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo, D>(
3338            self.preferred_lifetime_info.as_ref().map(<fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
3339            encoder, offset + cur_offset, depth
3340        )?;
3341
3342            _prev_end_offset = cur_offset + envelope_size;
3343            if 2 > max_ordinal {
3344                return Ok(());
3345            }
3346
3347            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3348            // are envelope_size bytes.
3349            let cur_offset: usize = (2 - 1) * envelope_size;
3350
3351            // Zero reserved fields.
3352            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3353
3354            // Safety:
3355            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3356            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3357            //   envelope_size bytes, there is always sufficient room.
3358            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3359                self.valid_lifetime_end
3360                    .as_ref()
3361                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3362                encoder,
3363                offset + cur_offset,
3364                depth,
3365            )?;
3366
3367            _prev_end_offset = cur_offset + envelope_size;
3368
3369            Ok(())
3370        }
3371    }
3372
3373    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressProperties {
3374        #[inline(always)]
3375        fn new_empty() -> Self {
3376            Self::default()
3377        }
3378
3379        unsafe fn decode(
3380            &mut self,
3381            decoder: &mut fidl::encoding::Decoder<'_, D>,
3382            offset: usize,
3383            mut depth: fidl::encoding::Depth,
3384        ) -> fidl::Result<()> {
3385            decoder.debug_check_bounds::<Self>(offset);
3386            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3387                None => return Err(fidl::Error::NotNullable),
3388                Some(len) => len,
3389            };
3390            // Calling decoder.out_of_line_offset(0) is not allowed.
3391            if len == 0 {
3392                return Ok(());
3393            };
3394            depth.increment()?;
3395            let envelope_size = 8;
3396            let bytes_len = len * envelope_size;
3397            let offset = decoder.out_of_line_offset(bytes_len)?;
3398            // Decode the envelope for each type.
3399            let mut _next_ordinal_to_read = 0;
3400            let mut next_offset = offset;
3401            let end_offset = offset + bytes_len;
3402            _next_ordinal_to_read += 1;
3403            if next_offset >= end_offset {
3404                return Ok(());
3405            }
3406
3407            // Decode unknown envelopes for gaps in ordinals.
3408            while _next_ordinal_to_read < 1 {
3409                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3410                _next_ordinal_to_read += 1;
3411                next_offset += envelope_size;
3412            }
3413
3414            let next_out_of_line = decoder.next_out_of_line();
3415            let handles_before = decoder.remaining_handles();
3416            if let Some((inlined, num_bytes, num_handles)) =
3417                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3418            {
3419                let member_inline_size = <fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3420                if inlined != (member_inline_size <= 4) {
3421                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3422                }
3423                let inner_offset;
3424                let mut inner_depth = depth.clone();
3425                if inlined {
3426                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3427                    inner_offset = next_offset;
3428                } else {
3429                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3430                    inner_depth.increment()?;
3431                }
3432                let val_ref = self.preferred_lifetime_info.get_or_insert_with(|| {
3433                    fidl::new_empty!(fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo, D)
3434                });
3435                fidl::decode!(
3436                    fidl_fuchsia_net_interfaces_common::PreferredLifetimeInfo,
3437                    D,
3438                    val_ref,
3439                    decoder,
3440                    inner_offset,
3441                    inner_depth
3442                )?;
3443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3444                {
3445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3446                }
3447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3449                }
3450            }
3451
3452            next_offset += envelope_size;
3453            _next_ordinal_to_read += 1;
3454            if next_offset >= end_offset {
3455                return Ok(());
3456            }
3457
3458            // Decode unknown envelopes for gaps in ordinals.
3459            while _next_ordinal_to_read < 2 {
3460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3461                _next_ordinal_to_read += 1;
3462                next_offset += envelope_size;
3463            }
3464
3465            let next_out_of_line = decoder.next_out_of_line();
3466            let handles_before = decoder.remaining_handles();
3467            if let Some((inlined, num_bytes, num_handles)) =
3468                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3469            {
3470                let member_inline_size =
3471                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3472                if inlined != (member_inline_size <= 4) {
3473                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3474                }
3475                let inner_offset;
3476                let mut inner_depth = depth.clone();
3477                if inlined {
3478                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3479                    inner_offset = next_offset;
3480                } else {
3481                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3482                    inner_depth.increment()?;
3483                }
3484                let val_ref =
3485                    self.valid_lifetime_end.get_or_insert_with(|| fidl::new_empty!(i64, D));
3486                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3487                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3488                {
3489                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3490                }
3491                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3492                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3493                }
3494            }
3495
3496            next_offset += envelope_size;
3497
3498            // Decode the remaining unknown envelopes.
3499            while next_offset < end_offset {
3500                _next_ordinal_to_read += 1;
3501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3502                next_offset += envelope_size;
3503            }
3504
3505            Ok(())
3506        }
3507    }
3508
3509    impl ArpConfiguration {
3510        #[inline(always)]
3511        fn max_ordinal_present(&self) -> u64 {
3512            if let Some(_) = self.dad {
3513                return 2;
3514            }
3515            if let Some(_) = self.nud {
3516                return 1;
3517            }
3518            0
3519        }
3520    }
3521
3522    impl fidl::encoding::ValueTypeMarker for ArpConfiguration {
3523        type Borrowed<'a> = &'a Self;
3524        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3525            value
3526        }
3527    }
3528
3529    unsafe impl fidl::encoding::TypeMarker for ArpConfiguration {
3530        type Owned = Self;
3531
3532        #[inline(always)]
3533        fn inline_align(_context: fidl::encoding::Context) -> usize {
3534            8
3535        }
3536
3537        #[inline(always)]
3538        fn inline_size(_context: fidl::encoding::Context) -> usize {
3539            16
3540        }
3541    }
3542
3543    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ArpConfiguration, D>
3544        for &ArpConfiguration
3545    {
3546        unsafe fn encode(
3547            self,
3548            encoder: &mut fidl::encoding::Encoder<'_, D>,
3549            offset: usize,
3550            mut depth: fidl::encoding::Depth,
3551        ) -> fidl::Result<()> {
3552            encoder.debug_check_bounds::<ArpConfiguration>(offset);
3553            // Vector header
3554            let max_ordinal: u64 = self.max_ordinal_present();
3555            encoder.write_num(max_ordinal, offset);
3556            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3557            // Calling encoder.out_of_line_offset(0) is not allowed.
3558            if max_ordinal == 0 {
3559                return Ok(());
3560            }
3561            depth.increment()?;
3562            let envelope_size = 8;
3563            let bytes_len = max_ordinal as usize * envelope_size;
3564            #[allow(unused_variables)]
3565            let offset = encoder.out_of_line_offset(bytes_len);
3566            let mut _prev_end_offset: usize = 0;
3567            if 1 > max_ordinal {
3568                return Ok(());
3569            }
3570
3571            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3572            // are envelope_size bytes.
3573            let cur_offset: usize = (1 - 1) * envelope_size;
3574
3575            // Zero reserved fields.
3576            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3577
3578            // Safety:
3579            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3580            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3581            //   envelope_size bytes, there is always sufficient room.
3582            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
3583                self.nud
3584                    .as_ref()
3585                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3586                encoder,
3587                offset + cur_offset,
3588                depth,
3589            )?;
3590
3591            _prev_end_offset = cur_offset + envelope_size;
3592            if 2 > max_ordinal {
3593                return Ok(());
3594            }
3595
3596            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3597            // are envelope_size bytes.
3598            let cur_offset: usize = (2 - 1) * envelope_size;
3599
3600            // Zero reserved fields.
3601            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3602
3603            // Safety:
3604            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3605            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3606            //   envelope_size bytes, there is always sufficient room.
3607            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
3608                self.dad
3609                    .as_ref()
3610                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3611                encoder,
3612                offset + cur_offset,
3613                depth,
3614            )?;
3615
3616            _prev_end_offset = cur_offset + envelope_size;
3617
3618            Ok(())
3619        }
3620    }
3621
3622    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ArpConfiguration {
3623        #[inline(always)]
3624        fn new_empty() -> Self {
3625            Self::default()
3626        }
3627
3628        unsafe fn decode(
3629            &mut self,
3630            decoder: &mut fidl::encoding::Decoder<'_, D>,
3631            offset: usize,
3632            mut depth: fidl::encoding::Depth,
3633        ) -> fidl::Result<()> {
3634            decoder.debug_check_bounds::<Self>(offset);
3635            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3636                None => return Err(fidl::Error::NotNullable),
3637                Some(len) => len,
3638            };
3639            // Calling decoder.out_of_line_offset(0) is not allowed.
3640            if len == 0 {
3641                return Ok(());
3642            };
3643            depth.increment()?;
3644            let envelope_size = 8;
3645            let bytes_len = len * envelope_size;
3646            let offset = decoder.out_of_line_offset(bytes_len)?;
3647            // Decode the envelope for each type.
3648            let mut _next_ordinal_to_read = 0;
3649            let mut next_offset = offset;
3650            let end_offset = offset + bytes_len;
3651            _next_ordinal_to_read += 1;
3652            if next_offset >= end_offset {
3653                return Ok(());
3654            }
3655
3656            // Decode unknown envelopes for gaps in ordinals.
3657            while _next_ordinal_to_read < 1 {
3658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3659                _next_ordinal_to_read += 1;
3660                next_offset += envelope_size;
3661            }
3662
3663            let next_out_of_line = decoder.next_out_of_line();
3664            let handles_before = decoder.remaining_handles();
3665            if let Some((inlined, num_bytes, num_handles)) =
3666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3667            {
3668                let member_inline_size =
3669                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3670                if inlined != (member_inline_size <= 4) {
3671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3672                }
3673                let inner_offset;
3674                let mut inner_depth = depth.clone();
3675                if inlined {
3676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3677                    inner_offset = next_offset;
3678                } else {
3679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3680                    inner_depth.increment()?;
3681                }
3682                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
3683                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3685                {
3686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3687                }
3688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3690                }
3691            }
3692
3693            next_offset += envelope_size;
3694            _next_ordinal_to_read += 1;
3695            if next_offset >= end_offset {
3696                return Ok(());
3697            }
3698
3699            // Decode unknown envelopes for gaps in ordinals.
3700            while _next_ordinal_to_read < 2 {
3701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3702                _next_ordinal_to_read += 1;
3703                next_offset += envelope_size;
3704            }
3705
3706            let next_out_of_line = decoder.next_out_of_line();
3707            let handles_before = decoder.remaining_handles();
3708            if let Some((inlined, num_bytes, num_handles)) =
3709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3710            {
3711                let member_inline_size =
3712                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3713                if inlined != (member_inline_size <= 4) {
3714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3715                }
3716                let inner_offset;
3717                let mut inner_depth = depth.clone();
3718                if inlined {
3719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3720                    inner_offset = next_offset;
3721                } else {
3722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3723                    inner_depth.increment()?;
3724                }
3725                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
3726                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3727                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3728                {
3729                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3730                }
3731                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3732                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3733                }
3734            }
3735
3736            next_offset += envelope_size;
3737
3738            // Decode the remaining unknown envelopes.
3739            while next_offset < end_offset {
3740                _next_ordinal_to_read += 1;
3741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3742                next_offset += envelope_size;
3743            }
3744
3745            Ok(())
3746        }
3747    }
3748
3749    impl Configuration {
3750        #[inline(always)]
3751        fn max_ordinal_present(&self) -> u64 {
3752            if let Some(_) = self.ipv6 {
3753                return 2;
3754            }
3755            if let Some(_) = self.ipv4 {
3756                return 1;
3757            }
3758            0
3759        }
3760    }
3761
3762    impl fidl::encoding::ValueTypeMarker for Configuration {
3763        type Borrowed<'a> = &'a Self;
3764        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3765            value
3766        }
3767    }
3768
3769    unsafe impl fidl::encoding::TypeMarker for Configuration {
3770        type Owned = Self;
3771
3772        #[inline(always)]
3773        fn inline_align(_context: fidl::encoding::Context) -> usize {
3774            8
3775        }
3776
3777        #[inline(always)]
3778        fn inline_size(_context: fidl::encoding::Context) -> usize {
3779            16
3780        }
3781    }
3782
3783    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Configuration, D>
3784        for &Configuration
3785    {
3786        unsafe fn encode(
3787            self,
3788            encoder: &mut fidl::encoding::Encoder<'_, D>,
3789            offset: usize,
3790            mut depth: fidl::encoding::Depth,
3791        ) -> fidl::Result<()> {
3792            encoder.debug_check_bounds::<Configuration>(offset);
3793            // Vector header
3794            let max_ordinal: u64 = self.max_ordinal_present();
3795            encoder.write_num(max_ordinal, offset);
3796            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3797            // Calling encoder.out_of_line_offset(0) is not allowed.
3798            if max_ordinal == 0 {
3799                return Ok(());
3800            }
3801            depth.increment()?;
3802            let envelope_size = 8;
3803            let bytes_len = max_ordinal as usize * envelope_size;
3804            #[allow(unused_variables)]
3805            let offset = encoder.out_of_line_offset(bytes_len);
3806            let mut _prev_end_offset: usize = 0;
3807            if 1 > max_ordinal {
3808                return Ok(());
3809            }
3810
3811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3812            // are envelope_size bytes.
3813            let cur_offset: usize = (1 - 1) * envelope_size;
3814
3815            // Zero reserved fields.
3816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3817
3818            // Safety:
3819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3821            //   envelope_size bytes, there is always sufficient room.
3822            fidl::encoding::encode_in_envelope_optional::<Ipv4Configuration, D>(
3823                self.ipv4
3824                    .as_ref()
3825                    .map(<Ipv4Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3826                encoder,
3827                offset + cur_offset,
3828                depth,
3829            )?;
3830
3831            _prev_end_offset = cur_offset + envelope_size;
3832            if 2 > max_ordinal {
3833                return Ok(());
3834            }
3835
3836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3837            // are envelope_size bytes.
3838            let cur_offset: usize = (2 - 1) * envelope_size;
3839
3840            // Zero reserved fields.
3841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3842
3843            // Safety:
3844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3846            //   envelope_size bytes, there is always sufficient room.
3847            fidl::encoding::encode_in_envelope_optional::<Ipv6Configuration, D>(
3848                self.ipv6
3849                    .as_ref()
3850                    .map(<Ipv6Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3851                encoder,
3852                offset + cur_offset,
3853                depth,
3854            )?;
3855
3856            _prev_end_offset = cur_offset + envelope_size;
3857
3858            Ok(())
3859        }
3860    }
3861
3862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Configuration {
3863        #[inline(always)]
3864        fn new_empty() -> Self {
3865            Self::default()
3866        }
3867
3868        unsafe fn decode(
3869            &mut self,
3870            decoder: &mut fidl::encoding::Decoder<'_, D>,
3871            offset: usize,
3872            mut depth: fidl::encoding::Depth,
3873        ) -> fidl::Result<()> {
3874            decoder.debug_check_bounds::<Self>(offset);
3875            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3876                None => return Err(fidl::Error::NotNullable),
3877                Some(len) => len,
3878            };
3879            // Calling decoder.out_of_line_offset(0) is not allowed.
3880            if len == 0 {
3881                return Ok(());
3882            };
3883            depth.increment()?;
3884            let envelope_size = 8;
3885            let bytes_len = len * envelope_size;
3886            let offset = decoder.out_of_line_offset(bytes_len)?;
3887            // Decode the envelope for each type.
3888            let mut _next_ordinal_to_read = 0;
3889            let mut next_offset = offset;
3890            let end_offset = offset + bytes_len;
3891            _next_ordinal_to_read += 1;
3892            if next_offset >= end_offset {
3893                return Ok(());
3894            }
3895
3896            // Decode unknown envelopes for gaps in ordinals.
3897            while _next_ordinal_to_read < 1 {
3898                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3899                _next_ordinal_to_read += 1;
3900                next_offset += envelope_size;
3901            }
3902
3903            let next_out_of_line = decoder.next_out_of_line();
3904            let handles_before = decoder.remaining_handles();
3905            if let Some((inlined, num_bytes, num_handles)) =
3906                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3907            {
3908                let member_inline_size =
3909                    <Ipv4Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3910                if inlined != (member_inline_size <= 4) {
3911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3912                }
3913                let inner_offset;
3914                let mut inner_depth = depth.clone();
3915                if inlined {
3916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3917                    inner_offset = next_offset;
3918                } else {
3919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3920                    inner_depth.increment()?;
3921                }
3922                let val_ref =
3923                    self.ipv4.get_or_insert_with(|| fidl::new_empty!(Ipv4Configuration, D));
3924                fidl::decode!(Ipv4Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3926                {
3927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3928                }
3929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3931                }
3932            }
3933
3934            next_offset += envelope_size;
3935            _next_ordinal_to_read += 1;
3936            if next_offset >= end_offset {
3937                return Ok(());
3938            }
3939
3940            // Decode unknown envelopes for gaps in ordinals.
3941            while _next_ordinal_to_read < 2 {
3942                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3943                _next_ordinal_to_read += 1;
3944                next_offset += envelope_size;
3945            }
3946
3947            let next_out_of_line = decoder.next_out_of_line();
3948            let handles_before = decoder.remaining_handles();
3949            if let Some((inlined, num_bytes, num_handles)) =
3950                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3951            {
3952                let member_inline_size =
3953                    <Ipv6Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3954                if inlined != (member_inline_size <= 4) {
3955                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3956                }
3957                let inner_offset;
3958                let mut inner_depth = depth.clone();
3959                if inlined {
3960                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3961                    inner_offset = next_offset;
3962                } else {
3963                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3964                    inner_depth.increment()?;
3965                }
3966                let val_ref =
3967                    self.ipv6.get_or_insert_with(|| fidl::new_empty!(Ipv6Configuration, D));
3968                fidl::decode!(Ipv6Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3969                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3970                {
3971                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3972                }
3973                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3974                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3975                }
3976            }
3977
3978            next_offset += envelope_size;
3979
3980            // Decode the remaining unknown envelopes.
3981            while next_offset < end_offset {
3982                _next_ordinal_to_read += 1;
3983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3984                next_offset += envelope_size;
3985            }
3986
3987            Ok(())
3988        }
3989    }
3990
3991    impl DadConfiguration {
3992        #[inline(always)]
3993        fn max_ordinal_present(&self) -> u64 {
3994            if let Some(_) = self.transmits {
3995                return 1;
3996            }
3997            0
3998        }
3999    }
4000
4001    impl fidl::encoding::ValueTypeMarker for DadConfiguration {
4002        type Borrowed<'a> = &'a Self;
4003        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4004            value
4005        }
4006    }
4007
4008    unsafe impl fidl::encoding::TypeMarker for DadConfiguration {
4009        type Owned = Self;
4010
4011        #[inline(always)]
4012        fn inline_align(_context: fidl::encoding::Context) -> usize {
4013            8
4014        }
4015
4016        #[inline(always)]
4017        fn inline_size(_context: fidl::encoding::Context) -> usize {
4018            16
4019        }
4020    }
4021
4022    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DadConfiguration, D>
4023        for &DadConfiguration
4024    {
4025        unsafe fn encode(
4026            self,
4027            encoder: &mut fidl::encoding::Encoder<'_, D>,
4028            offset: usize,
4029            mut depth: fidl::encoding::Depth,
4030        ) -> fidl::Result<()> {
4031            encoder.debug_check_bounds::<DadConfiguration>(offset);
4032            // Vector header
4033            let max_ordinal: u64 = self.max_ordinal_present();
4034            encoder.write_num(max_ordinal, offset);
4035            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4036            // Calling encoder.out_of_line_offset(0) is not allowed.
4037            if max_ordinal == 0 {
4038                return Ok(());
4039            }
4040            depth.increment()?;
4041            let envelope_size = 8;
4042            let bytes_len = max_ordinal as usize * envelope_size;
4043            #[allow(unused_variables)]
4044            let offset = encoder.out_of_line_offset(bytes_len);
4045            let mut _prev_end_offset: usize = 0;
4046            if 1 > max_ordinal {
4047                return Ok(());
4048            }
4049
4050            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4051            // are envelope_size bytes.
4052            let cur_offset: usize = (1 - 1) * envelope_size;
4053
4054            // Zero reserved fields.
4055            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4056
4057            // Safety:
4058            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4059            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4060            //   envelope_size bytes, there is always sufficient room.
4061            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4062                self.transmits.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4063                encoder,
4064                offset + cur_offset,
4065                depth,
4066            )?;
4067
4068            _prev_end_offset = cur_offset + envelope_size;
4069
4070            Ok(())
4071        }
4072    }
4073
4074    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DadConfiguration {
4075        #[inline(always)]
4076        fn new_empty() -> Self {
4077            Self::default()
4078        }
4079
4080        unsafe fn decode(
4081            &mut self,
4082            decoder: &mut fidl::encoding::Decoder<'_, D>,
4083            offset: usize,
4084            mut depth: fidl::encoding::Depth,
4085        ) -> fidl::Result<()> {
4086            decoder.debug_check_bounds::<Self>(offset);
4087            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4088                None => return Err(fidl::Error::NotNullable),
4089                Some(len) => len,
4090            };
4091            // Calling decoder.out_of_line_offset(0) is not allowed.
4092            if len == 0 {
4093                return Ok(());
4094            };
4095            depth.increment()?;
4096            let envelope_size = 8;
4097            let bytes_len = len * envelope_size;
4098            let offset = decoder.out_of_line_offset(bytes_len)?;
4099            // Decode the envelope for each type.
4100            let mut _next_ordinal_to_read = 0;
4101            let mut next_offset = offset;
4102            let end_offset = offset + bytes_len;
4103            _next_ordinal_to_read += 1;
4104            if next_offset >= end_offset {
4105                return Ok(());
4106            }
4107
4108            // Decode unknown envelopes for gaps in ordinals.
4109            while _next_ordinal_to_read < 1 {
4110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4111                _next_ordinal_to_read += 1;
4112                next_offset += envelope_size;
4113            }
4114
4115            let next_out_of_line = decoder.next_out_of_line();
4116            let handles_before = decoder.remaining_handles();
4117            if let Some((inlined, num_bytes, num_handles)) =
4118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4119            {
4120                let member_inline_size =
4121                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4122                if inlined != (member_inline_size <= 4) {
4123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4124                }
4125                let inner_offset;
4126                let mut inner_depth = depth.clone();
4127                if inlined {
4128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4129                    inner_offset = next_offset;
4130                } else {
4131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4132                    inner_depth.increment()?;
4133                }
4134                let val_ref = self.transmits.get_or_insert_with(|| fidl::new_empty!(u16, D));
4135                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4136                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4137                {
4138                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4139                }
4140                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4141                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4142                }
4143            }
4144
4145            next_offset += envelope_size;
4146
4147            // Decode the remaining unknown envelopes.
4148            while next_offset < end_offset {
4149                _next_ordinal_to_read += 1;
4150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4151                next_offset += envelope_size;
4152            }
4153
4154            Ok(())
4155        }
4156    }
4157
4158    impl IgmpConfiguration {
4159        #[inline(always)]
4160        fn max_ordinal_present(&self) -> u64 {
4161            if let Some(_) = self.version {
4162                return 1;
4163            }
4164            0
4165        }
4166    }
4167
4168    impl fidl::encoding::ValueTypeMarker for IgmpConfiguration {
4169        type Borrowed<'a> = &'a Self;
4170        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4171            value
4172        }
4173    }
4174
4175    unsafe impl fidl::encoding::TypeMarker for IgmpConfiguration {
4176        type Owned = Self;
4177
4178        #[inline(always)]
4179        fn inline_align(_context: fidl::encoding::Context) -> usize {
4180            8
4181        }
4182
4183        #[inline(always)]
4184        fn inline_size(_context: fidl::encoding::Context) -> usize {
4185            16
4186        }
4187    }
4188
4189    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IgmpConfiguration, D>
4190        for &IgmpConfiguration
4191    {
4192        unsafe fn encode(
4193            self,
4194            encoder: &mut fidl::encoding::Encoder<'_, D>,
4195            offset: usize,
4196            mut depth: fidl::encoding::Depth,
4197        ) -> fidl::Result<()> {
4198            encoder.debug_check_bounds::<IgmpConfiguration>(offset);
4199            // Vector header
4200            let max_ordinal: u64 = self.max_ordinal_present();
4201            encoder.write_num(max_ordinal, offset);
4202            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4203            // Calling encoder.out_of_line_offset(0) is not allowed.
4204            if max_ordinal == 0 {
4205                return Ok(());
4206            }
4207            depth.increment()?;
4208            let envelope_size = 8;
4209            let bytes_len = max_ordinal as usize * envelope_size;
4210            #[allow(unused_variables)]
4211            let offset = encoder.out_of_line_offset(bytes_len);
4212            let mut _prev_end_offset: usize = 0;
4213            if 1 > max_ordinal {
4214                return Ok(());
4215            }
4216
4217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4218            // are envelope_size bytes.
4219            let cur_offset: usize = (1 - 1) * envelope_size;
4220
4221            // Zero reserved fields.
4222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4223
4224            // Safety:
4225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4227            //   envelope_size bytes, there is always sufficient room.
4228            fidl::encoding::encode_in_envelope_optional::<IgmpVersion, D>(
4229                self.version.as_ref().map(<IgmpVersion as fidl::encoding::ValueTypeMarker>::borrow),
4230                encoder,
4231                offset + cur_offset,
4232                depth,
4233            )?;
4234
4235            _prev_end_offset = cur_offset + envelope_size;
4236
4237            Ok(())
4238        }
4239    }
4240
4241    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpConfiguration {
4242        #[inline(always)]
4243        fn new_empty() -> Self {
4244            Self::default()
4245        }
4246
4247        unsafe fn decode(
4248            &mut self,
4249            decoder: &mut fidl::encoding::Decoder<'_, D>,
4250            offset: usize,
4251            mut depth: fidl::encoding::Depth,
4252        ) -> fidl::Result<()> {
4253            decoder.debug_check_bounds::<Self>(offset);
4254            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4255                None => return Err(fidl::Error::NotNullable),
4256                Some(len) => len,
4257            };
4258            // Calling decoder.out_of_line_offset(0) is not allowed.
4259            if len == 0 {
4260                return Ok(());
4261            };
4262            depth.increment()?;
4263            let envelope_size = 8;
4264            let bytes_len = len * envelope_size;
4265            let offset = decoder.out_of_line_offset(bytes_len)?;
4266            // Decode the envelope for each type.
4267            let mut _next_ordinal_to_read = 0;
4268            let mut next_offset = offset;
4269            let end_offset = offset + bytes_len;
4270            _next_ordinal_to_read += 1;
4271            if next_offset >= end_offset {
4272                return Ok(());
4273            }
4274
4275            // Decode unknown envelopes for gaps in ordinals.
4276            while _next_ordinal_to_read < 1 {
4277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4278                _next_ordinal_to_read += 1;
4279                next_offset += envelope_size;
4280            }
4281
4282            let next_out_of_line = decoder.next_out_of_line();
4283            let handles_before = decoder.remaining_handles();
4284            if let Some((inlined, num_bytes, num_handles)) =
4285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4286            {
4287                let member_inline_size =
4288                    <IgmpVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4289                if inlined != (member_inline_size <= 4) {
4290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4291                }
4292                let inner_offset;
4293                let mut inner_depth = depth.clone();
4294                if inlined {
4295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4296                    inner_offset = next_offset;
4297                } else {
4298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4299                    inner_depth.increment()?;
4300                }
4301                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(IgmpVersion, D));
4302                fidl::decode!(IgmpVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
4303                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4304                {
4305                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4306                }
4307                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4308                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4309                }
4310            }
4311
4312            next_offset += envelope_size;
4313
4314            // Decode the remaining unknown envelopes.
4315            while next_offset < end_offset {
4316                _next_ordinal_to_read += 1;
4317                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4318                next_offset += envelope_size;
4319            }
4320
4321            Ok(())
4322        }
4323    }
4324
4325    impl Ipv4Configuration {
4326        #[inline(always)]
4327        fn max_ordinal_present(&self) -> u64 {
4328            if let Some(_) = self.enabled {
4329                return 5;
4330            }
4331            if let Some(_) = self.arp {
4332                return 4;
4333            }
4334            if let Some(_) = self.igmp {
4335                return 3;
4336            }
4337            if let Some(_) = self.multicast_forwarding {
4338                return 2;
4339            }
4340            if let Some(_) = self.unicast_forwarding {
4341                return 1;
4342            }
4343            0
4344        }
4345    }
4346
4347    impl fidl::encoding::ValueTypeMarker for Ipv4Configuration {
4348        type Borrowed<'a> = &'a Self;
4349        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4350            value
4351        }
4352    }
4353
4354    unsafe impl fidl::encoding::TypeMarker for Ipv4Configuration {
4355        type Owned = Self;
4356
4357        #[inline(always)]
4358        fn inline_align(_context: fidl::encoding::Context) -> usize {
4359            8
4360        }
4361
4362        #[inline(always)]
4363        fn inline_size(_context: fidl::encoding::Context) -> usize {
4364            16
4365        }
4366    }
4367
4368    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv4Configuration, D>
4369        for &Ipv4Configuration
4370    {
4371        unsafe fn encode(
4372            self,
4373            encoder: &mut fidl::encoding::Encoder<'_, D>,
4374            offset: usize,
4375            mut depth: fidl::encoding::Depth,
4376        ) -> fidl::Result<()> {
4377            encoder.debug_check_bounds::<Ipv4Configuration>(offset);
4378            // Vector header
4379            let max_ordinal: u64 = self.max_ordinal_present();
4380            encoder.write_num(max_ordinal, offset);
4381            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4382            // Calling encoder.out_of_line_offset(0) is not allowed.
4383            if max_ordinal == 0 {
4384                return Ok(());
4385            }
4386            depth.increment()?;
4387            let envelope_size = 8;
4388            let bytes_len = max_ordinal as usize * envelope_size;
4389            #[allow(unused_variables)]
4390            let offset = encoder.out_of_line_offset(bytes_len);
4391            let mut _prev_end_offset: usize = 0;
4392            if 1 > max_ordinal {
4393                return Ok(());
4394            }
4395
4396            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4397            // are envelope_size bytes.
4398            let cur_offset: usize = (1 - 1) * envelope_size;
4399
4400            // Zero reserved fields.
4401            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4402
4403            // Safety:
4404            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4405            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4406            //   envelope_size bytes, there is always sufficient room.
4407            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4408                self.unicast_forwarding
4409                    .as_ref()
4410                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4411                encoder,
4412                offset + cur_offset,
4413                depth,
4414            )?;
4415
4416            _prev_end_offset = cur_offset + envelope_size;
4417            if 2 > max_ordinal {
4418                return Ok(());
4419            }
4420
4421            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4422            // are envelope_size bytes.
4423            let cur_offset: usize = (2 - 1) * envelope_size;
4424
4425            // Zero reserved fields.
4426            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4427
4428            // Safety:
4429            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4430            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4431            //   envelope_size bytes, there is always sufficient room.
4432            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4433                self.multicast_forwarding
4434                    .as_ref()
4435                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4436                encoder,
4437                offset + cur_offset,
4438                depth,
4439            )?;
4440
4441            _prev_end_offset = cur_offset + envelope_size;
4442            if 3 > max_ordinal {
4443                return Ok(());
4444            }
4445
4446            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4447            // are envelope_size bytes.
4448            let cur_offset: usize = (3 - 1) * envelope_size;
4449
4450            // Zero reserved fields.
4451            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4452
4453            // Safety:
4454            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4455            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4456            //   envelope_size bytes, there is always sufficient room.
4457            fidl::encoding::encode_in_envelope_optional::<IgmpConfiguration, D>(
4458                self.igmp
4459                    .as_ref()
4460                    .map(<IgmpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4461                encoder,
4462                offset + cur_offset,
4463                depth,
4464            )?;
4465
4466            _prev_end_offset = cur_offset + envelope_size;
4467            if 4 > max_ordinal {
4468                return Ok(());
4469            }
4470
4471            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4472            // are envelope_size bytes.
4473            let cur_offset: usize = (4 - 1) * envelope_size;
4474
4475            // Zero reserved fields.
4476            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4477
4478            // Safety:
4479            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4480            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4481            //   envelope_size bytes, there is always sufficient room.
4482            fidl::encoding::encode_in_envelope_optional::<ArpConfiguration, D>(
4483                self.arp
4484                    .as_ref()
4485                    .map(<ArpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4486                encoder,
4487                offset + cur_offset,
4488                depth,
4489            )?;
4490
4491            _prev_end_offset = cur_offset + envelope_size;
4492            if 5 > max_ordinal {
4493                return Ok(());
4494            }
4495
4496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4497            // are envelope_size bytes.
4498            let cur_offset: usize = (5 - 1) * envelope_size;
4499
4500            // Zero reserved fields.
4501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4502
4503            // Safety:
4504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4506            //   envelope_size bytes, there is always sufficient room.
4507            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4508                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4509                encoder,
4510                offset + cur_offset,
4511                depth,
4512            )?;
4513
4514            _prev_end_offset = cur_offset + envelope_size;
4515
4516            Ok(())
4517        }
4518    }
4519
4520    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv4Configuration {
4521        #[inline(always)]
4522        fn new_empty() -> Self {
4523            Self::default()
4524        }
4525
4526        unsafe fn decode(
4527            &mut self,
4528            decoder: &mut fidl::encoding::Decoder<'_, D>,
4529            offset: usize,
4530            mut depth: fidl::encoding::Depth,
4531        ) -> fidl::Result<()> {
4532            decoder.debug_check_bounds::<Self>(offset);
4533            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4534                None => return Err(fidl::Error::NotNullable),
4535                Some(len) => len,
4536            };
4537            // Calling decoder.out_of_line_offset(0) is not allowed.
4538            if len == 0 {
4539                return Ok(());
4540            };
4541            depth.increment()?;
4542            let envelope_size = 8;
4543            let bytes_len = len * envelope_size;
4544            let offset = decoder.out_of_line_offset(bytes_len)?;
4545            // Decode the envelope for each type.
4546            let mut _next_ordinal_to_read = 0;
4547            let mut next_offset = offset;
4548            let end_offset = offset + bytes_len;
4549            _next_ordinal_to_read += 1;
4550            if next_offset >= end_offset {
4551                return Ok(());
4552            }
4553
4554            // Decode unknown envelopes for gaps in ordinals.
4555            while _next_ordinal_to_read < 1 {
4556                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4557                _next_ordinal_to_read += 1;
4558                next_offset += envelope_size;
4559            }
4560
4561            let next_out_of_line = decoder.next_out_of_line();
4562            let handles_before = decoder.remaining_handles();
4563            if let Some((inlined, num_bytes, num_handles)) =
4564                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4565            {
4566                let member_inline_size =
4567                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4568                if inlined != (member_inline_size <= 4) {
4569                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4570                }
4571                let inner_offset;
4572                let mut inner_depth = depth.clone();
4573                if inlined {
4574                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4575                    inner_offset = next_offset;
4576                } else {
4577                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4578                    inner_depth.increment()?;
4579                }
4580                let val_ref =
4581                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4582                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4583                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4584                {
4585                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4586                }
4587                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4588                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4589                }
4590            }
4591
4592            next_offset += envelope_size;
4593            _next_ordinal_to_read += 1;
4594            if next_offset >= end_offset {
4595                return Ok(());
4596            }
4597
4598            // Decode unknown envelopes for gaps in ordinals.
4599            while _next_ordinal_to_read < 2 {
4600                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4601                _next_ordinal_to_read += 1;
4602                next_offset += envelope_size;
4603            }
4604
4605            let next_out_of_line = decoder.next_out_of_line();
4606            let handles_before = decoder.remaining_handles();
4607            if let Some((inlined, num_bytes, num_handles)) =
4608                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4609            {
4610                let member_inline_size =
4611                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4612                if inlined != (member_inline_size <= 4) {
4613                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4614                }
4615                let inner_offset;
4616                let mut inner_depth = depth.clone();
4617                if inlined {
4618                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4619                    inner_offset = next_offset;
4620                } else {
4621                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4622                    inner_depth.increment()?;
4623                }
4624                let val_ref =
4625                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4626                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4627                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4628                {
4629                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4630                }
4631                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4632                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4633                }
4634            }
4635
4636            next_offset += envelope_size;
4637            _next_ordinal_to_read += 1;
4638            if next_offset >= end_offset {
4639                return Ok(());
4640            }
4641
4642            // Decode unknown envelopes for gaps in ordinals.
4643            while _next_ordinal_to_read < 3 {
4644                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4645                _next_ordinal_to_read += 1;
4646                next_offset += envelope_size;
4647            }
4648
4649            let next_out_of_line = decoder.next_out_of_line();
4650            let handles_before = decoder.remaining_handles();
4651            if let Some((inlined, num_bytes, num_handles)) =
4652                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4653            {
4654                let member_inline_size =
4655                    <IgmpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4656                if inlined != (member_inline_size <= 4) {
4657                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4658                }
4659                let inner_offset;
4660                let mut inner_depth = depth.clone();
4661                if inlined {
4662                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4663                    inner_offset = next_offset;
4664                } else {
4665                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4666                    inner_depth.increment()?;
4667                }
4668                let val_ref =
4669                    self.igmp.get_or_insert_with(|| fidl::new_empty!(IgmpConfiguration, D));
4670                fidl::decode!(IgmpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4671                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4672                {
4673                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4674                }
4675                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4676                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4677                }
4678            }
4679
4680            next_offset += envelope_size;
4681            _next_ordinal_to_read += 1;
4682            if next_offset >= end_offset {
4683                return Ok(());
4684            }
4685
4686            // Decode unknown envelopes for gaps in ordinals.
4687            while _next_ordinal_to_read < 4 {
4688                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4689                _next_ordinal_to_read += 1;
4690                next_offset += envelope_size;
4691            }
4692
4693            let next_out_of_line = decoder.next_out_of_line();
4694            let handles_before = decoder.remaining_handles();
4695            if let Some((inlined, num_bytes, num_handles)) =
4696                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4697            {
4698                let member_inline_size =
4699                    <ArpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4700                if inlined != (member_inline_size <= 4) {
4701                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4702                }
4703                let inner_offset;
4704                let mut inner_depth = depth.clone();
4705                if inlined {
4706                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4707                    inner_offset = next_offset;
4708                } else {
4709                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4710                    inner_depth.increment()?;
4711                }
4712                let val_ref = self.arp.get_or_insert_with(|| fidl::new_empty!(ArpConfiguration, D));
4713                fidl::decode!(ArpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4714                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4715                {
4716                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4717                }
4718                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4719                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4720                }
4721            }
4722
4723            next_offset += envelope_size;
4724            _next_ordinal_to_read += 1;
4725            if next_offset >= end_offset {
4726                return Ok(());
4727            }
4728
4729            // Decode unknown envelopes for gaps in ordinals.
4730            while _next_ordinal_to_read < 5 {
4731                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4732                _next_ordinal_to_read += 1;
4733                next_offset += envelope_size;
4734            }
4735
4736            let next_out_of_line = decoder.next_out_of_line();
4737            let handles_before = decoder.remaining_handles();
4738            if let Some((inlined, num_bytes, num_handles)) =
4739                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4740            {
4741                let member_inline_size =
4742                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4743                if inlined != (member_inline_size <= 4) {
4744                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4745                }
4746                let inner_offset;
4747                let mut inner_depth = depth.clone();
4748                if inlined {
4749                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4750                    inner_offset = next_offset;
4751                } else {
4752                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4753                    inner_depth.increment()?;
4754                }
4755                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
4756                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4757                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4758                {
4759                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4760                }
4761                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4762                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4763                }
4764            }
4765
4766            next_offset += envelope_size;
4767
4768            // Decode the remaining unknown envelopes.
4769            while next_offset < end_offset {
4770                _next_ordinal_to_read += 1;
4771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4772                next_offset += envelope_size;
4773            }
4774
4775            Ok(())
4776        }
4777    }
4778
4779    impl Ipv6Configuration {
4780        #[inline(always)]
4781        fn max_ordinal_present(&self) -> u64 {
4782            if let Some(_) = self.enabled {
4783                return 5;
4784            }
4785            if let Some(_) = self.ndp {
4786                return 4;
4787            }
4788            if let Some(_) = self.mld {
4789                return 3;
4790            }
4791            if let Some(_) = self.multicast_forwarding {
4792                return 2;
4793            }
4794            if let Some(_) = self.unicast_forwarding {
4795                return 1;
4796            }
4797            0
4798        }
4799    }
4800
4801    impl fidl::encoding::ValueTypeMarker for Ipv6Configuration {
4802        type Borrowed<'a> = &'a Self;
4803        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4804            value
4805        }
4806    }
4807
4808    unsafe impl fidl::encoding::TypeMarker for Ipv6Configuration {
4809        type Owned = Self;
4810
4811        #[inline(always)]
4812        fn inline_align(_context: fidl::encoding::Context) -> usize {
4813            8
4814        }
4815
4816        #[inline(always)]
4817        fn inline_size(_context: fidl::encoding::Context) -> usize {
4818            16
4819        }
4820    }
4821
4822    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv6Configuration, D>
4823        for &Ipv6Configuration
4824    {
4825        unsafe fn encode(
4826            self,
4827            encoder: &mut fidl::encoding::Encoder<'_, D>,
4828            offset: usize,
4829            mut depth: fidl::encoding::Depth,
4830        ) -> fidl::Result<()> {
4831            encoder.debug_check_bounds::<Ipv6Configuration>(offset);
4832            // Vector header
4833            let max_ordinal: u64 = self.max_ordinal_present();
4834            encoder.write_num(max_ordinal, offset);
4835            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4836            // Calling encoder.out_of_line_offset(0) is not allowed.
4837            if max_ordinal == 0 {
4838                return Ok(());
4839            }
4840            depth.increment()?;
4841            let envelope_size = 8;
4842            let bytes_len = max_ordinal as usize * envelope_size;
4843            #[allow(unused_variables)]
4844            let offset = encoder.out_of_line_offset(bytes_len);
4845            let mut _prev_end_offset: usize = 0;
4846            if 1 > max_ordinal {
4847                return Ok(());
4848            }
4849
4850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4851            // are envelope_size bytes.
4852            let cur_offset: usize = (1 - 1) * envelope_size;
4853
4854            // Zero reserved fields.
4855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4856
4857            // Safety:
4858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4860            //   envelope_size bytes, there is always sufficient room.
4861            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4862                self.unicast_forwarding
4863                    .as_ref()
4864                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4865                encoder,
4866                offset + cur_offset,
4867                depth,
4868            )?;
4869
4870            _prev_end_offset = cur_offset + envelope_size;
4871            if 2 > max_ordinal {
4872                return Ok(());
4873            }
4874
4875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4876            // are envelope_size bytes.
4877            let cur_offset: usize = (2 - 1) * envelope_size;
4878
4879            // Zero reserved fields.
4880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4881
4882            // Safety:
4883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4885            //   envelope_size bytes, there is always sufficient room.
4886            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4887                self.multicast_forwarding
4888                    .as_ref()
4889                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4890                encoder,
4891                offset + cur_offset,
4892                depth,
4893            )?;
4894
4895            _prev_end_offset = cur_offset + envelope_size;
4896            if 3 > max_ordinal {
4897                return Ok(());
4898            }
4899
4900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4901            // are envelope_size bytes.
4902            let cur_offset: usize = (3 - 1) * envelope_size;
4903
4904            // Zero reserved fields.
4905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4906
4907            // Safety:
4908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4910            //   envelope_size bytes, there is always sufficient room.
4911            fidl::encoding::encode_in_envelope_optional::<MldConfiguration, D>(
4912                self.mld
4913                    .as_ref()
4914                    .map(<MldConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4915                encoder,
4916                offset + cur_offset,
4917                depth,
4918            )?;
4919
4920            _prev_end_offset = cur_offset + envelope_size;
4921            if 4 > max_ordinal {
4922                return Ok(());
4923            }
4924
4925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4926            // are envelope_size bytes.
4927            let cur_offset: usize = (4 - 1) * envelope_size;
4928
4929            // Zero reserved fields.
4930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4931
4932            // Safety:
4933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4935            //   envelope_size bytes, there is always sufficient room.
4936            fidl::encoding::encode_in_envelope_optional::<NdpConfiguration, D>(
4937                self.ndp
4938                    .as_ref()
4939                    .map(<NdpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4940                encoder,
4941                offset + cur_offset,
4942                depth,
4943            )?;
4944
4945            _prev_end_offset = cur_offset + envelope_size;
4946            if 5 > max_ordinal {
4947                return Ok(());
4948            }
4949
4950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4951            // are envelope_size bytes.
4952            let cur_offset: usize = (5 - 1) * envelope_size;
4953
4954            // Zero reserved fields.
4955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4956
4957            // Safety:
4958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4960            //   envelope_size bytes, there is always sufficient room.
4961            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4962                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4963                encoder,
4964                offset + cur_offset,
4965                depth,
4966            )?;
4967
4968            _prev_end_offset = cur_offset + envelope_size;
4969
4970            Ok(())
4971        }
4972    }
4973
4974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv6Configuration {
4975        #[inline(always)]
4976        fn new_empty() -> Self {
4977            Self::default()
4978        }
4979
4980        unsafe fn decode(
4981            &mut self,
4982            decoder: &mut fidl::encoding::Decoder<'_, D>,
4983            offset: usize,
4984            mut depth: fidl::encoding::Depth,
4985        ) -> fidl::Result<()> {
4986            decoder.debug_check_bounds::<Self>(offset);
4987            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4988                None => return Err(fidl::Error::NotNullable),
4989                Some(len) => len,
4990            };
4991            // Calling decoder.out_of_line_offset(0) is not allowed.
4992            if len == 0 {
4993                return Ok(());
4994            };
4995            depth.increment()?;
4996            let envelope_size = 8;
4997            let bytes_len = len * envelope_size;
4998            let offset = decoder.out_of_line_offset(bytes_len)?;
4999            // Decode the envelope for each type.
5000            let mut _next_ordinal_to_read = 0;
5001            let mut next_offset = offset;
5002            let end_offset = offset + bytes_len;
5003            _next_ordinal_to_read += 1;
5004            if next_offset >= end_offset {
5005                return Ok(());
5006            }
5007
5008            // Decode unknown envelopes for gaps in ordinals.
5009            while _next_ordinal_to_read < 1 {
5010                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5011                _next_ordinal_to_read += 1;
5012                next_offset += envelope_size;
5013            }
5014
5015            let next_out_of_line = decoder.next_out_of_line();
5016            let handles_before = decoder.remaining_handles();
5017            if let Some((inlined, num_bytes, num_handles)) =
5018                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5019            {
5020                let member_inline_size =
5021                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5022                if inlined != (member_inline_size <= 4) {
5023                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5024                }
5025                let inner_offset;
5026                let mut inner_depth = depth.clone();
5027                if inlined {
5028                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5029                    inner_offset = next_offset;
5030                } else {
5031                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5032                    inner_depth.increment()?;
5033                }
5034                let val_ref =
5035                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
5036                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5038                {
5039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5040                }
5041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5043                }
5044            }
5045
5046            next_offset += envelope_size;
5047            _next_ordinal_to_read += 1;
5048            if next_offset >= end_offset {
5049                return Ok(());
5050            }
5051
5052            // Decode unknown envelopes for gaps in ordinals.
5053            while _next_ordinal_to_read < 2 {
5054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5055                _next_ordinal_to_read += 1;
5056                next_offset += envelope_size;
5057            }
5058
5059            let next_out_of_line = decoder.next_out_of_line();
5060            let handles_before = decoder.remaining_handles();
5061            if let Some((inlined, num_bytes, num_handles)) =
5062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5063            {
5064                let member_inline_size =
5065                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5066                if inlined != (member_inline_size <= 4) {
5067                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5068                }
5069                let inner_offset;
5070                let mut inner_depth = depth.clone();
5071                if inlined {
5072                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5073                    inner_offset = next_offset;
5074                } else {
5075                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5076                    inner_depth.increment()?;
5077                }
5078                let val_ref =
5079                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
5080                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5082                {
5083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5084                }
5085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5087                }
5088            }
5089
5090            next_offset += envelope_size;
5091            _next_ordinal_to_read += 1;
5092            if next_offset >= end_offset {
5093                return Ok(());
5094            }
5095
5096            // Decode unknown envelopes for gaps in ordinals.
5097            while _next_ordinal_to_read < 3 {
5098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5099                _next_ordinal_to_read += 1;
5100                next_offset += envelope_size;
5101            }
5102
5103            let next_out_of_line = decoder.next_out_of_line();
5104            let handles_before = decoder.remaining_handles();
5105            if let Some((inlined, num_bytes, num_handles)) =
5106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5107            {
5108                let member_inline_size =
5109                    <MldConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5110                if inlined != (member_inline_size <= 4) {
5111                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5112                }
5113                let inner_offset;
5114                let mut inner_depth = depth.clone();
5115                if inlined {
5116                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5117                    inner_offset = next_offset;
5118                } else {
5119                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5120                    inner_depth.increment()?;
5121                }
5122                let val_ref = self.mld.get_or_insert_with(|| fidl::new_empty!(MldConfiguration, D));
5123                fidl::decode!(MldConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5125                {
5126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5127                }
5128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5130                }
5131            }
5132
5133            next_offset += envelope_size;
5134            _next_ordinal_to_read += 1;
5135            if next_offset >= end_offset {
5136                return Ok(());
5137            }
5138
5139            // Decode unknown envelopes for gaps in ordinals.
5140            while _next_ordinal_to_read < 4 {
5141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5142                _next_ordinal_to_read += 1;
5143                next_offset += envelope_size;
5144            }
5145
5146            let next_out_of_line = decoder.next_out_of_line();
5147            let handles_before = decoder.remaining_handles();
5148            if let Some((inlined, num_bytes, num_handles)) =
5149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5150            {
5151                let member_inline_size =
5152                    <NdpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5153                if inlined != (member_inline_size <= 4) {
5154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5155                }
5156                let inner_offset;
5157                let mut inner_depth = depth.clone();
5158                if inlined {
5159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5160                    inner_offset = next_offset;
5161                } else {
5162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5163                    inner_depth.increment()?;
5164                }
5165                let val_ref = self.ndp.get_or_insert_with(|| fidl::new_empty!(NdpConfiguration, D));
5166                fidl::decode!(NdpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5168                {
5169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5170                }
5171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5173                }
5174            }
5175
5176            next_offset += envelope_size;
5177            _next_ordinal_to_read += 1;
5178            if next_offset >= end_offset {
5179                return Ok(());
5180            }
5181
5182            // Decode unknown envelopes for gaps in ordinals.
5183            while _next_ordinal_to_read < 5 {
5184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5185                _next_ordinal_to_read += 1;
5186                next_offset += envelope_size;
5187            }
5188
5189            let next_out_of_line = decoder.next_out_of_line();
5190            let handles_before = decoder.remaining_handles();
5191            if let Some((inlined, num_bytes, num_handles)) =
5192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5193            {
5194                let member_inline_size =
5195                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5196                if inlined != (member_inline_size <= 4) {
5197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5198                }
5199                let inner_offset;
5200                let mut inner_depth = depth.clone();
5201                if inlined {
5202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5203                    inner_offset = next_offset;
5204                } else {
5205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5206                    inner_depth.increment()?;
5207                }
5208                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5209                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5211                {
5212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5213                }
5214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5216                }
5217            }
5218
5219            next_offset += envelope_size;
5220
5221            // Decode the remaining unknown envelopes.
5222            while next_offset < end_offset {
5223                _next_ordinal_to_read += 1;
5224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5225                next_offset += envelope_size;
5226            }
5227
5228            Ok(())
5229        }
5230    }
5231
5232    impl MldConfiguration {
5233        #[inline(always)]
5234        fn max_ordinal_present(&self) -> u64 {
5235            if let Some(_) = self.version {
5236                return 1;
5237            }
5238            0
5239        }
5240    }
5241
5242    impl fidl::encoding::ValueTypeMarker for MldConfiguration {
5243        type Borrowed<'a> = &'a Self;
5244        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5245            value
5246        }
5247    }
5248
5249    unsafe impl fidl::encoding::TypeMarker for MldConfiguration {
5250        type Owned = Self;
5251
5252        #[inline(always)]
5253        fn inline_align(_context: fidl::encoding::Context) -> usize {
5254            8
5255        }
5256
5257        #[inline(always)]
5258        fn inline_size(_context: fidl::encoding::Context) -> usize {
5259            16
5260        }
5261    }
5262
5263    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MldConfiguration, D>
5264        for &MldConfiguration
5265    {
5266        unsafe fn encode(
5267            self,
5268            encoder: &mut fidl::encoding::Encoder<'_, D>,
5269            offset: usize,
5270            mut depth: fidl::encoding::Depth,
5271        ) -> fidl::Result<()> {
5272            encoder.debug_check_bounds::<MldConfiguration>(offset);
5273            // Vector header
5274            let max_ordinal: u64 = self.max_ordinal_present();
5275            encoder.write_num(max_ordinal, offset);
5276            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5277            // Calling encoder.out_of_line_offset(0) is not allowed.
5278            if max_ordinal == 0 {
5279                return Ok(());
5280            }
5281            depth.increment()?;
5282            let envelope_size = 8;
5283            let bytes_len = max_ordinal as usize * envelope_size;
5284            #[allow(unused_variables)]
5285            let offset = encoder.out_of_line_offset(bytes_len);
5286            let mut _prev_end_offset: usize = 0;
5287            if 1 > max_ordinal {
5288                return Ok(());
5289            }
5290
5291            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5292            // are envelope_size bytes.
5293            let cur_offset: usize = (1 - 1) * envelope_size;
5294
5295            // Zero reserved fields.
5296            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5297
5298            // Safety:
5299            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5300            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5301            //   envelope_size bytes, there is always sufficient room.
5302            fidl::encoding::encode_in_envelope_optional::<MldVersion, D>(
5303                self.version.as_ref().map(<MldVersion as fidl::encoding::ValueTypeMarker>::borrow),
5304                encoder,
5305                offset + cur_offset,
5306                depth,
5307            )?;
5308
5309            _prev_end_offset = cur_offset + envelope_size;
5310
5311            Ok(())
5312        }
5313    }
5314
5315    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldConfiguration {
5316        #[inline(always)]
5317        fn new_empty() -> Self {
5318            Self::default()
5319        }
5320
5321        unsafe fn decode(
5322            &mut self,
5323            decoder: &mut fidl::encoding::Decoder<'_, D>,
5324            offset: usize,
5325            mut depth: fidl::encoding::Depth,
5326        ) -> fidl::Result<()> {
5327            decoder.debug_check_bounds::<Self>(offset);
5328            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5329                None => return Err(fidl::Error::NotNullable),
5330                Some(len) => len,
5331            };
5332            // Calling decoder.out_of_line_offset(0) is not allowed.
5333            if len == 0 {
5334                return Ok(());
5335            };
5336            depth.increment()?;
5337            let envelope_size = 8;
5338            let bytes_len = len * envelope_size;
5339            let offset = decoder.out_of_line_offset(bytes_len)?;
5340            // Decode the envelope for each type.
5341            let mut _next_ordinal_to_read = 0;
5342            let mut next_offset = offset;
5343            let end_offset = offset + bytes_len;
5344            _next_ordinal_to_read += 1;
5345            if next_offset >= end_offset {
5346                return Ok(());
5347            }
5348
5349            // Decode unknown envelopes for gaps in ordinals.
5350            while _next_ordinal_to_read < 1 {
5351                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5352                _next_ordinal_to_read += 1;
5353                next_offset += envelope_size;
5354            }
5355
5356            let next_out_of_line = decoder.next_out_of_line();
5357            let handles_before = decoder.remaining_handles();
5358            if let Some((inlined, num_bytes, num_handles)) =
5359                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5360            {
5361                let member_inline_size =
5362                    <MldVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5363                if inlined != (member_inline_size <= 4) {
5364                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5365                }
5366                let inner_offset;
5367                let mut inner_depth = depth.clone();
5368                if inlined {
5369                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5370                    inner_offset = next_offset;
5371                } else {
5372                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5373                    inner_depth.increment()?;
5374                }
5375                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(MldVersion, D));
5376                fidl::decode!(MldVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
5377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5378                {
5379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5380                }
5381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5383                }
5384            }
5385
5386            next_offset += envelope_size;
5387
5388            // Decode the remaining unknown envelopes.
5389            while next_offset < end_offset {
5390                _next_ordinal_to_read += 1;
5391                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5392                next_offset += envelope_size;
5393            }
5394
5395            Ok(())
5396        }
5397    }
5398
5399    impl NdpConfiguration {
5400        #[inline(always)]
5401        fn max_ordinal_present(&self) -> u64 {
5402            if let Some(_) = self.router_solicitations {
5403                return 5;
5404            }
5405            if let Some(_) = self.route_discovery {
5406                return 4;
5407            }
5408            if let Some(_) = self.slaac {
5409                return 3;
5410            }
5411            if let Some(_) = self.dad {
5412                return 2;
5413            }
5414            if let Some(_) = self.nud {
5415                return 1;
5416            }
5417            0
5418        }
5419    }
5420
5421    impl fidl::encoding::ValueTypeMarker for NdpConfiguration {
5422        type Borrowed<'a> = &'a Self;
5423        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5424            value
5425        }
5426    }
5427
5428    unsafe impl fidl::encoding::TypeMarker for NdpConfiguration {
5429        type Owned = Self;
5430
5431        #[inline(always)]
5432        fn inline_align(_context: fidl::encoding::Context) -> usize {
5433            8
5434        }
5435
5436        #[inline(always)]
5437        fn inline_size(_context: fidl::encoding::Context) -> usize {
5438            16
5439        }
5440    }
5441
5442    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NdpConfiguration, D>
5443        for &NdpConfiguration
5444    {
5445        unsafe fn encode(
5446            self,
5447            encoder: &mut fidl::encoding::Encoder<'_, D>,
5448            offset: usize,
5449            mut depth: fidl::encoding::Depth,
5450        ) -> fidl::Result<()> {
5451            encoder.debug_check_bounds::<NdpConfiguration>(offset);
5452            // Vector header
5453            let max_ordinal: u64 = self.max_ordinal_present();
5454            encoder.write_num(max_ordinal, offset);
5455            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5456            // Calling encoder.out_of_line_offset(0) is not allowed.
5457            if max_ordinal == 0 {
5458                return Ok(());
5459            }
5460            depth.increment()?;
5461            let envelope_size = 8;
5462            let bytes_len = max_ordinal as usize * envelope_size;
5463            #[allow(unused_variables)]
5464            let offset = encoder.out_of_line_offset(bytes_len);
5465            let mut _prev_end_offset: usize = 0;
5466            if 1 > max_ordinal {
5467                return Ok(());
5468            }
5469
5470            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5471            // are envelope_size bytes.
5472            let cur_offset: usize = (1 - 1) * envelope_size;
5473
5474            // Zero reserved fields.
5475            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5476
5477            // Safety:
5478            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5479            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5480            //   envelope_size bytes, there is always sufficient room.
5481            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
5482                self.nud
5483                    .as_ref()
5484                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5485                encoder,
5486                offset + cur_offset,
5487                depth,
5488            )?;
5489
5490            _prev_end_offset = cur_offset + envelope_size;
5491            if 2 > max_ordinal {
5492                return Ok(());
5493            }
5494
5495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5496            // are envelope_size bytes.
5497            let cur_offset: usize = (2 - 1) * envelope_size;
5498
5499            // Zero reserved fields.
5500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5501
5502            // Safety:
5503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5505            //   envelope_size bytes, there is always sufficient room.
5506            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
5507                self.dad
5508                    .as_ref()
5509                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5510                encoder,
5511                offset + cur_offset,
5512                depth,
5513            )?;
5514
5515            _prev_end_offset = cur_offset + envelope_size;
5516            if 3 > max_ordinal {
5517                return Ok(());
5518            }
5519
5520            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5521            // are envelope_size bytes.
5522            let cur_offset: usize = (3 - 1) * envelope_size;
5523
5524            // Zero reserved fields.
5525            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5526
5527            // Safety:
5528            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5529            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5530            //   envelope_size bytes, there is always sufficient room.
5531            fidl::encoding::encode_in_envelope_optional::<SlaacConfiguration, D>(
5532                self.slaac
5533                    .as_ref()
5534                    .map(<SlaacConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5535                encoder,
5536                offset + cur_offset,
5537                depth,
5538            )?;
5539
5540            _prev_end_offset = cur_offset + envelope_size;
5541            if 4 > max_ordinal {
5542                return Ok(());
5543            }
5544
5545            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5546            // are envelope_size bytes.
5547            let cur_offset: usize = (4 - 1) * envelope_size;
5548
5549            // Zero reserved fields.
5550            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5551
5552            // Safety:
5553            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5554            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5555            //   envelope_size bytes, there is always sufficient room.
5556            fidl::encoding::encode_in_envelope_optional::<RouteDiscoveryConfiguration, D>(
5557                self.route_discovery
5558                    .as_ref()
5559                    .map(<RouteDiscoveryConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5560                encoder,
5561                offset + cur_offset,
5562                depth,
5563            )?;
5564
5565            _prev_end_offset = cur_offset + envelope_size;
5566            if 5 > max_ordinal {
5567                return Ok(());
5568            }
5569
5570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5571            // are envelope_size bytes.
5572            let cur_offset: usize = (5 - 1) * envelope_size;
5573
5574            // Zero reserved fields.
5575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5576
5577            // Safety:
5578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5580            //   envelope_size bytes, there is always sufficient room.
5581            fidl::encoding::encode_in_envelope_optional::<RouterSolicitationConfiguration, D>(
5582                self.router_solicitations.as_ref().map(
5583                    <RouterSolicitationConfiguration as fidl::encoding::ValueTypeMarker>::borrow,
5584                ),
5585                encoder,
5586                offset + cur_offset,
5587                depth,
5588            )?;
5589
5590            _prev_end_offset = cur_offset + envelope_size;
5591
5592            Ok(())
5593        }
5594    }
5595
5596    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NdpConfiguration {
5597        #[inline(always)]
5598        fn new_empty() -> Self {
5599            Self::default()
5600        }
5601
5602        unsafe fn decode(
5603            &mut self,
5604            decoder: &mut fidl::encoding::Decoder<'_, D>,
5605            offset: usize,
5606            mut depth: fidl::encoding::Depth,
5607        ) -> fidl::Result<()> {
5608            decoder.debug_check_bounds::<Self>(offset);
5609            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5610                None => return Err(fidl::Error::NotNullable),
5611                Some(len) => len,
5612            };
5613            // Calling decoder.out_of_line_offset(0) is not allowed.
5614            if len == 0 {
5615                return Ok(());
5616            };
5617            depth.increment()?;
5618            let envelope_size = 8;
5619            let bytes_len = len * envelope_size;
5620            let offset = decoder.out_of_line_offset(bytes_len)?;
5621            // Decode the envelope for each type.
5622            let mut _next_ordinal_to_read = 0;
5623            let mut next_offset = offset;
5624            let end_offset = offset + bytes_len;
5625            _next_ordinal_to_read += 1;
5626            if next_offset >= end_offset {
5627                return Ok(());
5628            }
5629
5630            // Decode unknown envelopes for gaps in ordinals.
5631            while _next_ordinal_to_read < 1 {
5632                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5633                _next_ordinal_to_read += 1;
5634                next_offset += envelope_size;
5635            }
5636
5637            let next_out_of_line = decoder.next_out_of_line();
5638            let handles_before = decoder.remaining_handles();
5639            if let Some((inlined, num_bytes, num_handles)) =
5640                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5641            {
5642                let member_inline_size =
5643                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5644                if inlined != (member_inline_size <= 4) {
5645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5646                }
5647                let inner_offset;
5648                let mut inner_depth = depth.clone();
5649                if inlined {
5650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5651                    inner_offset = next_offset;
5652                } else {
5653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5654                    inner_depth.increment()?;
5655                }
5656                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
5657                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5658                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5659                {
5660                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5661                }
5662                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5663                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5664                }
5665            }
5666
5667            next_offset += envelope_size;
5668            _next_ordinal_to_read += 1;
5669            if next_offset >= end_offset {
5670                return Ok(());
5671            }
5672
5673            // Decode unknown envelopes for gaps in ordinals.
5674            while _next_ordinal_to_read < 2 {
5675                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5676                _next_ordinal_to_read += 1;
5677                next_offset += envelope_size;
5678            }
5679
5680            let next_out_of_line = decoder.next_out_of_line();
5681            let handles_before = decoder.remaining_handles();
5682            if let Some((inlined, num_bytes, num_handles)) =
5683                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5684            {
5685                let member_inline_size =
5686                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5687                if inlined != (member_inline_size <= 4) {
5688                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5689                }
5690                let inner_offset;
5691                let mut inner_depth = depth.clone();
5692                if inlined {
5693                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5694                    inner_offset = next_offset;
5695                } else {
5696                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5697                    inner_depth.increment()?;
5698                }
5699                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
5700                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5702                {
5703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5704                }
5705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5707                }
5708            }
5709
5710            next_offset += envelope_size;
5711            _next_ordinal_to_read += 1;
5712            if next_offset >= end_offset {
5713                return Ok(());
5714            }
5715
5716            // Decode unknown envelopes for gaps in ordinals.
5717            while _next_ordinal_to_read < 3 {
5718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5719                _next_ordinal_to_read += 1;
5720                next_offset += envelope_size;
5721            }
5722
5723            let next_out_of_line = decoder.next_out_of_line();
5724            let handles_before = decoder.remaining_handles();
5725            if let Some((inlined, num_bytes, num_handles)) =
5726                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5727            {
5728                let member_inline_size =
5729                    <SlaacConfiguration as fidl::encoding::TypeMarker>::inline_size(
5730                        decoder.context,
5731                    );
5732                if inlined != (member_inline_size <= 4) {
5733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5734                }
5735                let inner_offset;
5736                let mut inner_depth = depth.clone();
5737                if inlined {
5738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5739                    inner_offset = next_offset;
5740                } else {
5741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5742                    inner_depth.increment()?;
5743                }
5744                let val_ref =
5745                    self.slaac.get_or_insert_with(|| fidl::new_empty!(SlaacConfiguration, D));
5746                fidl::decode!(SlaacConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5748                {
5749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5750                }
5751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5753                }
5754            }
5755
5756            next_offset += envelope_size;
5757            _next_ordinal_to_read += 1;
5758            if next_offset >= end_offset {
5759                return Ok(());
5760            }
5761
5762            // Decode unknown envelopes for gaps in ordinals.
5763            while _next_ordinal_to_read < 4 {
5764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5765                _next_ordinal_to_read += 1;
5766                next_offset += envelope_size;
5767            }
5768
5769            let next_out_of_line = decoder.next_out_of_line();
5770            let handles_before = decoder.remaining_handles();
5771            if let Some((inlined, num_bytes, num_handles)) =
5772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5773            {
5774                let member_inline_size =
5775                    <RouteDiscoveryConfiguration as fidl::encoding::TypeMarker>::inline_size(
5776                        decoder.context,
5777                    );
5778                if inlined != (member_inline_size <= 4) {
5779                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5780                }
5781                let inner_offset;
5782                let mut inner_depth = depth.clone();
5783                if inlined {
5784                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5785                    inner_offset = next_offset;
5786                } else {
5787                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5788                    inner_depth.increment()?;
5789                }
5790                let val_ref = self
5791                    .route_discovery
5792                    .get_or_insert_with(|| fidl::new_empty!(RouteDiscoveryConfiguration, D));
5793                fidl::decode!(
5794                    RouteDiscoveryConfiguration,
5795                    D,
5796                    val_ref,
5797                    decoder,
5798                    inner_offset,
5799                    inner_depth
5800                )?;
5801                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5802                {
5803                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5804                }
5805                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5806                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5807                }
5808            }
5809
5810            next_offset += envelope_size;
5811            _next_ordinal_to_read += 1;
5812            if next_offset >= end_offset {
5813                return Ok(());
5814            }
5815
5816            // Decode unknown envelopes for gaps in ordinals.
5817            while _next_ordinal_to_read < 5 {
5818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5819                _next_ordinal_to_read += 1;
5820                next_offset += envelope_size;
5821            }
5822
5823            let next_out_of_line = decoder.next_out_of_line();
5824            let handles_before = decoder.remaining_handles();
5825            if let Some((inlined, num_bytes, num_handles)) =
5826                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5827            {
5828                let member_inline_size =
5829                    <RouterSolicitationConfiguration as fidl::encoding::TypeMarker>::inline_size(
5830                        decoder.context,
5831                    );
5832                if inlined != (member_inline_size <= 4) {
5833                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5834                }
5835                let inner_offset;
5836                let mut inner_depth = depth.clone();
5837                if inlined {
5838                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5839                    inner_offset = next_offset;
5840                } else {
5841                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5842                    inner_depth.increment()?;
5843                }
5844                let val_ref = self
5845                    .router_solicitations
5846                    .get_or_insert_with(|| fidl::new_empty!(RouterSolicitationConfiguration, D));
5847                fidl::decode!(
5848                    RouterSolicitationConfiguration,
5849                    D,
5850                    val_ref,
5851                    decoder,
5852                    inner_offset,
5853                    inner_depth
5854                )?;
5855                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5856                {
5857                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5858                }
5859                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5860                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5861                }
5862            }
5863
5864            next_offset += envelope_size;
5865
5866            // Decode the remaining unknown envelopes.
5867            while next_offset < end_offset {
5868                _next_ordinal_to_read += 1;
5869                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5870                next_offset += envelope_size;
5871            }
5872
5873            Ok(())
5874        }
5875    }
5876
5877    impl NudConfiguration {
5878        #[inline(always)]
5879        fn max_ordinal_present(&self) -> u64 {
5880            if let Some(_) = self.retrans_timer {
5881                return 4;
5882            }
5883            if let Some(_) = self.base_reachable_time {
5884                return 3;
5885            }
5886            if let Some(_) = self.max_unicast_solicitations {
5887                return 2;
5888            }
5889            if let Some(_) = self.max_multicast_solicitations {
5890                return 1;
5891            }
5892            0
5893        }
5894    }
5895
5896    impl fidl::encoding::ValueTypeMarker for NudConfiguration {
5897        type Borrowed<'a> = &'a Self;
5898        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5899            value
5900        }
5901    }
5902
5903    unsafe impl fidl::encoding::TypeMarker for NudConfiguration {
5904        type Owned = Self;
5905
5906        #[inline(always)]
5907        fn inline_align(_context: fidl::encoding::Context) -> usize {
5908            8
5909        }
5910
5911        #[inline(always)]
5912        fn inline_size(_context: fidl::encoding::Context) -> usize {
5913            16
5914        }
5915    }
5916
5917    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NudConfiguration, D>
5918        for &NudConfiguration
5919    {
5920        unsafe fn encode(
5921            self,
5922            encoder: &mut fidl::encoding::Encoder<'_, D>,
5923            offset: usize,
5924            mut depth: fidl::encoding::Depth,
5925        ) -> fidl::Result<()> {
5926            encoder.debug_check_bounds::<NudConfiguration>(offset);
5927            // Vector header
5928            let max_ordinal: u64 = self.max_ordinal_present();
5929            encoder.write_num(max_ordinal, offset);
5930            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5931            // Calling encoder.out_of_line_offset(0) is not allowed.
5932            if max_ordinal == 0 {
5933                return Ok(());
5934            }
5935            depth.increment()?;
5936            let envelope_size = 8;
5937            let bytes_len = max_ordinal as usize * envelope_size;
5938            #[allow(unused_variables)]
5939            let offset = encoder.out_of_line_offset(bytes_len);
5940            let mut _prev_end_offset: usize = 0;
5941            if 1 > max_ordinal {
5942                return Ok(());
5943            }
5944
5945            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5946            // are envelope_size bytes.
5947            let cur_offset: usize = (1 - 1) * envelope_size;
5948
5949            // Zero reserved fields.
5950            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5951
5952            // Safety:
5953            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5954            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5955            //   envelope_size bytes, there is always sufficient room.
5956            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5957                self.max_multicast_solicitations
5958                    .as_ref()
5959                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5960                encoder,
5961                offset + cur_offset,
5962                depth,
5963            )?;
5964
5965            _prev_end_offset = cur_offset + envelope_size;
5966            if 2 > max_ordinal {
5967                return Ok(());
5968            }
5969
5970            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5971            // are envelope_size bytes.
5972            let cur_offset: usize = (2 - 1) * envelope_size;
5973
5974            // Zero reserved fields.
5975            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5976
5977            // Safety:
5978            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5979            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5980            //   envelope_size bytes, there is always sufficient room.
5981            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5982                self.max_unicast_solicitations
5983                    .as_ref()
5984                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5985                encoder,
5986                offset + cur_offset,
5987                depth,
5988            )?;
5989
5990            _prev_end_offset = cur_offset + envelope_size;
5991            if 3 > max_ordinal {
5992                return Ok(());
5993            }
5994
5995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5996            // are envelope_size bytes.
5997            let cur_offset: usize = (3 - 1) * envelope_size;
5998
5999            // Zero reserved fields.
6000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6001
6002            // Safety:
6003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6005            //   envelope_size bytes, there is always sufficient room.
6006            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6007                self.base_reachable_time
6008                    .as_ref()
6009                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6010                encoder,
6011                offset + cur_offset,
6012                depth,
6013            )?;
6014
6015            _prev_end_offset = cur_offset + envelope_size;
6016            if 4 > max_ordinal {
6017                return Ok(());
6018            }
6019
6020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6021            // are envelope_size bytes.
6022            let cur_offset: usize = (4 - 1) * envelope_size;
6023
6024            // Zero reserved fields.
6025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6026
6027            // Safety:
6028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6030            //   envelope_size bytes, there is always sufficient room.
6031            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6032                self.retrans_timer.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6033                encoder,
6034                offset + cur_offset,
6035                depth,
6036            )?;
6037
6038            _prev_end_offset = cur_offset + envelope_size;
6039
6040            Ok(())
6041        }
6042    }
6043
6044    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NudConfiguration {
6045        #[inline(always)]
6046        fn new_empty() -> Self {
6047            Self::default()
6048        }
6049
6050        unsafe fn decode(
6051            &mut self,
6052            decoder: &mut fidl::encoding::Decoder<'_, D>,
6053            offset: usize,
6054            mut depth: fidl::encoding::Depth,
6055        ) -> fidl::Result<()> {
6056            decoder.debug_check_bounds::<Self>(offset);
6057            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6058                None => return Err(fidl::Error::NotNullable),
6059                Some(len) => len,
6060            };
6061            // Calling decoder.out_of_line_offset(0) is not allowed.
6062            if len == 0 {
6063                return Ok(());
6064            };
6065            depth.increment()?;
6066            let envelope_size = 8;
6067            let bytes_len = len * envelope_size;
6068            let offset = decoder.out_of_line_offset(bytes_len)?;
6069            // Decode the envelope for each type.
6070            let mut _next_ordinal_to_read = 0;
6071            let mut next_offset = offset;
6072            let end_offset = offset + bytes_len;
6073            _next_ordinal_to_read += 1;
6074            if next_offset >= end_offset {
6075                return Ok(());
6076            }
6077
6078            // Decode unknown envelopes for gaps in ordinals.
6079            while _next_ordinal_to_read < 1 {
6080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6081                _next_ordinal_to_read += 1;
6082                next_offset += envelope_size;
6083            }
6084
6085            let next_out_of_line = decoder.next_out_of_line();
6086            let handles_before = decoder.remaining_handles();
6087            if let Some((inlined, num_bytes, num_handles)) =
6088                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6089            {
6090                let member_inline_size =
6091                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6092                if inlined != (member_inline_size <= 4) {
6093                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6094                }
6095                let inner_offset;
6096                let mut inner_depth = depth.clone();
6097                if inlined {
6098                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6099                    inner_offset = next_offset;
6100                } else {
6101                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6102                    inner_depth.increment()?;
6103                }
6104                let val_ref = self
6105                    .max_multicast_solicitations
6106                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
6107                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6109                {
6110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6111                }
6112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6114                }
6115            }
6116
6117            next_offset += envelope_size;
6118            _next_ordinal_to_read += 1;
6119            if next_offset >= end_offset {
6120                return Ok(());
6121            }
6122
6123            // Decode unknown envelopes for gaps in ordinals.
6124            while _next_ordinal_to_read < 2 {
6125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6126                _next_ordinal_to_read += 1;
6127                next_offset += envelope_size;
6128            }
6129
6130            let next_out_of_line = decoder.next_out_of_line();
6131            let handles_before = decoder.remaining_handles();
6132            if let Some((inlined, num_bytes, num_handles)) =
6133                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6134            {
6135                let member_inline_size =
6136                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6137                if inlined != (member_inline_size <= 4) {
6138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6139                }
6140                let inner_offset;
6141                let mut inner_depth = depth.clone();
6142                if inlined {
6143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6144                    inner_offset = next_offset;
6145                } else {
6146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6147                    inner_depth.increment()?;
6148                }
6149                let val_ref =
6150                    self.max_unicast_solicitations.get_or_insert_with(|| fidl::new_empty!(u16, D));
6151                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6153                {
6154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6155                }
6156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6158                }
6159            }
6160
6161            next_offset += envelope_size;
6162            _next_ordinal_to_read += 1;
6163            if next_offset >= end_offset {
6164                return Ok(());
6165            }
6166
6167            // Decode unknown envelopes for gaps in ordinals.
6168            while _next_ordinal_to_read < 3 {
6169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6170                _next_ordinal_to_read += 1;
6171                next_offset += envelope_size;
6172            }
6173
6174            let next_out_of_line = decoder.next_out_of_line();
6175            let handles_before = decoder.remaining_handles();
6176            if let Some((inlined, num_bytes, num_handles)) =
6177                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6178            {
6179                let member_inline_size =
6180                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6181                if inlined != (member_inline_size <= 4) {
6182                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6183                }
6184                let inner_offset;
6185                let mut inner_depth = depth.clone();
6186                if inlined {
6187                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6188                    inner_offset = next_offset;
6189                } else {
6190                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6191                    inner_depth.increment()?;
6192                }
6193                let val_ref =
6194                    self.base_reachable_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
6195                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6196                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6197                {
6198                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6199                }
6200                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6201                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6202                }
6203            }
6204
6205            next_offset += envelope_size;
6206            _next_ordinal_to_read += 1;
6207            if next_offset >= end_offset {
6208                return Ok(());
6209            }
6210
6211            // Decode unknown envelopes for gaps in ordinals.
6212            while _next_ordinal_to_read < 4 {
6213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6214                _next_ordinal_to_read += 1;
6215                next_offset += envelope_size;
6216            }
6217
6218            let next_out_of_line = decoder.next_out_of_line();
6219            let handles_before = decoder.remaining_handles();
6220            if let Some((inlined, num_bytes, num_handles)) =
6221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6222            {
6223                let member_inline_size =
6224                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6225                if inlined != (member_inline_size <= 4) {
6226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6227                }
6228                let inner_offset;
6229                let mut inner_depth = depth.clone();
6230                if inlined {
6231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6232                    inner_offset = next_offset;
6233                } else {
6234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6235                    inner_depth.increment()?;
6236                }
6237                let val_ref = self.retrans_timer.get_or_insert_with(|| fidl::new_empty!(i64, D));
6238                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6240                {
6241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6242                }
6243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6245                }
6246            }
6247
6248            next_offset += envelope_size;
6249
6250            // Decode the remaining unknown envelopes.
6251            while next_offset < end_offset {
6252                _next_ordinal_to_read += 1;
6253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6254                next_offset += envelope_size;
6255            }
6256
6257            Ok(())
6258        }
6259    }
6260
6261    impl RouteDiscoveryConfiguration {
6262        #[inline(always)]
6263        fn max_ordinal_present(&self) -> u64 {
6264            if let Some(_) = self.allow_default_route {
6265                return 1;
6266            }
6267            0
6268        }
6269    }
6270
6271    impl fidl::encoding::ValueTypeMarker for RouteDiscoveryConfiguration {
6272        type Borrowed<'a> = &'a Self;
6273        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6274            value
6275        }
6276    }
6277
6278    unsafe impl fidl::encoding::TypeMarker for RouteDiscoveryConfiguration {
6279        type Owned = Self;
6280
6281        #[inline(always)]
6282        fn inline_align(_context: fidl::encoding::Context) -> usize {
6283            8
6284        }
6285
6286        #[inline(always)]
6287        fn inline_size(_context: fidl::encoding::Context) -> usize {
6288            16
6289        }
6290    }
6291
6292    unsafe impl<D: fidl::encoding::ResourceDialect>
6293        fidl::encoding::Encode<RouteDiscoveryConfiguration, D> for &RouteDiscoveryConfiguration
6294    {
6295        unsafe fn encode(
6296            self,
6297            encoder: &mut fidl::encoding::Encoder<'_, D>,
6298            offset: usize,
6299            mut depth: fidl::encoding::Depth,
6300        ) -> fidl::Result<()> {
6301            encoder.debug_check_bounds::<RouteDiscoveryConfiguration>(offset);
6302            // Vector header
6303            let max_ordinal: u64 = self.max_ordinal_present();
6304            encoder.write_num(max_ordinal, offset);
6305            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6306            // Calling encoder.out_of_line_offset(0) is not allowed.
6307            if max_ordinal == 0 {
6308                return Ok(());
6309            }
6310            depth.increment()?;
6311            let envelope_size = 8;
6312            let bytes_len = max_ordinal as usize * envelope_size;
6313            #[allow(unused_variables)]
6314            let offset = encoder.out_of_line_offset(bytes_len);
6315            let mut _prev_end_offset: usize = 0;
6316            if 1 > max_ordinal {
6317                return Ok(());
6318            }
6319
6320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6321            // are envelope_size bytes.
6322            let cur_offset: usize = (1 - 1) * envelope_size;
6323
6324            // Zero reserved fields.
6325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6326
6327            // Safety:
6328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6330            //   envelope_size bytes, there is always sufficient room.
6331            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6332                self.allow_default_route
6333                    .as_ref()
6334                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6335                encoder,
6336                offset + cur_offset,
6337                depth,
6338            )?;
6339
6340            _prev_end_offset = cur_offset + envelope_size;
6341
6342            Ok(())
6343        }
6344    }
6345
6346    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6347        for RouteDiscoveryConfiguration
6348    {
6349        #[inline(always)]
6350        fn new_empty() -> Self {
6351            Self::default()
6352        }
6353
6354        unsafe fn decode(
6355            &mut self,
6356            decoder: &mut fidl::encoding::Decoder<'_, D>,
6357            offset: usize,
6358            mut depth: fidl::encoding::Depth,
6359        ) -> fidl::Result<()> {
6360            decoder.debug_check_bounds::<Self>(offset);
6361            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6362                None => return Err(fidl::Error::NotNullable),
6363                Some(len) => len,
6364            };
6365            // Calling decoder.out_of_line_offset(0) is not allowed.
6366            if len == 0 {
6367                return Ok(());
6368            };
6369            depth.increment()?;
6370            let envelope_size = 8;
6371            let bytes_len = len * envelope_size;
6372            let offset = decoder.out_of_line_offset(bytes_len)?;
6373            // Decode the envelope for each type.
6374            let mut _next_ordinal_to_read = 0;
6375            let mut next_offset = offset;
6376            let end_offset = offset + bytes_len;
6377            _next_ordinal_to_read += 1;
6378            if next_offset >= end_offset {
6379                return Ok(());
6380            }
6381
6382            // Decode unknown envelopes for gaps in ordinals.
6383            while _next_ordinal_to_read < 1 {
6384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6385                _next_ordinal_to_read += 1;
6386                next_offset += envelope_size;
6387            }
6388
6389            let next_out_of_line = decoder.next_out_of_line();
6390            let handles_before = decoder.remaining_handles();
6391            if let Some((inlined, num_bytes, num_handles)) =
6392                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6393            {
6394                let member_inline_size =
6395                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6396                if inlined != (member_inline_size <= 4) {
6397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6398                }
6399                let inner_offset;
6400                let mut inner_depth = depth.clone();
6401                if inlined {
6402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6403                    inner_offset = next_offset;
6404                } else {
6405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6406                    inner_depth.increment()?;
6407                }
6408                let val_ref =
6409                    self.allow_default_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
6410                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6412                {
6413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6414                }
6415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6417                }
6418            }
6419
6420            next_offset += envelope_size;
6421
6422            // Decode the remaining unknown envelopes.
6423            while next_offset < end_offset {
6424                _next_ordinal_to_read += 1;
6425                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6426                next_offset += envelope_size;
6427            }
6428
6429            Ok(())
6430        }
6431    }
6432
6433    impl RouterSolicitationConfiguration {
6434        #[inline(always)]
6435        fn max_ordinal_present(&self) -> u64 {
6436            if let Some(_) = self.max {
6437                return 1;
6438            }
6439            0
6440        }
6441    }
6442
6443    impl fidl::encoding::ValueTypeMarker for RouterSolicitationConfiguration {
6444        type Borrowed<'a> = &'a Self;
6445        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6446            value
6447        }
6448    }
6449
6450    unsafe impl fidl::encoding::TypeMarker for RouterSolicitationConfiguration {
6451        type Owned = Self;
6452
6453        #[inline(always)]
6454        fn inline_align(_context: fidl::encoding::Context) -> usize {
6455            8
6456        }
6457
6458        #[inline(always)]
6459        fn inline_size(_context: fidl::encoding::Context) -> usize {
6460            16
6461        }
6462    }
6463
6464    unsafe impl<D: fidl::encoding::ResourceDialect>
6465        fidl::encoding::Encode<RouterSolicitationConfiguration, D>
6466        for &RouterSolicitationConfiguration
6467    {
6468        unsafe fn encode(
6469            self,
6470            encoder: &mut fidl::encoding::Encoder<'_, D>,
6471            offset: usize,
6472            mut depth: fidl::encoding::Depth,
6473        ) -> fidl::Result<()> {
6474            encoder.debug_check_bounds::<RouterSolicitationConfiguration>(offset);
6475            // Vector header
6476            let max_ordinal: u64 = self.max_ordinal_present();
6477            encoder.write_num(max_ordinal, offset);
6478            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6479            // Calling encoder.out_of_line_offset(0) is not allowed.
6480            if max_ordinal == 0 {
6481                return Ok(());
6482            }
6483            depth.increment()?;
6484            let envelope_size = 8;
6485            let bytes_len = max_ordinal as usize * envelope_size;
6486            #[allow(unused_variables)]
6487            let offset = encoder.out_of_line_offset(bytes_len);
6488            let mut _prev_end_offset: usize = 0;
6489            if 1 > max_ordinal {
6490                return Ok(());
6491            }
6492
6493            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6494            // are envelope_size bytes.
6495            let cur_offset: usize = (1 - 1) * envelope_size;
6496
6497            // Zero reserved fields.
6498            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6499
6500            // Safety:
6501            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6502            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6503            //   envelope_size bytes, there is always sufficient room.
6504            fidl::encoding::encode_in_envelope_optional::<u8, D>(
6505                self.max.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
6506                encoder,
6507                offset + cur_offset,
6508                depth,
6509            )?;
6510
6511            _prev_end_offset = cur_offset + envelope_size;
6512
6513            Ok(())
6514        }
6515    }
6516
6517    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6518        for RouterSolicitationConfiguration
6519    {
6520        #[inline(always)]
6521        fn new_empty() -> Self {
6522            Self::default()
6523        }
6524
6525        unsafe fn decode(
6526            &mut self,
6527            decoder: &mut fidl::encoding::Decoder<'_, D>,
6528            offset: usize,
6529            mut depth: fidl::encoding::Depth,
6530        ) -> fidl::Result<()> {
6531            decoder.debug_check_bounds::<Self>(offset);
6532            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6533                None => return Err(fidl::Error::NotNullable),
6534                Some(len) => len,
6535            };
6536            // Calling decoder.out_of_line_offset(0) is not allowed.
6537            if len == 0 {
6538                return Ok(());
6539            };
6540            depth.increment()?;
6541            let envelope_size = 8;
6542            let bytes_len = len * envelope_size;
6543            let offset = decoder.out_of_line_offset(bytes_len)?;
6544            // Decode the envelope for each type.
6545            let mut _next_ordinal_to_read = 0;
6546            let mut next_offset = offset;
6547            let end_offset = offset + bytes_len;
6548            _next_ordinal_to_read += 1;
6549            if next_offset >= end_offset {
6550                return Ok(());
6551            }
6552
6553            // Decode unknown envelopes for gaps in ordinals.
6554            while _next_ordinal_to_read < 1 {
6555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6556                _next_ordinal_to_read += 1;
6557                next_offset += envelope_size;
6558            }
6559
6560            let next_out_of_line = decoder.next_out_of_line();
6561            let handles_before = decoder.remaining_handles();
6562            if let Some((inlined, num_bytes, num_handles)) =
6563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6564            {
6565                let member_inline_size =
6566                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6567                if inlined != (member_inline_size <= 4) {
6568                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6569                }
6570                let inner_offset;
6571                let mut inner_depth = depth.clone();
6572                if inlined {
6573                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6574                    inner_offset = next_offset;
6575                } else {
6576                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6577                    inner_depth.increment()?;
6578                }
6579                let val_ref = self.max.get_or_insert_with(|| fidl::new_empty!(u8, D));
6580                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
6581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6582                {
6583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6584                }
6585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6587                }
6588            }
6589
6590            next_offset += envelope_size;
6591
6592            // Decode the remaining unknown envelopes.
6593            while next_offset < end_offset {
6594                _next_ordinal_to_read += 1;
6595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6596                next_offset += envelope_size;
6597            }
6598
6599            Ok(())
6600        }
6601    }
6602
6603    impl SlaacConfiguration {
6604        #[inline(always)]
6605        fn max_ordinal_present(&self) -> u64 {
6606            if let Some(_) = self.temporary_address {
6607                return 1;
6608            }
6609            0
6610        }
6611    }
6612
6613    impl fidl::encoding::ValueTypeMarker for SlaacConfiguration {
6614        type Borrowed<'a> = &'a Self;
6615        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6616            value
6617        }
6618    }
6619
6620    unsafe impl fidl::encoding::TypeMarker for SlaacConfiguration {
6621        type Owned = Self;
6622
6623        #[inline(always)]
6624        fn inline_align(_context: fidl::encoding::Context) -> usize {
6625            8
6626        }
6627
6628        #[inline(always)]
6629        fn inline_size(_context: fidl::encoding::Context) -> usize {
6630            16
6631        }
6632    }
6633
6634    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SlaacConfiguration, D>
6635        for &SlaacConfiguration
6636    {
6637        unsafe fn encode(
6638            self,
6639            encoder: &mut fidl::encoding::Encoder<'_, D>,
6640            offset: usize,
6641            mut depth: fidl::encoding::Depth,
6642        ) -> fidl::Result<()> {
6643            encoder.debug_check_bounds::<SlaacConfiguration>(offset);
6644            // Vector header
6645            let max_ordinal: u64 = self.max_ordinal_present();
6646            encoder.write_num(max_ordinal, offset);
6647            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6648            // Calling encoder.out_of_line_offset(0) is not allowed.
6649            if max_ordinal == 0 {
6650                return Ok(());
6651            }
6652            depth.increment()?;
6653            let envelope_size = 8;
6654            let bytes_len = max_ordinal as usize * envelope_size;
6655            #[allow(unused_variables)]
6656            let offset = encoder.out_of_line_offset(bytes_len);
6657            let mut _prev_end_offset: usize = 0;
6658            if 1 > max_ordinal {
6659                return Ok(());
6660            }
6661
6662            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6663            // are envelope_size bytes.
6664            let cur_offset: usize = (1 - 1) * envelope_size;
6665
6666            // Zero reserved fields.
6667            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6668
6669            // Safety:
6670            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6671            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6672            //   envelope_size bytes, there is always sufficient room.
6673            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6674                self.temporary_address
6675                    .as_ref()
6676                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6677                encoder,
6678                offset + cur_offset,
6679                depth,
6680            )?;
6681
6682            _prev_end_offset = cur_offset + envelope_size;
6683
6684            Ok(())
6685        }
6686    }
6687
6688    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SlaacConfiguration {
6689        #[inline(always)]
6690        fn new_empty() -> Self {
6691            Self::default()
6692        }
6693
6694        unsafe fn decode(
6695            &mut self,
6696            decoder: &mut fidl::encoding::Decoder<'_, D>,
6697            offset: usize,
6698            mut depth: fidl::encoding::Depth,
6699        ) -> fidl::Result<()> {
6700            decoder.debug_check_bounds::<Self>(offset);
6701            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6702                None => return Err(fidl::Error::NotNullable),
6703                Some(len) => len,
6704            };
6705            // Calling decoder.out_of_line_offset(0) is not allowed.
6706            if len == 0 {
6707                return Ok(());
6708            };
6709            depth.increment()?;
6710            let envelope_size = 8;
6711            let bytes_len = len * envelope_size;
6712            let offset = decoder.out_of_line_offset(bytes_len)?;
6713            // Decode the envelope for each type.
6714            let mut _next_ordinal_to_read = 0;
6715            let mut next_offset = offset;
6716            let end_offset = offset + bytes_len;
6717            _next_ordinal_to_read += 1;
6718            if next_offset >= end_offset {
6719                return Ok(());
6720            }
6721
6722            // Decode unknown envelopes for gaps in ordinals.
6723            while _next_ordinal_to_read < 1 {
6724                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6725                _next_ordinal_to_read += 1;
6726                next_offset += envelope_size;
6727            }
6728
6729            let next_out_of_line = decoder.next_out_of_line();
6730            let handles_before = decoder.remaining_handles();
6731            if let Some((inlined, num_bytes, num_handles)) =
6732                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6733            {
6734                let member_inline_size =
6735                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6736                if inlined != (member_inline_size <= 4) {
6737                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6738                }
6739                let inner_offset;
6740                let mut inner_depth = depth.clone();
6741                if inlined {
6742                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6743                    inner_offset = next_offset;
6744                } else {
6745                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6746                    inner_depth.increment()?;
6747                }
6748                let val_ref =
6749                    self.temporary_address.get_or_insert_with(|| fidl::new_empty!(bool, D));
6750                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6752                {
6753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6754                }
6755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6757                }
6758            }
6759
6760            next_offset += envelope_size;
6761
6762            // Decode the remaining unknown envelopes.
6763            while next_offset < end_offset {
6764                _next_ordinal_to_read += 1;
6765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6766                next_offset += envelope_size;
6767            }
6768
6769            Ok(())
6770        }
6771    }
6772}