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    #[doc(hidden)]
502    __SourceBreaking { unknown_ordinal: u32 },
503}
504
505/// Pattern that matches an unknown `InterfaceRemovedReason` member.
506#[macro_export]
507macro_rules! InterfaceRemovedReasonUnknown {
508    () => {
509        _
510    };
511}
512
513impl InterfaceRemovedReason {
514    #[inline]
515    pub fn from_primitive(prim: u32) -> Option<Self> {
516        match prim {
517            1 => Some(Self::DuplicateName),
518            2 => Some(Self::PortAlreadyBound),
519            3 => Some(Self::BadPort),
520            4 => Some(Self::PortClosed),
521            5 => Some(Self::User),
522            _ => None,
523        }
524    }
525
526    #[inline]
527    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
528        match prim {
529            1 => Self::DuplicateName,
530            2 => Self::PortAlreadyBound,
531            3 => Self::BadPort,
532            4 => Self::PortClosed,
533            5 => Self::User,
534            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
535        }
536    }
537
538    #[inline]
539    pub fn unknown() -> Self {
540        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
541    }
542
543    #[inline]
544    pub const fn into_primitive(self) -> u32 {
545        match self {
546            Self::DuplicateName => 1,
547            Self::PortAlreadyBound => 2,
548            Self::BadPort => 3,
549            Self::PortClosed => 4,
550            Self::User => 5,
551            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
552        }
553    }
554
555    #[inline]
556    pub fn is_unknown(&self) -> bool {
557        match self {
558            Self::__SourceBreaking { unknown_ordinal: _ } => true,
559            _ => false,
560        }
561    }
562}
563
564#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
565pub enum MldVersion {
566    /// MLDv1.
567    V1,
568    /// MLDv2.
569    V2,
570    #[doc(hidden)]
571    __SourceBreaking { unknown_ordinal: u8 },
572}
573
574/// Pattern that matches an unknown `MldVersion` member.
575#[macro_export]
576macro_rules! MldVersionUnknown {
577    () => {
578        _
579    };
580}
581
582impl MldVersion {
583    #[inline]
584    pub fn from_primitive(prim: u8) -> Option<Self> {
585        match prim {
586            1 => Some(Self::V1),
587            2 => Some(Self::V2),
588            _ => None,
589        }
590    }
591
592    #[inline]
593    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
594        match prim {
595            1 => Self::V1,
596            2 => Self::V2,
597            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
598        }
599    }
600
601    #[inline]
602    pub fn unknown() -> Self {
603        Self::__SourceBreaking { unknown_ordinal: 0xff }
604    }
605
606    #[inline]
607    pub const fn into_primitive(self) -> u8 {
608        match self {
609            Self::V1 => 1,
610            Self::V2 => 2,
611            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
612        }
613    }
614
615    #[inline]
616    pub fn is_unknown(&self) -> bool {
617        match self {
618            Self::__SourceBreaking { unknown_ordinal: _ } => true,
619            _ => false,
620        }
621    }
622}
623
624#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
625pub struct AddressStateProviderOnAddressRemovedRequest {
626    pub error: AddressRemovalReason,
627}
628
629impl fidl::Persistable for AddressStateProviderOnAddressRemovedRequest {}
630
631#[derive(Clone, Debug, PartialEq)]
632pub struct AddressStateProviderUpdateAddressPropertiesRequest {
633    pub address_properties: AddressProperties,
634}
635
636impl fidl::Persistable for AddressStateProviderUpdateAddressPropertiesRequest {}
637
638#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
639pub struct AddressStateProviderWatchAddressAssignmentStateResponse {
640    pub assignment_state: fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
641}
642
643impl fidl::Persistable for AddressStateProviderWatchAddressAssignmentStateResponse {}
644
645#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
646#[repr(C)]
647pub struct ControlGetIdResponse {
648    pub id: u64,
649}
650
651impl fidl::Persistable for ControlGetIdResponse {}
652
653#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
654pub struct ControlOnInterfaceRemovedRequest {
655    pub reason: InterfaceRemovedReason,
656}
657
658impl fidl::Persistable for ControlOnInterfaceRemovedRequest {}
659
660#[derive(Clone, Debug, PartialEq)]
661pub struct ControlRemoveAddressRequest {
662    pub address: fidl_fuchsia_net__common::Subnet,
663}
664
665impl fidl::Persistable for ControlRemoveAddressRequest {}
666
667#[derive(Clone, Debug, PartialEq)]
668pub struct ControlSetConfigurationRequest {
669    pub config: Configuration,
670}
671
672impl fidl::Persistable for ControlSetConfigurationRequest {}
673
674#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
675pub struct ControlDisableResponse {
676    pub did_disable: bool,
677}
678
679impl fidl::Persistable for ControlDisableResponse {}
680
681#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
682pub struct ControlEnableResponse {
683    pub did_enable: bool,
684}
685
686impl fidl::Persistable for ControlEnableResponse {}
687
688#[derive(Clone, Debug, PartialEq)]
689pub struct ControlGetConfigurationResponse {
690    pub config: Configuration,
691}
692
693impl fidl::Persistable for ControlGetConfigurationResponse {}
694
695#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
696pub struct ControlRemoveAddressResponse {
697    pub did_remove: bool,
698}
699
700impl fidl::Persistable for ControlRemoveAddressResponse {}
701
702#[derive(Clone, Debug, PartialEq)]
703pub struct ControlSetConfigurationResponse {
704    pub previous_config: Configuration,
705}
706
707impl fidl::Persistable for ControlSetConfigurationResponse {}
708
709#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
710pub struct Empty;
711
712impl fidl::Persistable for Empty {}
713
714/// Address assignment parameters.
715#[derive(Clone, Debug, Default, PartialEq)]
716pub struct AddressParameters {
717    /// The initial properties of the address.
718    ///
719    /// If not set, interpreted as an empty `AddressProperties`.
720    pub initial_properties: Option<AddressProperties>,
721    /// True if the address is temporary.
722    ///
723    /// A temporary address is intended to be used for a short period of time
724    /// (hours to days), and its lifetime may not be extended, as detailed in
725    /// [RFC 4941](https://tools.ietf.org/html/rfc4941).
726    ///
727    /// Both temporary and non-temporary addresses have preferred and valid
728    /// lifetimes, but temporary addresses may not be renewed beyond their
729    /// initial lifetime.
730    ///
731    /// Information used in source address selection; temporary addresses are
732    /// preferred over non-temporary addresses if both types are available, as
733    /// detailed in
734    /// [RFC 6724, section 5](https://tools.ietf.org/html/rfc6724#section-5).
735    ///
736    /// If not set, interpreted as false.
737    pub temporary: Option<bool>,
738    /// True if the subnet route corresponding to the address should be
739    /// installed, and removed once the address is removed.
740    ///
741    /// For example, if `Control#AddAddress` is called with 192.168.1.5/24, and
742    /// `add_subnet_route` is true, then a route with destination 192.168.1.0/24
743    /// will be installed through the interface the address is being added to.
744    /// If the address is removed for any reason, the route will also be
745    /// removed.
746    pub add_subnet_route: Option<bool>,
747    /// True if Duplicate Address Detection (DAD) should be performed.
748    ///
749    /// For IPv6, DAD is defined in RFC 4862, Section 5.4.
750    ///
751    /// For IPv4, Address Conflict Detection (ACD) is defined in RFC 5227. For
752    /// simplicity's sake, both specifications are refered to as DAD on this
753    /// API.
754    ///
755    /// If not set, interpreted as `true` for IPv6 addresses, and `false` for
756    /// IPv4 addresses.
757    ///
758    /// Note, the `fuchsia.net.interfaces.admin/Control` API allows setting
759    /// per-interface DAD configuration. DAD will only be performed for a given
760    /// address if its interface's configuration allows for it. Setting this
761    /// property to `true` will not override the interface's DAD configuration.
762    pub perform_dad: Option<bool>,
763    #[doc(hidden)]
764    pub __source_breaking: fidl::marker::SourceBreaking,
765}
766
767impl fidl::Persistable for AddressParameters {}
768
769/// Properties of an IP address.
770#[derive(Clone, Debug, Default, PartialEq)]
771pub struct AddressProperties {
772    /// Information about the preferred lifetime of the address.
773    ///
774    /// If not set, interpreted as
775    /// `PreferredLifetimeInfo.preferred_lifetime_end = zx.Time.INFINITE`.
776    pub preferred_lifetime_info: Option<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo>,
777    /// The end of the valid lifetime of the address.
778    ///
779    /// The address should *not* be considered invalid if `zx.Time` is in the
780    /// past. `valid_lifetime_end` is exchanged as a means to inform the
781    /// deadline where invalidation is expected to happen.
782    ///
783    /// Refers to the valid lifetime of the address, as defined in
784    /// [RFC 4862, section 2](https://tools.ietf.org/html/rfc4862#section-2).
785    ///
786    /// Must be greater than 0. If `zx.Time.INFINITE`, the valid lifetime does
787    /// not expire.
788    ///
789    /// If not set, interpreted as `zx.Time.INFINITE`.
790    pub valid_lifetime_end: Option<i64>,
791    #[doc(hidden)]
792    pub __source_breaking: fidl::marker::SourceBreaking,
793}
794
795impl fidl::Persistable for AddressProperties {}
796
797#[derive(Clone, Debug, Default, PartialEq)]
798pub struct ArpConfiguration {
799    /// Neighbor Unreachabilty Detection over ARP configuration.
800    pub nud: Option<NudConfiguration>,
801    /// Duplicate Address Detection over ARP configuration.
802    ///
803    /// Note that for IPv4, "Duplicate Address Detection" refers to
804    /// Address Conflict Detection, as defined in RFC 5227.
805    pub dad: Option<DadConfiguration>,
806    #[doc(hidden)]
807    pub __source_breaking: fidl::marker::SourceBreaking,
808}
809
810impl fidl::Persistable for ArpConfiguration {}
811
812/// The configuration for an interface.
813#[derive(Clone, Debug, Default, PartialEq)]
814pub struct Configuration {
815    /// The IPv4 configuration for an interface.
816    pub ipv4: Option<Ipv4Configuration>,
817    /// The IPv6 configuration for an interface.
818    pub ipv6: Option<Ipv6Configuration>,
819    #[doc(hidden)]
820    pub __source_breaking: fidl::marker::SourceBreaking,
821}
822
823impl fidl::Persistable for Configuration {}
824
825/// DAD (Duplicate Address Detection) configuration for an interface.
826#[derive(Clone, Debug, Default, PartialEq)]
827pub struct DadConfiguration {
828    /// Number of transmissions before an address is considered available for
829    /// use.
830    ///
831    /// A value of zero effectively disables DAD for the interface.
832    pub transmits: Option<u16>,
833    #[doc(hidden)]
834    pub __source_breaking: fidl::marker::SourceBreaking,
835}
836
837impl fidl::Persistable for DadConfiguration {}
838
839#[derive(Clone, Debug, Default, PartialEq)]
840pub struct IgmpConfiguration {
841    /// Indicates the version of IGMP to be performed.
842    ///
843    /// Note that the stack may perform lower versioned IGMP as required
844    /// for backwards compatibility with other nodes on the network per
845    /// IGMP requirements.
846    pub version: Option<IgmpVersion>,
847    #[doc(hidden)]
848    pub __source_breaking: fidl::marker::SourceBreaking,
849}
850
851impl fidl::Persistable for IgmpConfiguration {}
852
853#[derive(Clone, Debug, Default, PartialEq)]
854pub struct Ipv4Configuration {
855    /// Controls whether or not IPv4 unicast packets may be forwarded if not
856    /// destined to the host.
857    pub unicast_forwarding: Option<bool>,
858    /// Controls whether or not IPv4 multicast packets may be forwarded.
859    pub multicast_forwarding: Option<bool>,
860    /// Controls IGMP configuration.
861    pub igmp: Option<IgmpConfiguration>,
862    /// Controls ARP configuration.
863    pub arp: Option<ArpConfiguration>,
864    #[doc(hidden)]
865    pub __source_breaking: fidl::marker::SourceBreaking,
866}
867
868impl fidl::Persistable for Ipv4Configuration {}
869
870#[derive(Clone, Debug, Default, PartialEq)]
871pub struct Ipv6Configuration {
872    /// Controls whether or not IPv6 unicast packets may be forwarded if not
873    /// destined to the host.
874    pub unicast_forwarding: Option<bool>,
875    /// Controls whether or not IPv6 multicast packets may be forwarded.
876    pub multicast_forwarding: Option<bool>,
877    /// Controls MLD configuration.
878    pub mld: Option<MldConfiguration>,
879    /// Controls NDP configuration.
880    pub ndp: Option<NdpConfiguration>,
881    #[doc(hidden)]
882    pub __source_breaking: fidl::marker::SourceBreaking,
883}
884
885impl fidl::Persistable for Ipv6Configuration {}
886
887#[derive(Clone, Debug, Default, PartialEq)]
888pub struct MldConfiguration {
889    /// Indicates the version of MLD to be performed.
890    ///
891    /// Note that the stack may perform lower versioned MLD as required
892    /// for backwards compatibility with other nodes on the network per
893    /// MLD requirements.
894    pub version: Option<MldVersion>,
895    #[doc(hidden)]
896    pub __source_breaking: fidl::marker::SourceBreaking,
897}
898
899impl fidl::Persistable for MldConfiguration {}
900
901#[derive(Clone, Debug, Default, PartialEq)]
902pub struct NdpConfiguration {
903    /// Neighbor Unreachabilty Detection over NDP configuration.
904    pub nud: Option<NudConfiguration>,
905    /// Duplicate Address Detection over NDP configuration.
906    pub dad: Option<DadConfiguration>,
907    /// SLAAC (Stateless Address Auto-configuration) configuration.
908    pub slaac: Option<SlaacConfiguration>,
909    #[doc(hidden)]
910    pub __source_breaking: fidl::marker::SourceBreaking,
911}
912
913impl fidl::Persistable for NdpConfiguration {}
914
915/// NudConfiguration for an interface.
916///
917/// This is scoped to IPv4 or IPv6 configuration by the [`Configuration`] type.
918#[derive(Clone, Debug, Default, PartialEq)]
919pub struct NudConfiguration {
920    /// The number of multicast solicitations before considering a neighbor
921    /// unreachable.
922    ///
923    /// Must be nonzero. `ILLEGAL_ZERO_VALUE` is returned on
924    /// [`Control.SetConfiguration`] otherwise.
925    pub max_multicast_solicitations: Option<u16>,
926    /// The number of unicast solicitations before considering a neighbor
927    /// unreachable.
928    ///
929    /// Must be nonzero.
930    pub max_unicast_solicitations: Option<u16>,
931    /// A base duration for computing the random reachable time.
932    ///
933    /// Reachable time is the duration for which a neighbor is considered
934    /// reachable after a positive reachability confirmation is received.
935    /// After this time, an entry will transition from REACHABLE to STALE state.
936    ///
937    /// Referred to as "BaseReachableTime" by RFC 4861.
938    ///
939    /// Must be greater than 0.
940    pub base_reachable_time: Option<i64>,
941    #[doc(hidden)]
942    pub __source_breaking: fidl::marker::SourceBreaking,
943}
944
945impl fidl::Persistable for NudConfiguration {}
946
947#[derive(Clone, Debug, Default, PartialEq)]
948pub struct SlaacConfiguration {
949    /// Controls whether temporary addresses as described in
950    /// [RFC 4941] are generated.
951    ///
952    /// Note that assigned SLAAC temporary addresses will remain
953    /// assigned when this configuration goes from enabled to
954    /// disabled.
955    ///
956    /// [RFC 4941]: https://datatracker.ietf.org/doc/html/rfc4941
957    pub temporary_address: Option<bool>,
958    #[doc(hidden)]
959    pub __source_breaking: fidl::marker::SourceBreaking,
960}
961
962impl fidl::Persistable for SlaacConfiguration {}
963
964pub mod address_state_provider_ordinals {
965    pub const UPDATE_ADDRESS_PROPERTIES: u64 = 0x52bdf5ed96ef573c;
966    pub const WATCH_ADDRESS_ASSIGNMENT_STATE: u64 = 0x740bb58c1b2d3188;
967    pub const DETACH: u64 = 0xc752381d739622f;
968    pub const REMOVE: u64 = 0x554407fe183e78ad;
969    pub const ON_ADDRESS_ADDED: u64 = 0x624f6ea62cce189e;
970    pub const ON_ADDRESS_REMOVED: u64 = 0x2480eb672ffd5962;
971}
972
973pub mod control_ordinals {
974    pub const ADD_ADDRESS: u64 = 0x1349d36da453ce;
975    pub const REMOVE_ADDRESS: u64 = 0x213ba73da997a620;
976    pub const GET_ID: u64 = 0x2a2459768d9ecc6f;
977    pub const SET_CONFIGURATION: u64 = 0x573923b7b4bde27f;
978    pub const GET_CONFIGURATION: u64 = 0x5f5d239820bdcc65;
979    pub const ENABLE: u64 = 0x15c983d3a8ac0b98;
980    pub const DISABLE: u64 = 0x98d3a585d905473;
981    pub const DETACH: u64 = 0x78ee27518b2dbfa;
982    pub const GET_AUTHORIZATION_FOR_INTERFACE: u64 = 0xc1de2ab60b5cb9e;
983    pub const REMOVE: u64 = 0x13aab8bbecc7ff0b;
984    pub const ON_INTERFACE_REMOVED: u64 = 0x800d39e76c1cddd;
985}
986
987pub mod device_control_ordinals {
988    pub const CREATE_INTERFACE: u64 = 0x4ff8be7351d12f86;
989    pub const DETACH: u64 = 0x57489f1554d489d2;
990}
991
992pub mod installer_ordinals {
993    pub const INSTALL_DEVICE: u64 = 0x3e84524dcecab23a;
994    pub const INSTALL_BLACKHOLE_INTERFACE: u64 = 0x2ce57e87cdbcb809;
995}
996
997mod internal {
998    use super::*;
999    unsafe impl fidl::encoding::TypeMarker for AddressRemovalReason {
1000        type Owned = Self;
1001
1002        #[inline(always)]
1003        fn inline_align(_context: fidl::encoding::Context) -> usize {
1004            std::mem::align_of::<u32>()
1005        }
1006
1007        #[inline(always)]
1008        fn inline_size(_context: fidl::encoding::Context) -> usize {
1009            std::mem::size_of::<u32>()
1010        }
1011
1012        #[inline(always)]
1013        fn encode_is_copy() -> bool {
1014            true
1015        }
1016
1017        #[inline(always)]
1018        fn decode_is_copy() -> bool {
1019            false
1020        }
1021    }
1022
1023    impl fidl::encoding::ValueTypeMarker for AddressRemovalReason {
1024        type Borrowed<'a> = Self;
1025        #[inline(always)]
1026        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1027            *value
1028        }
1029    }
1030
1031    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1032        for AddressRemovalReason
1033    {
1034        #[inline]
1035        unsafe fn encode(
1036            self,
1037            encoder: &mut fidl::encoding::Encoder<'_, D>,
1038            offset: usize,
1039            _depth: fidl::encoding::Depth,
1040        ) -> fidl::Result<()> {
1041            encoder.debug_check_bounds::<Self>(offset);
1042            encoder.write_num(self.into_primitive(), offset);
1043            Ok(())
1044        }
1045    }
1046
1047    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressRemovalReason {
1048        #[inline(always)]
1049        fn new_empty() -> Self {
1050            Self::Invalid
1051        }
1052
1053        #[inline]
1054        unsafe fn decode(
1055            &mut self,
1056            decoder: &mut fidl::encoding::Decoder<'_, D>,
1057            offset: usize,
1058            _depth: fidl::encoding::Depth,
1059        ) -> fidl::Result<()> {
1060            decoder.debug_check_bounds::<Self>(offset);
1061            let prim = decoder.read_num::<u32>(offset);
1062
1063            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1064            Ok(())
1065        }
1066    }
1067    unsafe impl fidl::encoding::TypeMarker for ControlDisableError {
1068        type Owned = Self;
1069
1070        #[inline(always)]
1071        fn inline_align(_context: fidl::encoding::Context) -> usize {
1072            std::mem::align_of::<u32>()
1073        }
1074
1075        #[inline(always)]
1076        fn inline_size(_context: fidl::encoding::Context) -> usize {
1077            std::mem::size_of::<u32>()
1078        }
1079
1080        #[inline(always)]
1081        fn encode_is_copy() -> bool {
1082            false
1083        }
1084
1085        #[inline(always)]
1086        fn decode_is_copy() -> bool {
1087            false
1088        }
1089    }
1090
1091    impl fidl::encoding::ValueTypeMarker for ControlDisableError {
1092        type Borrowed<'a> = Self;
1093        #[inline(always)]
1094        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1095            *value
1096        }
1097    }
1098
1099    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1100        for ControlDisableError
1101    {
1102        #[inline]
1103        unsafe fn encode(
1104            self,
1105            encoder: &mut fidl::encoding::Encoder<'_, D>,
1106            offset: usize,
1107            _depth: fidl::encoding::Depth,
1108        ) -> fidl::Result<()> {
1109            encoder.debug_check_bounds::<Self>(offset);
1110            encoder.write_num(self.into_primitive(), offset);
1111            Ok(())
1112        }
1113    }
1114
1115    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlDisableError {
1116        #[inline(always)]
1117        fn new_empty() -> Self {
1118            Self::unknown()
1119        }
1120
1121        #[inline]
1122        unsafe fn decode(
1123            &mut self,
1124            decoder: &mut fidl::encoding::Decoder<'_, D>,
1125            offset: usize,
1126            _depth: fidl::encoding::Depth,
1127        ) -> fidl::Result<()> {
1128            decoder.debug_check_bounds::<Self>(offset);
1129            let prim = decoder.read_num::<u32>(offset);
1130
1131            *self = Self::from_primitive_allow_unknown(prim);
1132            Ok(())
1133        }
1134    }
1135    unsafe impl fidl::encoding::TypeMarker for ControlEnableError {
1136        type Owned = Self;
1137
1138        #[inline(always)]
1139        fn inline_align(_context: fidl::encoding::Context) -> usize {
1140            std::mem::align_of::<u32>()
1141        }
1142
1143        #[inline(always)]
1144        fn inline_size(_context: fidl::encoding::Context) -> usize {
1145            std::mem::size_of::<u32>()
1146        }
1147
1148        #[inline(always)]
1149        fn encode_is_copy() -> bool {
1150            false
1151        }
1152
1153        #[inline(always)]
1154        fn decode_is_copy() -> bool {
1155            false
1156        }
1157    }
1158
1159    impl fidl::encoding::ValueTypeMarker for ControlEnableError {
1160        type Borrowed<'a> = Self;
1161        #[inline(always)]
1162        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1163            *value
1164        }
1165    }
1166
1167    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1168        for ControlEnableError
1169    {
1170        #[inline]
1171        unsafe fn encode(
1172            self,
1173            encoder: &mut fidl::encoding::Encoder<'_, D>,
1174            offset: usize,
1175            _depth: fidl::encoding::Depth,
1176        ) -> fidl::Result<()> {
1177            encoder.debug_check_bounds::<Self>(offset);
1178            encoder.write_num(self.into_primitive(), offset);
1179            Ok(())
1180        }
1181    }
1182
1183    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlEnableError {
1184        #[inline(always)]
1185        fn new_empty() -> Self {
1186            Self::unknown()
1187        }
1188
1189        #[inline]
1190        unsafe fn decode(
1191            &mut self,
1192            decoder: &mut fidl::encoding::Decoder<'_, D>,
1193            offset: usize,
1194            _depth: fidl::encoding::Depth,
1195        ) -> fidl::Result<()> {
1196            decoder.debug_check_bounds::<Self>(offset);
1197            let prim = decoder.read_num::<u32>(offset);
1198
1199            *self = Self::from_primitive_allow_unknown(prim);
1200            Ok(())
1201        }
1202    }
1203    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationError {
1204        type Owned = Self;
1205
1206        #[inline(always)]
1207        fn inline_align(_context: fidl::encoding::Context) -> usize {
1208            std::mem::align_of::<u32>()
1209        }
1210
1211        #[inline(always)]
1212        fn inline_size(_context: fidl::encoding::Context) -> usize {
1213            std::mem::size_of::<u32>()
1214        }
1215
1216        #[inline(always)]
1217        fn encode_is_copy() -> bool {
1218            false
1219        }
1220
1221        #[inline(always)]
1222        fn decode_is_copy() -> bool {
1223            false
1224        }
1225    }
1226
1227    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationError {
1228        type Borrowed<'a> = Self;
1229        #[inline(always)]
1230        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1231            *value
1232        }
1233    }
1234
1235    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1236        for ControlGetConfigurationError
1237    {
1238        #[inline]
1239        unsafe fn encode(
1240            self,
1241            encoder: &mut fidl::encoding::Encoder<'_, D>,
1242            offset: usize,
1243            _depth: fidl::encoding::Depth,
1244        ) -> fidl::Result<()> {
1245            encoder.debug_check_bounds::<Self>(offset);
1246            encoder.write_num(self.into_primitive(), offset);
1247            Ok(())
1248        }
1249    }
1250
1251    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1252        for ControlGetConfigurationError
1253    {
1254        #[inline(always)]
1255        fn new_empty() -> Self {
1256            Self::unknown()
1257        }
1258
1259        #[inline]
1260        unsafe fn decode(
1261            &mut self,
1262            decoder: &mut fidl::encoding::Decoder<'_, D>,
1263            offset: usize,
1264            _depth: fidl::encoding::Depth,
1265        ) -> fidl::Result<()> {
1266            decoder.debug_check_bounds::<Self>(offset);
1267            let prim = decoder.read_num::<u32>(offset);
1268
1269            *self = Self::from_primitive_allow_unknown(prim);
1270            Ok(())
1271        }
1272    }
1273    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressError {
1274        type Owned = Self;
1275
1276        #[inline(always)]
1277        fn inline_align(_context: fidl::encoding::Context) -> usize {
1278            std::mem::align_of::<u32>()
1279        }
1280
1281        #[inline(always)]
1282        fn inline_size(_context: fidl::encoding::Context) -> usize {
1283            std::mem::size_of::<u32>()
1284        }
1285
1286        #[inline(always)]
1287        fn encode_is_copy() -> bool {
1288            false
1289        }
1290
1291        #[inline(always)]
1292        fn decode_is_copy() -> bool {
1293            false
1294        }
1295    }
1296
1297    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressError {
1298        type Borrowed<'a> = Self;
1299        #[inline(always)]
1300        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1301            *value
1302        }
1303    }
1304
1305    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1306        for ControlRemoveAddressError
1307    {
1308        #[inline]
1309        unsafe fn encode(
1310            self,
1311            encoder: &mut fidl::encoding::Encoder<'_, D>,
1312            offset: usize,
1313            _depth: fidl::encoding::Depth,
1314        ) -> fidl::Result<()> {
1315            encoder.debug_check_bounds::<Self>(offset);
1316            encoder.write_num(self.into_primitive(), offset);
1317            Ok(())
1318        }
1319    }
1320
1321    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1322        for ControlRemoveAddressError
1323    {
1324        #[inline(always)]
1325        fn new_empty() -> Self {
1326            Self::unknown()
1327        }
1328
1329        #[inline]
1330        unsafe fn decode(
1331            &mut self,
1332            decoder: &mut fidl::encoding::Decoder<'_, D>,
1333            offset: usize,
1334            _depth: fidl::encoding::Depth,
1335        ) -> fidl::Result<()> {
1336            decoder.debug_check_bounds::<Self>(offset);
1337            let prim = decoder.read_num::<u32>(offset);
1338
1339            *self = Self::from_primitive_allow_unknown(prim);
1340            Ok(())
1341        }
1342    }
1343    unsafe impl fidl::encoding::TypeMarker for ControlRemoveError {
1344        type Owned = Self;
1345
1346        #[inline(always)]
1347        fn inline_align(_context: fidl::encoding::Context) -> usize {
1348            std::mem::align_of::<u32>()
1349        }
1350
1351        #[inline(always)]
1352        fn inline_size(_context: fidl::encoding::Context) -> usize {
1353            std::mem::size_of::<u32>()
1354        }
1355
1356        #[inline(always)]
1357        fn encode_is_copy() -> bool {
1358            false
1359        }
1360
1361        #[inline(always)]
1362        fn decode_is_copy() -> bool {
1363            false
1364        }
1365    }
1366
1367    impl fidl::encoding::ValueTypeMarker for ControlRemoveError {
1368        type Borrowed<'a> = Self;
1369        #[inline(always)]
1370        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1371            *value
1372        }
1373    }
1374
1375    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1376        for ControlRemoveError
1377    {
1378        #[inline]
1379        unsafe fn encode(
1380            self,
1381            encoder: &mut fidl::encoding::Encoder<'_, D>,
1382            offset: usize,
1383            _depth: fidl::encoding::Depth,
1384        ) -> fidl::Result<()> {
1385            encoder.debug_check_bounds::<Self>(offset);
1386            encoder.write_num(self.into_primitive(), offset);
1387            Ok(())
1388        }
1389    }
1390
1391    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlRemoveError {
1392        #[inline(always)]
1393        fn new_empty() -> Self {
1394            Self::unknown()
1395        }
1396
1397        #[inline]
1398        unsafe fn decode(
1399            &mut self,
1400            decoder: &mut fidl::encoding::Decoder<'_, D>,
1401            offset: usize,
1402            _depth: fidl::encoding::Depth,
1403        ) -> fidl::Result<()> {
1404            decoder.debug_check_bounds::<Self>(offset);
1405            let prim = decoder.read_num::<u32>(offset);
1406
1407            *self = Self::from_primitive_allow_unknown(prim);
1408            Ok(())
1409        }
1410    }
1411    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationError {
1412        type Owned = Self;
1413
1414        #[inline(always)]
1415        fn inline_align(_context: fidl::encoding::Context) -> usize {
1416            std::mem::align_of::<u32>()
1417        }
1418
1419        #[inline(always)]
1420        fn inline_size(_context: fidl::encoding::Context) -> usize {
1421            std::mem::size_of::<u32>()
1422        }
1423
1424        #[inline(always)]
1425        fn encode_is_copy() -> bool {
1426            false
1427        }
1428
1429        #[inline(always)]
1430        fn decode_is_copy() -> bool {
1431            false
1432        }
1433    }
1434
1435    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationError {
1436        type Borrowed<'a> = Self;
1437        #[inline(always)]
1438        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1439            *value
1440        }
1441    }
1442
1443    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1444        for ControlSetConfigurationError
1445    {
1446        #[inline]
1447        unsafe fn encode(
1448            self,
1449            encoder: &mut fidl::encoding::Encoder<'_, D>,
1450            offset: usize,
1451            _depth: fidl::encoding::Depth,
1452        ) -> fidl::Result<()> {
1453            encoder.debug_check_bounds::<Self>(offset);
1454            encoder.write_num(self.into_primitive(), offset);
1455            Ok(())
1456        }
1457    }
1458
1459    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1460        for ControlSetConfigurationError
1461    {
1462        #[inline(always)]
1463        fn new_empty() -> Self {
1464            Self::unknown()
1465        }
1466
1467        #[inline]
1468        unsafe fn decode(
1469            &mut self,
1470            decoder: &mut fidl::encoding::Decoder<'_, D>,
1471            offset: usize,
1472            _depth: fidl::encoding::Depth,
1473        ) -> fidl::Result<()> {
1474            decoder.debug_check_bounds::<Self>(offset);
1475            let prim = decoder.read_num::<u32>(offset);
1476
1477            *self = Self::from_primitive_allow_unknown(prim);
1478            Ok(())
1479        }
1480    }
1481    unsafe impl fidl::encoding::TypeMarker for IgmpVersion {
1482        type Owned = Self;
1483
1484        #[inline(always)]
1485        fn inline_align(_context: fidl::encoding::Context) -> usize {
1486            std::mem::align_of::<u8>()
1487        }
1488
1489        #[inline(always)]
1490        fn inline_size(_context: fidl::encoding::Context) -> usize {
1491            std::mem::size_of::<u8>()
1492        }
1493
1494        #[inline(always)]
1495        fn encode_is_copy() -> bool {
1496            false
1497        }
1498
1499        #[inline(always)]
1500        fn decode_is_copy() -> bool {
1501            false
1502        }
1503    }
1504
1505    impl fidl::encoding::ValueTypeMarker for IgmpVersion {
1506        type Borrowed<'a> = Self;
1507        #[inline(always)]
1508        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1509            *value
1510        }
1511    }
1512
1513    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for IgmpVersion {
1514        #[inline]
1515        unsafe fn encode(
1516            self,
1517            encoder: &mut fidl::encoding::Encoder<'_, D>,
1518            offset: usize,
1519            _depth: fidl::encoding::Depth,
1520        ) -> fidl::Result<()> {
1521            encoder.debug_check_bounds::<Self>(offset);
1522            encoder.write_num(self.into_primitive(), offset);
1523            Ok(())
1524        }
1525    }
1526
1527    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpVersion {
1528        #[inline(always)]
1529        fn new_empty() -> Self {
1530            Self::unknown()
1531        }
1532
1533        #[inline]
1534        unsafe fn decode(
1535            &mut self,
1536            decoder: &mut fidl::encoding::Decoder<'_, D>,
1537            offset: usize,
1538            _depth: fidl::encoding::Depth,
1539        ) -> fidl::Result<()> {
1540            decoder.debug_check_bounds::<Self>(offset);
1541            let prim = decoder.read_num::<u8>(offset);
1542
1543            *self = Self::from_primitive_allow_unknown(prim);
1544            Ok(())
1545        }
1546    }
1547    unsafe impl fidl::encoding::TypeMarker for InterfaceRemovedReason {
1548        type Owned = Self;
1549
1550        #[inline(always)]
1551        fn inline_align(_context: fidl::encoding::Context) -> usize {
1552            std::mem::align_of::<u32>()
1553        }
1554
1555        #[inline(always)]
1556        fn inline_size(_context: fidl::encoding::Context) -> usize {
1557            std::mem::size_of::<u32>()
1558        }
1559
1560        #[inline(always)]
1561        fn encode_is_copy() -> bool {
1562            false
1563        }
1564
1565        #[inline(always)]
1566        fn decode_is_copy() -> bool {
1567            false
1568        }
1569    }
1570
1571    impl fidl::encoding::ValueTypeMarker for InterfaceRemovedReason {
1572        type Borrowed<'a> = Self;
1573        #[inline(always)]
1574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1575            *value
1576        }
1577    }
1578
1579    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1580        for InterfaceRemovedReason
1581    {
1582        #[inline]
1583        unsafe fn encode(
1584            self,
1585            encoder: &mut fidl::encoding::Encoder<'_, D>,
1586            offset: usize,
1587            _depth: fidl::encoding::Depth,
1588        ) -> fidl::Result<()> {
1589            encoder.debug_check_bounds::<Self>(offset);
1590            encoder.write_num(self.into_primitive(), offset);
1591            Ok(())
1592        }
1593    }
1594
1595    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1596        for InterfaceRemovedReason
1597    {
1598        #[inline(always)]
1599        fn new_empty() -> Self {
1600            Self::unknown()
1601        }
1602
1603        #[inline]
1604        unsafe fn decode(
1605            &mut self,
1606            decoder: &mut fidl::encoding::Decoder<'_, D>,
1607            offset: usize,
1608            _depth: fidl::encoding::Depth,
1609        ) -> fidl::Result<()> {
1610            decoder.debug_check_bounds::<Self>(offset);
1611            let prim = decoder.read_num::<u32>(offset);
1612
1613            *self = Self::from_primitive_allow_unknown(prim);
1614            Ok(())
1615        }
1616    }
1617    unsafe impl fidl::encoding::TypeMarker for MldVersion {
1618        type Owned = Self;
1619
1620        #[inline(always)]
1621        fn inline_align(_context: fidl::encoding::Context) -> usize {
1622            std::mem::align_of::<u8>()
1623        }
1624
1625        #[inline(always)]
1626        fn inline_size(_context: fidl::encoding::Context) -> usize {
1627            std::mem::size_of::<u8>()
1628        }
1629
1630        #[inline(always)]
1631        fn encode_is_copy() -> bool {
1632            false
1633        }
1634
1635        #[inline(always)]
1636        fn decode_is_copy() -> bool {
1637            false
1638        }
1639    }
1640
1641    impl fidl::encoding::ValueTypeMarker for MldVersion {
1642        type Borrowed<'a> = Self;
1643        #[inline(always)]
1644        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1645            *value
1646        }
1647    }
1648
1649    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for MldVersion {
1650        #[inline]
1651        unsafe fn encode(
1652            self,
1653            encoder: &mut fidl::encoding::Encoder<'_, D>,
1654            offset: usize,
1655            _depth: fidl::encoding::Depth,
1656        ) -> fidl::Result<()> {
1657            encoder.debug_check_bounds::<Self>(offset);
1658            encoder.write_num(self.into_primitive(), offset);
1659            Ok(())
1660        }
1661    }
1662
1663    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldVersion {
1664        #[inline(always)]
1665        fn new_empty() -> Self {
1666            Self::unknown()
1667        }
1668
1669        #[inline]
1670        unsafe fn decode(
1671            &mut self,
1672            decoder: &mut fidl::encoding::Decoder<'_, D>,
1673            offset: usize,
1674            _depth: fidl::encoding::Depth,
1675        ) -> fidl::Result<()> {
1676            decoder.debug_check_bounds::<Self>(offset);
1677            let prim = decoder.read_num::<u8>(offset);
1678
1679            *self = Self::from_primitive_allow_unknown(prim);
1680            Ok(())
1681        }
1682    }
1683
1684    impl fidl::encoding::ValueTypeMarker for AddressStateProviderOnAddressRemovedRequest {
1685        type Borrowed<'a> = &'a Self;
1686        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1687            value
1688        }
1689    }
1690
1691    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderOnAddressRemovedRequest {
1692        type Owned = Self;
1693
1694        #[inline(always)]
1695        fn inline_align(_context: fidl::encoding::Context) -> usize {
1696            4
1697        }
1698
1699        #[inline(always)]
1700        fn inline_size(_context: fidl::encoding::Context) -> usize {
1701            4
1702        }
1703    }
1704
1705    unsafe impl<D: fidl::encoding::ResourceDialect>
1706        fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D>
1707        for &AddressStateProviderOnAddressRemovedRequest
1708    {
1709        #[inline]
1710        unsafe fn encode(
1711            self,
1712            encoder: &mut fidl::encoding::Encoder<'_, D>,
1713            offset: usize,
1714            _depth: fidl::encoding::Depth,
1715        ) -> fidl::Result<()> {
1716            encoder.debug_check_bounds::<AddressStateProviderOnAddressRemovedRequest>(offset);
1717            // Delegate to tuple encoding.
1718            fidl::encoding::Encode::<AddressStateProviderOnAddressRemovedRequest, D>::encode(
1719                (<AddressRemovalReason as fidl::encoding::ValueTypeMarker>::borrow(&self.error),),
1720                encoder,
1721                offset,
1722                _depth,
1723            )
1724        }
1725    }
1726    unsafe impl<
1727            D: fidl::encoding::ResourceDialect,
1728            T0: fidl::encoding::Encode<AddressRemovalReason, D>,
1729        > fidl::encoding::Encode<AddressStateProviderOnAddressRemovedRequest, D> for (T0,)
1730    {
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::<AddressStateProviderOnAddressRemovedRequest>(offset);
1739            // Zero out padding regions. There's no need to apply masks
1740            // because the unmasked parts will be overwritten by fields.
1741            // Write the fields.
1742            self.0.encode(encoder, offset + 0, depth)?;
1743            Ok(())
1744        }
1745    }
1746
1747    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1748        for AddressStateProviderOnAddressRemovedRequest
1749    {
1750        #[inline(always)]
1751        fn new_empty() -> Self {
1752            Self { error: fidl::new_empty!(AddressRemovalReason, D) }
1753        }
1754
1755        #[inline]
1756        unsafe fn decode(
1757            &mut self,
1758            decoder: &mut fidl::encoding::Decoder<'_, D>,
1759            offset: usize,
1760            _depth: fidl::encoding::Depth,
1761        ) -> fidl::Result<()> {
1762            decoder.debug_check_bounds::<Self>(offset);
1763            // Verify that padding bytes are zero.
1764            fidl::decode!(AddressRemovalReason, D, &mut self.error, decoder, offset + 0, _depth)?;
1765            Ok(())
1766        }
1767    }
1768
1769    impl fidl::encoding::ValueTypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1770        type Borrowed<'a> = &'a Self;
1771        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1772            value
1773        }
1774    }
1775
1776    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderUpdateAddressPropertiesRequest {
1777        type Owned = Self;
1778
1779        #[inline(always)]
1780        fn inline_align(_context: fidl::encoding::Context) -> usize {
1781            8
1782        }
1783
1784        #[inline(always)]
1785        fn inline_size(_context: fidl::encoding::Context) -> usize {
1786            16
1787        }
1788    }
1789
1790    unsafe impl<D: fidl::encoding::ResourceDialect>
1791        fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D>
1792        for &AddressStateProviderUpdateAddressPropertiesRequest
1793    {
1794        #[inline]
1795        unsafe fn encode(
1796            self,
1797            encoder: &mut fidl::encoding::Encoder<'_, D>,
1798            offset: usize,
1799            _depth: fidl::encoding::Depth,
1800        ) -> fidl::Result<()> {
1801            encoder
1802                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1803            // Delegate to tuple encoding.
1804            fidl::encoding::Encode::<AddressStateProviderUpdateAddressPropertiesRequest, D>::encode(
1805                (<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow(
1806                    &self.address_properties,
1807                ),),
1808                encoder,
1809                offset,
1810                _depth,
1811            )
1812        }
1813    }
1814    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AddressProperties, D>>
1815        fidl::encoding::Encode<AddressStateProviderUpdateAddressPropertiesRequest, D> for (T0,)
1816    {
1817        #[inline]
1818        unsafe fn encode(
1819            self,
1820            encoder: &mut fidl::encoding::Encoder<'_, D>,
1821            offset: usize,
1822            depth: fidl::encoding::Depth,
1823        ) -> fidl::Result<()> {
1824            encoder
1825                .debug_check_bounds::<AddressStateProviderUpdateAddressPropertiesRequest>(offset);
1826            // Zero out padding regions. There's no need to apply masks
1827            // because the unmasked parts will be overwritten by fields.
1828            // Write the fields.
1829            self.0.encode(encoder, offset + 0, depth)?;
1830            Ok(())
1831        }
1832    }
1833
1834    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1835        for AddressStateProviderUpdateAddressPropertiesRequest
1836    {
1837        #[inline(always)]
1838        fn new_empty() -> Self {
1839            Self { address_properties: fidl::new_empty!(AddressProperties, D) }
1840        }
1841
1842        #[inline]
1843        unsafe fn decode(
1844            &mut self,
1845            decoder: &mut fidl::encoding::Decoder<'_, D>,
1846            offset: usize,
1847            _depth: fidl::encoding::Depth,
1848        ) -> fidl::Result<()> {
1849            decoder.debug_check_bounds::<Self>(offset);
1850            // Verify that padding bytes are zero.
1851            fidl::decode!(
1852                AddressProperties,
1853                D,
1854                &mut self.address_properties,
1855                decoder,
1856                offset + 0,
1857                _depth
1858            )?;
1859            Ok(())
1860        }
1861    }
1862
1863    impl fidl::encoding::ValueTypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1864        type Borrowed<'a> = &'a Self;
1865        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1866            value
1867        }
1868    }
1869
1870    unsafe impl fidl::encoding::TypeMarker for AddressStateProviderWatchAddressAssignmentStateResponse {
1871        type Owned = Self;
1872
1873        #[inline(always)]
1874        fn inline_align(_context: fidl::encoding::Context) -> usize {
1875            4
1876        }
1877
1878        #[inline(always)]
1879        fn inline_size(_context: fidl::encoding::Context) -> usize {
1880            4
1881        }
1882    }
1883
1884    unsafe impl<D: fidl::encoding::ResourceDialect>
1885        fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D>
1886        for &AddressStateProviderWatchAddressAssignmentStateResponse
1887    {
1888        #[inline]
1889        unsafe fn encode(
1890            self,
1891            encoder: &mut fidl::encoding::Encoder<'_, D>,
1892            offset: usize,
1893            _depth: fidl::encoding::Depth,
1894        ) -> fidl::Result<()> {
1895            encoder.debug_check_bounds::<AddressStateProviderWatchAddressAssignmentStateResponse>(
1896                offset,
1897            );
1898            // Delegate to tuple encoding.
1899            fidl::encoding::Encode::<AddressStateProviderWatchAddressAssignmentStateResponse, D>::encode(
1900                (
1901                    <fidl_fuchsia_net_interfaces__common::AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow(&self.assignment_state),
1902                ),
1903                encoder, offset, _depth
1904            )
1905        }
1906    }
1907    unsafe impl<
1908            D: fidl::encoding::ResourceDialect,
1909            T0: fidl::encoding::Encode<fidl_fuchsia_net_interfaces__common::AddressAssignmentState, D>,
1910        > fidl::encoding::Encode<AddressStateProviderWatchAddressAssignmentStateResponse, D>
1911        for (T0,)
1912    {
1913        #[inline]
1914        unsafe fn encode(
1915            self,
1916            encoder: &mut fidl::encoding::Encoder<'_, D>,
1917            offset: usize,
1918            depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            encoder.debug_check_bounds::<AddressStateProviderWatchAddressAssignmentStateResponse>(
1921                offset,
1922            );
1923            // Zero out padding regions. There's no need to apply masks
1924            // because the unmasked parts will be overwritten by fields.
1925            // Write the fields.
1926            self.0.encode(encoder, offset + 0, depth)?;
1927            Ok(())
1928        }
1929    }
1930
1931    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1932        for AddressStateProviderWatchAddressAssignmentStateResponse
1933    {
1934        #[inline(always)]
1935        fn new_empty() -> Self {
1936            Self {
1937                assignment_state: fidl::new_empty!(
1938                    fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
1939                    D
1940                ),
1941            }
1942        }
1943
1944        #[inline]
1945        unsafe fn decode(
1946            &mut self,
1947            decoder: &mut fidl::encoding::Decoder<'_, D>,
1948            offset: usize,
1949            _depth: fidl::encoding::Depth,
1950        ) -> fidl::Result<()> {
1951            decoder.debug_check_bounds::<Self>(offset);
1952            // Verify that padding bytes are zero.
1953            fidl::decode!(
1954                fidl_fuchsia_net_interfaces__common::AddressAssignmentState,
1955                D,
1956                &mut self.assignment_state,
1957                decoder,
1958                offset + 0,
1959                _depth
1960            )?;
1961            Ok(())
1962        }
1963    }
1964
1965    impl fidl::encoding::ValueTypeMarker for ControlGetIdResponse {
1966        type Borrowed<'a> = &'a Self;
1967        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1968            value
1969        }
1970    }
1971
1972    unsafe impl fidl::encoding::TypeMarker for ControlGetIdResponse {
1973        type Owned = Self;
1974
1975        #[inline(always)]
1976        fn inline_align(_context: fidl::encoding::Context) -> usize {
1977            8
1978        }
1979
1980        #[inline(always)]
1981        fn inline_size(_context: fidl::encoding::Context) -> usize {
1982            8
1983        }
1984        #[inline(always)]
1985        fn encode_is_copy() -> bool {
1986            true
1987        }
1988
1989        #[inline(always)]
1990        fn decode_is_copy() -> bool {
1991            true
1992        }
1993    }
1994
1995    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlGetIdResponse, D>
1996        for &ControlGetIdResponse
1997    {
1998        #[inline]
1999        unsafe fn encode(
2000            self,
2001            encoder: &mut fidl::encoding::Encoder<'_, D>,
2002            offset: usize,
2003            _depth: fidl::encoding::Depth,
2004        ) -> fidl::Result<()> {
2005            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2006            unsafe {
2007                // Copy the object into the buffer.
2008                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2009                (buf_ptr as *mut ControlGetIdResponse)
2010                    .write_unaligned((self as *const ControlGetIdResponse).read());
2011                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2012                // done second because the memcpy will write garbage to these bytes.
2013            }
2014            Ok(())
2015        }
2016    }
2017    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2018        fidl::encoding::Encode<ControlGetIdResponse, D> for (T0,)
2019    {
2020        #[inline]
2021        unsafe fn encode(
2022            self,
2023            encoder: &mut fidl::encoding::Encoder<'_, D>,
2024            offset: usize,
2025            depth: fidl::encoding::Depth,
2026        ) -> fidl::Result<()> {
2027            encoder.debug_check_bounds::<ControlGetIdResponse>(offset);
2028            // Zero out padding regions. There's no need to apply masks
2029            // because the unmasked parts will be overwritten by fields.
2030            // Write the fields.
2031            self.0.encode(encoder, offset + 0, depth)?;
2032            Ok(())
2033        }
2034    }
2035
2036    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlGetIdResponse {
2037        #[inline(always)]
2038        fn new_empty() -> Self {
2039            Self { id: fidl::new_empty!(u64, D) }
2040        }
2041
2042        #[inline]
2043        unsafe fn decode(
2044            &mut self,
2045            decoder: &mut fidl::encoding::Decoder<'_, D>,
2046            offset: usize,
2047            _depth: fidl::encoding::Depth,
2048        ) -> fidl::Result<()> {
2049            decoder.debug_check_bounds::<Self>(offset);
2050            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2051            // Verify that padding bytes are zero.
2052            // Copy from the buffer into the object.
2053            unsafe {
2054                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2055            }
2056            Ok(())
2057        }
2058    }
2059
2060    impl fidl::encoding::ValueTypeMarker for ControlOnInterfaceRemovedRequest {
2061        type Borrowed<'a> = &'a Self;
2062        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2063            value
2064        }
2065    }
2066
2067    unsafe impl fidl::encoding::TypeMarker for ControlOnInterfaceRemovedRequest {
2068        type Owned = Self;
2069
2070        #[inline(always)]
2071        fn inline_align(_context: fidl::encoding::Context) -> usize {
2072            4
2073        }
2074
2075        #[inline(always)]
2076        fn inline_size(_context: fidl::encoding::Context) -> usize {
2077            4
2078        }
2079    }
2080
2081    unsafe impl<D: fidl::encoding::ResourceDialect>
2082        fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D>
2083        for &ControlOnInterfaceRemovedRequest
2084    {
2085        #[inline]
2086        unsafe fn encode(
2087            self,
2088            encoder: &mut fidl::encoding::Encoder<'_, D>,
2089            offset: usize,
2090            _depth: fidl::encoding::Depth,
2091        ) -> fidl::Result<()> {
2092            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2093            // Delegate to tuple encoding.
2094            fidl::encoding::Encode::<ControlOnInterfaceRemovedRequest, D>::encode(
2095                (<InterfaceRemovedReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
2096                encoder,
2097                offset,
2098                _depth,
2099            )
2100        }
2101    }
2102    unsafe impl<
2103            D: fidl::encoding::ResourceDialect,
2104            T0: fidl::encoding::Encode<InterfaceRemovedReason, D>,
2105        > fidl::encoding::Encode<ControlOnInterfaceRemovedRequest, D> for (T0,)
2106    {
2107        #[inline]
2108        unsafe fn encode(
2109            self,
2110            encoder: &mut fidl::encoding::Encoder<'_, D>,
2111            offset: usize,
2112            depth: fidl::encoding::Depth,
2113        ) -> fidl::Result<()> {
2114            encoder.debug_check_bounds::<ControlOnInterfaceRemovedRequest>(offset);
2115            // Zero out padding regions. There's no need to apply masks
2116            // because the unmasked parts will be overwritten by fields.
2117            // Write the fields.
2118            self.0.encode(encoder, offset + 0, depth)?;
2119            Ok(())
2120        }
2121    }
2122
2123    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2124        for ControlOnInterfaceRemovedRequest
2125    {
2126        #[inline(always)]
2127        fn new_empty() -> Self {
2128            Self { reason: fidl::new_empty!(InterfaceRemovedReason, D) }
2129        }
2130
2131        #[inline]
2132        unsafe fn decode(
2133            &mut self,
2134            decoder: &mut fidl::encoding::Decoder<'_, D>,
2135            offset: usize,
2136            _depth: fidl::encoding::Depth,
2137        ) -> fidl::Result<()> {
2138            decoder.debug_check_bounds::<Self>(offset);
2139            // Verify that padding bytes are zero.
2140            fidl::decode!(
2141                InterfaceRemovedReason,
2142                D,
2143                &mut self.reason,
2144                decoder,
2145                offset + 0,
2146                _depth
2147            )?;
2148            Ok(())
2149        }
2150    }
2151
2152    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressRequest {
2153        type Borrowed<'a> = &'a Self;
2154        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2155            value
2156        }
2157    }
2158
2159    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressRequest {
2160        type Owned = Self;
2161
2162        #[inline(always)]
2163        fn inline_align(_context: fidl::encoding::Context) -> usize {
2164            8
2165        }
2166
2167        #[inline(always)]
2168        fn inline_size(_context: fidl::encoding::Context) -> usize {
2169            24
2170        }
2171    }
2172
2173    unsafe impl<D: fidl::encoding::ResourceDialect>
2174        fidl::encoding::Encode<ControlRemoveAddressRequest, D> for &ControlRemoveAddressRequest
2175    {
2176        #[inline]
2177        unsafe fn encode(
2178            self,
2179            encoder: &mut fidl::encoding::Encoder<'_, D>,
2180            offset: usize,
2181            _depth: fidl::encoding::Depth,
2182        ) -> fidl::Result<()> {
2183            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2184            // Delegate to tuple encoding.
2185            fidl::encoding::Encode::<ControlRemoveAddressRequest, D>::encode(
2186                (<fidl_fuchsia_net__common::Subnet as fidl::encoding::ValueTypeMarker>::borrow(
2187                    &self.address,
2188                ),),
2189                encoder,
2190                offset,
2191                _depth,
2192            )
2193        }
2194    }
2195    unsafe impl<
2196            D: fidl::encoding::ResourceDialect,
2197            T0: fidl::encoding::Encode<fidl_fuchsia_net__common::Subnet, D>,
2198        > fidl::encoding::Encode<ControlRemoveAddressRequest, D> for (T0,)
2199    {
2200        #[inline]
2201        unsafe fn encode(
2202            self,
2203            encoder: &mut fidl::encoding::Encoder<'_, D>,
2204            offset: usize,
2205            depth: fidl::encoding::Depth,
2206        ) -> fidl::Result<()> {
2207            encoder.debug_check_bounds::<ControlRemoveAddressRequest>(offset);
2208            // Zero out padding regions. There's no need to apply masks
2209            // because the unmasked parts will be overwritten by fields.
2210            // Write the fields.
2211            self.0.encode(encoder, offset + 0, depth)?;
2212            Ok(())
2213        }
2214    }
2215
2216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2217        for ControlRemoveAddressRequest
2218    {
2219        #[inline(always)]
2220        fn new_empty() -> Self {
2221            Self { address: fidl::new_empty!(fidl_fuchsia_net__common::Subnet, D) }
2222        }
2223
2224        #[inline]
2225        unsafe fn decode(
2226            &mut self,
2227            decoder: &mut fidl::encoding::Decoder<'_, D>,
2228            offset: usize,
2229            _depth: fidl::encoding::Depth,
2230        ) -> fidl::Result<()> {
2231            decoder.debug_check_bounds::<Self>(offset);
2232            // Verify that padding bytes are zero.
2233            fidl::decode!(
2234                fidl_fuchsia_net__common::Subnet,
2235                D,
2236                &mut self.address,
2237                decoder,
2238                offset + 0,
2239                _depth
2240            )?;
2241            Ok(())
2242        }
2243    }
2244
2245    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationRequest {
2246        type Borrowed<'a> = &'a Self;
2247        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2248            value
2249        }
2250    }
2251
2252    unsafe impl fidl::encoding::TypeMarker for ControlSetConfigurationRequest {
2253        type Owned = Self;
2254
2255        #[inline(always)]
2256        fn inline_align(_context: fidl::encoding::Context) -> usize {
2257            8
2258        }
2259
2260        #[inline(always)]
2261        fn inline_size(_context: fidl::encoding::Context) -> usize {
2262            16
2263        }
2264    }
2265
2266    unsafe impl<D: fidl::encoding::ResourceDialect>
2267        fidl::encoding::Encode<ControlSetConfigurationRequest, D>
2268        for &ControlSetConfigurationRequest
2269    {
2270        #[inline]
2271        unsafe fn encode(
2272            self,
2273            encoder: &mut fidl::encoding::Encoder<'_, D>,
2274            offset: usize,
2275            _depth: fidl::encoding::Depth,
2276        ) -> fidl::Result<()> {
2277            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2278            // Delegate to tuple encoding.
2279            fidl::encoding::Encode::<ControlSetConfigurationRequest, D>::encode(
2280                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2281                encoder,
2282                offset,
2283                _depth,
2284            )
2285        }
2286    }
2287    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2288        fidl::encoding::Encode<ControlSetConfigurationRequest, D> for (T0,)
2289    {
2290        #[inline]
2291        unsafe fn encode(
2292            self,
2293            encoder: &mut fidl::encoding::Encoder<'_, D>,
2294            offset: usize,
2295            depth: fidl::encoding::Depth,
2296        ) -> fidl::Result<()> {
2297            encoder.debug_check_bounds::<ControlSetConfigurationRequest>(offset);
2298            // Zero out padding regions. There's no need to apply masks
2299            // because the unmasked parts will be overwritten by fields.
2300            // Write the fields.
2301            self.0.encode(encoder, offset + 0, depth)?;
2302            Ok(())
2303        }
2304    }
2305
2306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2307        for ControlSetConfigurationRequest
2308    {
2309        #[inline(always)]
2310        fn new_empty() -> Self {
2311            Self { config: fidl::new_empty!(Configuration, D) }
2312        }
2313
2314        #[inline]
2315        unsafe fn decode(
2316            &mut self,
2317            decoder: &mut fidl::encoding::Decoder<'_, D>,
2318            offset: usize,
2319            _depth: fidl::encoding::Depth,
2320        ) -> fidl::Result<()> {
2321            decoder.debug_check_bounds::<Self>(offset);
2322            // Verify that padding bytes are zero.
2323            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2324            Ok(())
2325        }
2326    }
2327
2328    impl fidl::encoding::ValueTypeMarker for ControlDisableResponse {
2329        type Borrowed<'a> = &'a Self;
2330        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2331            value
2332        }
2333    }
2334
2335    unsafe impl fidl::encoding::TypeMarker for ControlDisableResponse {
2336        type Owned = Self;
2337
2338        #[inline(always)]
2339        fn inline_align(_context: fidl::encoding::Context) -> usize {
2340            1
2341        }
2342
2343        #[inline(always)]
2344        fn inline_size(_context: fidl::encoding::Context) -> usize {
2345            1
2346        }
2347    }
2348
2349    unsafe impl<D: fidl::encoding::ResourceDialect>
2350        fidl::encoding::Encode<ControlDisableResponse, D> for &ControlDisableResponse
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::<ControlDisableResponse>(offset);
2360            // Delegate to tuple encoding.
2361            fidl::encoding::Encode::<ControlDisableResponse, D>::encode(
2362                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_disable),),
2363                encoder,
2364                offset,
2365                _depth,
2366            )
2367        }
2368    }
2369    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2370        fidl::encoding::Encode<ControlDisableResponse, 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::<ControlDisableResponse>(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 ControlDisableResponse
2390    {
2391        #[inline(always)]
2392        fn new_empty() -> Self {
2393            Self { did_disable: fidl::new_empty!(bool, 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!(bool, D, &mut self.did_disable, decoder, offset + 0, _depth)?;
2406            Ok(())
2407        }
2408    }
2409
2410    impl fidl::encoding::ValueTypeMarker for ControlEnableResponse {
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 ControlEnableResponse {
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> fidl::encoding::Encode<ControlEnableResponse, D>
2432        for &ControlEnableResponse
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::<ControlEnableResponse>(offset);
2442            // Delegate to tuple encoding.
2443            fidl::encoding::Encode::<ControlEnableResponse, D>::encode(
2444                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_enable),),
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<ControlEnableResponse, 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::<ControlEnableResponse>(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> for ControlEnableResponse {
2471        #[inline(always)]
2472        fn new_empty() -> Self {
2473            Self { did_enable: fidl::new_empty!(bool, D) }
2474        }
2475
2476        #[inline]
2477        unsafe fn decode(
2478            &mut self,
2479            decoder: &mut fidl::encoding::Decoder<'_, D>,
2480            offset: usize,
2481            _depth: fidl::encoding::Depth,
2482        ) -> fidl::Result<()> {
2483            decoder.debug_check_bounds::<Self>(offset);
2484            // Verify that padding bytes are zero.
2485            fidl::decode!(bool, D, &mut self.did_enable, decoder, offset + 0, _depth)?;
2486            Ok(())
2487        }
2488    }
2489
2490    impl fidl::encoding::ValueTypeMarker for ControlGetConfigurationResponse {
2491        type Borrowed<'a> = &'a Self;
2492        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2493            value
2494        }
2495    }
2496
2497    unsafe impl fidl::encoding::TypeMarker for ControlGetConfigurationResponse {
2498        type Owned = Self;
2499
2500        #[inline(always)]
2501        fn inline_align(_context: fidl::encoding::Context) -> usize {
2502            8
2503        }
2504
2505        #[inline(always)]
2506        fn inline_size(_context: fidl::encoding::Context) -> usize {
2507            16
2508        }
2509    }
2510
2511    unsafe impl<D: fidl::encoding::ResourceDialect>
2512        fidl::encoding::Encode<ControlGetConfigurationResponse, D>
2513        for &ControlGetConfigurationResponse
2514    {
2515        #[inline]
2516        unsafe fn encode(
2517            self,
2518            encoder: &mut fidl::encoding::Encoder<'_, D>,
2519            offset: usize,
2520            _depth: fidl::encoding::Depth,
2521        ) -> fidl::Result<()> {
2522            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2523            // Delegate to tuple encoding.
2524            fidl::encoding::Encode::<ControlGetConfigurationResponse, D>::encode(
2525                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
2526                encoder,
2527                offset,
2528                _depth,
2529            )
2530        }
2531    }
2532    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2533        fidl::encoding::Encode<ControlGetConfigurationResponse, D> for (T0,)
2534    {
2535        #[inline]
2536        unsafe fn encode(
2537            self,
2538            encoder: &mut fidl::encoding::Encoder<'_, D>,
2539            offset: usize,
2540            depth: fidl::encoding::Depth,
2541        ) -> fidl::Result<()> {
2542            encoder.debug_check_bounds::<ControlGetConfigurationResponse>(offset);
2543            // Zero out padding regions. There's no need to apply masks
2544            // because the unmasked parts will be overwritten by fields.
2545            // Write the fields.
2546            self.0.encode(encoder, offset + 0, depth)?;
2547            Ok(())
2548        }
2549    }
2550
2551    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2552        for ControlGetConfigurationResponse
2553    {
2554        #[inline(always)]
2555        fn new_empty() -> Self {
2556            Self { config: fidl::new_empty!(Configuration, D) }
2557        }
2558
2559        #[inline]
2560        unsafe fn decode(
2561            &mut self,
2562            decoder: &mut fidl::encoding::Decoder<'_, D>,
2563            offset: usize,
2564            _depth: fidl::encoding::Depth,
2565        ) -> fidl::Result<()> {
2566            decoder.debug_check_bounds::<Self>(offset);
2567            // Verify that padding bytes are zero.
2568            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
2569            Ok(())
2570        }
2571    }
2572
2573    impl fidl::encoding::ValueTypeMarker for ControlRemoveAddressResponse {
2574        type Borrowed<'a> = &'a Self;
2575        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2576            value
2577        }
2578    }
2579
2580    unsafe impl fidl::encoding::TypeMarker for ControlRemoveAddressResponse {
2581        type Owned = Self;
2582
2583        #[inline(always)]
2584        fn inline_align(_context: fidl::encoding::Context) -> usize {
2585            1
2586        }
2587
2588        #[inline(always)]
2589        fn inline_size(_context: fidl::encoding::Context) -> usize {
2590            1
2591        }
2592    }
2593
2594    unsafe impl<D: fidl::encoding::ResourceDialect>
2595        fidl::encoding::Encode<ControlRemoveAddressResponse, D> for &ControlRemoveAddressResponse
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::<ControlRemoveAddressResponse>(offset);
2605            // Delegate to tuple encoding.
2606            fidl::encoding::Encode::<ControlRemoveAddressResponse, D>::encode(
2607                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.did_remove),),
2608                encoder,
2609                offset,
2610                _depth,
2611            )
2612        }
2613    }
2614    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
2615        fidl::encoding::Encode<ControlRemoveAddressResponse, 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::<ControlRemoveAddressResponse>(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 ControlRemoveAddressResponse
2635    {
2636        #[inline(always)]
2637        fn new_empty() -> Self {
2638            Self { did_remove: fidl::new_empty!(bool, 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!(bool, D, &mut self.did_remove, decoder, offset + 0, _depth)?;
2651            Ok(())
2652        }
2653    }
2654
2655    impl fidl::encoding::ValueTypeMarker for ControlSetConfigurationResponse {
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 ControlSetConfigurationResponse {
2663        type Owned = Self;
2664
2665        #[inline(always)]
2666        fn inline_align(_context: fidl::encoding::Context) -> usize {
2667            8
2668        }
2669
2670        #[inline(always)]
2671        fn inline_size(_context: fidl::encoding::Context) -> usize {
2672            16
2673        }
2674    }
2675
2676    unsafe impl<D: fidl::encoding::ResourceDialect>
2677        fidl::encoding::Encode<ControlSetConfigurationResponse, D>
2678        for &ControlSetConfigurationResponse
2679    {
2680        #[inline]
2681        unsafe fn encode(
2682            self,
2683            encoder: &mut fidl::encoding::Encoder<'_, D>,
2684            offset: usize,
2685            _depth: fidl::encoding::Depth,
2686        ) -> fidl::Result<()> {
2687            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2688            // Delegate to tuple encoding.
2689            fidl::encoding::Encode::<ControlSetConfigurationResponse, D>::encode(
2690                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.previous_config),),
2691                encoder,
2692                offset,
2693                _depth,
2694            )
2695        }
2696    }
2697    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
2698        fidl::encoding::Encode<ControlSetConfigurationResponse, D> for (T0,)
2699    {
2700        #[inline]
2701        unsafe fn encode(
2702            self,
2703            encoder: &mut fidl::encoding::Encoder<'_, D>,
2704            offset: usize,
2705            depth: fidl::encoding::Depth,
2706        ) -> fidl::Result<()> {
2707            encoder.debug_check_bounds::<ControlSetConfigurationResponse>(offset);
2708            // Zero out padding regions. There's no need to apply masks
2709            // because the unmasked parts will be overwritten by fields.
2710            // Write the fields.
2711            self.0.encode(encoder, offset + 0, depth)?;
2712            Ok(())
2713        }
2714    }
2715
2716    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2717        for ControlSetConfigurationResponse
2718    {
2719        #[inline(always)]
2720        fn new_empty() -> Self {
2721            Self { previous_config: fidl::new_empty!(Configuration, D) }
2722        }
2723
2724        #[inline]
2725        unsafe fn decode(
2726            &mut self,
2727            decoder: &mut fidl::encoding::Decoder<'_, D>,
2728            offset: usize,
2729            _depth: fidl::encoding::Depth,
2730        ) -> fidl::Result<()> {
2731            decoder.debug_check_bounds::<Self>(offset);
2732            // Verify that padding bytes are zero.
2733            fidl::decode!(
2734                Configuration,
2735                D,
2736                &mut self.previous_config,
2737                decoder,
2738                offset + 0,
2739                _depth
2740            )?;
2741            Ok(())
2742        }
2743    }
2744
2745    impl fidl::encoding::ValueTypeMarker for Empty {
2746        type Borrowed<'a> = &'a Self;
2747        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2748            value
2749        }
2750    }
2751
2752    unsafe impl fidl::encoding::TypeMarker for Empty {
2753        type Owned = Self;
2754
2755        #[inline(always)]
2756        fn inline_align(_context: fidl::encoding::Context) -> usize {
2757            1
2758        }
2759
2760        #[inline(always)]
2761        fn inline_size(_context: fidl::encoding::Context) -> usize {
2762            1
2763        }
2764    }
2765
2766    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
2767        #[inline]
2768        unsafe fn encode(
2769            self,
2770            encoder: &mut fidl::encoding::Encoder<'_, D>,
2771            offset: usize,
2772            _depth: fidl::encoding::Depth,
2773        ) -> fidl::Result<()> {
2774            encoder.debug_check_bounds::<Empty>(offset);
2775            encoder.write_num(0u8, offset);
2776            Ok(())
2777        }
2778    }
2779
2780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
2781        #[inline(always)]
2782        fn new_empty() -> Self {
2783            Self
2784        }
2785
2786        #[inline]
2787        unsafe fn decode(
2788            &mut self,
2789            decoder: &mut fidl::encoding::Decoder<'_, D>,
2790            offset: usize,
2791            _depth: fidl::encoding::Depth,
2792        ) -> fidl::Result<()> {
2793            decoder.debug_check_bounds::<Self>(offset);
2794            match decoder.read_num::<u8>(offset) {
2795                0 => Ok(()),
2796                _ => Err(fidl::Error::Invalid),
2797            }
2798        }
2799    }
2800
2801    impl AddressParameters {
2802        #[inline(always)]
2803        fn max_ordinal_present(&self) -> u64 {
2804            if let Some(_) = self.perform_dad {
2805                return 4;
2806            }
2807            if let Some(_) = self.add_subnet_route {
2808                return 3;
2809            }
2810            if let Some(_) = self.temporary {
2811                return 2;
2812            }
2813            if let Some(_) = self.initial_properties {
2814                return 1;
2815            }
2816            0
2817        }
2818    }
2819
2820    impl fidl::encoding::ValueTypeMarker for AddressParameters {
2821        type Borrowed<'a> = &'a Self;
2822        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2823            value
2824        }
2825    }
2826
2827    unsafe impl fidl::encoding::TypeMarker for AddressParameters {
2828        type Owned = Self;
2829
2830        #[inline(always)]
2831        fn inline_align(_context: fidl::encoding::Context) -> usize {
2832            8
2833        }
2834
2835        #[inline(always)]
2836        fn inline_size(_context: fidl::encoding::Context) -> usize {
2837            16
2838        }
2839    }
2840
2841    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressParameters, D>
2842        for &AddressParameters
2843    {
2844        unsafe fn encode(
2845            self,
2846            encoder: &mut fidl::encoding::Encoder<'_, D>,
2847            offset: usize,
2848            mut depth: fidl::encoding::Depth,
2849        ) -> fidl::Result<()> {
2850            encoder.debug_check_bounds::<AddressParameters>(offset);
2851            // Vector header
2852            let max_ordinal: u64 = self.max_ordinal_present();
2853            encoder.write_num(max_ordinal, offset);
2854            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2855            // Calling encoder.out_of_line_offset(0) is not allowed.
2856            if max_ordinal == 0 {
2857                return Ok(());
2858            }
2859            depth.increment()?;
2860            let envelope_size = 8;
2861            let bytes_len = max_ordinal as usize * envelope_size;
2862            #[allow(unused_variables)]
2863            let offset = encoder.out_of_line_offset(bytes_len);
2864            let mut _prev_end_offset: usize = 0;
2865            if 1 > max_ordinal {
2866                return Ok(());
2867            }
2868
2869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2870            // are envelope_size bytes.
2871            let cur_offset: usize = (1 - 1) * envelope_size;
2872
2873            // Zero reserved fields.
2874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2875
2876            // Safety:
2877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2879            //   envelope_size bytes, there is always sufficient room.
2880            fidl::encoding::encode_in_envelope_optional::<AddressProperties, D>(
2881                self.initial_properties
2882                    .as_ref()
2883                    .map(<AddressProperties as fidl::encoding::ValueTypeMarker>::borrow),
2884                encoder,
2885                offset + cur_offset,
2886                depth,
2887            )?;
2888
2889            _prev_end_offset = cur_offset + envelope_size;
2890            if 2 > max_ordinal {
2891                return Ok(());
2892            }
2893
2894            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2895            // are envelope_size bytes.
2896            let cur_offset: usize = (2 - 1) * envelope_size;
2897
2898            // Zero reserved fields.
2899            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2900
2901            // Safety:
2902            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2903            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2904            //   envelope_size bytes, there is always sufficient room.
2905            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2906                self.temporary.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2907                encoder,
2908                offset + cur_offset,
2909                depth,
2910            )?;
2911
2912            _prev_end_offset = cur_offset + envelope_size;
2913            if 3 > max_ordinal {
2914                return Ok(());
2915            }
2916
2917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2918            // are envelope_size bytes.
2919            let cur_offset: usize = (3 - 1) * envelope_size;
2920
2921            // Zero reserved fields.
2922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2923
2924            // Safety:
2925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2927            //   envelope_size bytes, there is always sufficient room.
2928            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2929                self.add_subnet_route
2930                    .as_ref()
2931                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2932                encoder,
2933                offset + cur_offset,
2934                depth,
2935            )?;
2936
2937            _prev_end_offset = cur_offset + envelope_size;
2938            if 4 > max_ordinal {
2939                return Ok(());
2940            }
2941
2942            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2943            // are envelope_size bytes.
2944            let cur_offset: usize = (4 - 1) * envelope_size;
2945
2946            // Zero reserved fields.
2947            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2948
2949            // Safety:
2950            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2951            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2952            //   envelope_size bytes, there is always sufficient room.
2953            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2954                self.perform_dad.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2955                encoder,
2956                offset + cur_offset,
2957                depth,
2958            )?;
2959
2960            _prev_end_offset = cur_offset + envelope_size;
2961
2962            Ok(())
2963        }
2964    }
2965
2966    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressParameters {
2967        #[inline(always)]
2968        fn new_empty() -> Self {
2969            Self::default()
2970        }
2971
2972        unsafe fn decode(
2973            &mut self,
2974            decoder: &mut fidl::encoding::Decoder<'_, D>,
2975            offset: usize,
2976            mut depth: fidl::encoding::Depth,
2977        ) -> fidl::Result<()> {
2978            decoder.debug_check_bounds::<Self>(offset);
2979            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2980                None => return Err(fidl::Error::NotNullable),
2981                Some(len) => len,
2982            };
2983            // Calling decoder.out_of_line_offset(0) is not allowed.
2984            if len == 0 {
2985                return Ok(());
2986            };
2987            depth.increment()?;
2988            let envelope_size = 8;
2989            let bytes_len = len * envelope_size;
2990            let offset = decoder.out_of_line_offset(bytes_len)?;
2991            // Decode the envelope for each type.
2992            let mut _next_ordinal_to_read = 0;
2993            let mut next_offset = offset;
2994            let end_offset = offset + bytes_len;
2995            _next_ordinal_to_read += 1;
2996            if next_offset >= end_offset {
2997                return Ok(());
2998            }
2999
3000            // Decode unknown envelopes for gaps in ordinals.
3001            while _next_ordinal_to_read < 1 {
3002                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3003                _next_ordinal_to_read += 1;
3004                next_offset += envelope_size;
3005            }
3006
3007            let next_out_of_line = decoder.next_out_of_line();
3008            let handles_before = decoder.remaining_handles();
3009            if let Some((inlined, num_bytes, num_handles)) =
3010                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3011            {
3012                let member_inline_size =
3013                    <AddressProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3014                if inlined != (member_inline_size <= 4) {
3015                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3016                }
3017                let inner_offset;
3018                let mut inner_depth = depth.clone();
3019                if inlined {
3020                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3021                    inner_offset = next_offset;
3022                } else {
3023                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3024                    inner_depth.increment()?;
3025                }
3026                let val_ref = self
3027                    .initial_properties
3028                    .get_or_insert_with(|| fidl::new_empty!(AddressProperties, D));
3029                fidl::decode!(AddressProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
3030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3031                {
3032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3033                }
3034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3036                }
3037            }
3038
3039            next_offset += envelope_size;
3040            _next_ordinal_to_read += 1;
3041            if next_offset >= end_offset {
3042                return Ok(());
3043            }
3044
3045            // Decode unknown envelopes for gaps in ordinals.
3046            while _next_ordinal_to_read < 2 {
3047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3048                _next_ordinal_to_read += 1;
3049                next_offset += envelope_size;
3050            }
3051
3052            let next_out_of_line = decoder.next_out_of_line();
3053            let handles_before = decoder.remaining_handles();
3054            if let Some((inlined, num_bytes, num_handles)) =
3055                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3056            {
3057                let member_inline_size =
3058                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3059                if inlined != (member_inline_size <= 4) {
3060                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3061                }
3062                let inner_offset;
3063                let mut inner_depth = depth.clone();
3064                if inlined {
3065                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3066                    inner_offset = next_offset;
3067                } else {
3068                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3069                    inner_depth.increment()?;
3070                }
3071                let val_ref = self.temporary.get_or_insert_with(|| fidl::new_empty!(bool, D));
3072                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3073                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3074                {
3075                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3076                }
3077                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3078                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3079                }
3080            }
3081
3082            next_offset += envelope_size;
3083            _next_ordinal_to_read += 1;
3084            if next_offset >= end_offset {
3085                return Ok(());
3086            }
3087
3088            // Decode unknown envelopes for gaps in ordinals.
3089            while _next_ordinal_to_read < 3 {
3090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3091                _next_ordinal_to_read += 1;
3092                next_offset += envelope_size;
3093            }
3094
3095            let next_out_of_line = decoder.next_out_of_line();
3096            let handles_before = decoder.remaining_handles();
3097            if let Some((inlined, num_bytes, num_handles)) =
3098                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3099            {
3100                let member_inline_size =
3101                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3102                if inlined != (member_inline_size <= 4) {
3103                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3104                }
3105                let inner_offset;
3106                let mut inner_depth = depth.clone();
3107                if inlined {
3108                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3109                    inner_offset = next_offset;
3110                } else {
3111                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3112                    inner_depth.increment()?;
3113                }
3114                let val_ref =
3115                    self.add_subnet_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
3116                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3117                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3118                {
3119                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3120                }
3121                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3122                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3123                }
3124            }
3125
3126            next_offset += envelope_size;
3127            _next_ordinal_to_read += 1;
3128            if next_offset >= end_offset {
3129                return Ok(());
3130            }
3131
3132            // Decode unknown envelopes for gaps in ordinals.
3133            while _next_ordinal_to_read < 4 {
3134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3135                _next_ordinal_to_read += 1;
3136                next_offset += envelope_size;
3137            }
3138
3139            let next_out_of_line = decoder.next_out_of_line();
3140            let handles_before = decoder.remaining_handles();
3141            if let Some((inlined, num_bytes, num_handles)) =
3142                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3143            {
3144                let member_inline_size =
3145                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3146                if inlined != (member_inline_size <= 4) {
3147                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3148                }
3149                let inner_offset;
3150                let mut inner_depth = depth.clone();
3151                if inlined {
3152                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3153                    inner_offset = next_offset;
3154                } else {
3155                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3156                    inner_depth.increment()?;
3157                }
3158                let val_ref = self.perform_dad.get_or_insert_with(|| fidl::new_empty!(bool, D));
3159                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3160                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3161                {
3162                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3163                }
3164                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3165                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3166                }
3167            }
3168
3169            next_offset += envelope_size;
3170
3171            // Decode the remaining unknown envelopes.
3172            while next_offset < end_offset {
3173                _next_ordinal_to_read += 1;
3174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3175                next_offset += envelope_size;
3176            }
3177
3178            Ok(())
3179        }
3180    }
3181
3182    impl AddressProperties {
3183        #[inline(always)]
3184        fn max_ordinal_present(&self) -> u64 {
3185            if let Some(_) = self.valid_lifetime_end {
3186                return 2;
3187            }
3188            if let Some(_) = self.preferred_lifetime_info {
3189                return 1;
3190            }
3191            0
3192        }
3193    }
3194
3195    impl fidl::encoding::ValueTypeMarker for AddressProperties {
3196        type Borrowed<'a> = &'a Self;
3197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3198            value
3199        }
3200    }
3201
3202    unsafe impl fidl::encoding::TypeMarker for AddressProperties {
3203        type Owned = Self;
3204
3205        #[inline(always)]
3206        fn inline_align(_context: fidl::encoding::Context) -> usize {
3207            8
3208        }
3209
3210        #[inline(always)]
3211        fn inline_size(_context: fidl::encoding::Context) -> usize {
3212            16
3213        }
3214    }
3215
3216    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AddressProperties, D>
3217        for &AddressProperties
3218    {
3219        unsafe fn encode(
3220            self,
3221            encoder: &mut fidl::encoding::Encoder<'_, D>,
3222            offset: usize,
3223            mut depth: fidl::encoding::Depth,
3224        ) -> fidl::Result<()> {
3225            encoder.debug_check_bounds::<AddressProperties>(offset);
3226            // Vector header
3227            let max_ordinal: u64 = self.max_ordinal_present();
3228            encoder.write_num(max_ordinal, offset);
3229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3230            // Calling encoder.out_of_line_offset(0) is not allowed.
3231            if max_ordinal == 0 {
3232                return Ok(());
3233            }
3234            depth.increment()?;
3235            let envelope_size = 8;
3236            let bytes_len = max_ordinal as usize * envelope_size;
3237            #[allow(unused_variables)]
3238            let offset = encoder.out_of_line_offset(bytes_len);
3239            let mut _prev_end_offset: usize = 0;
3240            if 1 > max_ordinal {
3241                return Ok(());
3242            }
3243
3244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3245            // are envelope_size bytes.
3246            let cur_offset: usize = (1 - 1) * envelope_size;
3247
3248            // Zero reserved fields.
3249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3250
3251            // Safety:
3252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3254            //   envelope_size bytes, there is always sufficient room.
3255            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo, D>(
3256            self.preferred_lifetime_info.as_ref().map(<fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
3257            encoder, offset + cur_offset, depth
3258        )?;
3259
3260            _prev_end_offset = cur_offset + envelope_size;
3261            if 2 > max_ordinal {
3262                return Ok(());
3263            }
3264
3265            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3266            // are envelope_size bytes.
3267            let cur_offset: usize = (2 - 1) * envelope_size;
3268
3269            // Zero reserved fields.
3270            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3271
3272            // Safety:
3273            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3274            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3275            //   envelope_size bytes, there is always sufficient room.
3276            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3277                self.valid_lifetime_end
3278                    .as_ref()
3279                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3280                encoder,
3281                offset + cur_offset,
3282                depth,
3283            )?;
3284
3285            _prev_end_offset = cur_offset + envelope_size;
3286
3287            Ok(())
3288        }
3289    }
3290
3291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AddressProperties {
3292        #[inline(always)]
3293        fn new_empty() -> Self {
3294            Self::default()
3295        }
3296
3297        unsafe fn decode(
3298            &mut self,
3299            decoder: &mut fidl::encoding::Decoder<'_, D>,
3300            offset: usize,
3301            mut depth: fidl::encoding::Depth,
3302        ) -> fidl::Result<()> {
3303            decoder.debug_check_bounds::<Self>(offset);
3304            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3305                None => return Err(fidl::Error::NotNullable),
3306                Some(len) => len,
3307            };
3308            // Calling decoder.out_of_line_offset(0) is not allowed.
3309            if len == 0 {
3310                return Ok(());
3311            };
3312            depth.increment()?;
3313            let envelope_size = 8;
3314            let bytes_len = len * envelope_size;
3315            let offset = decoder.out_of_line_offset(bytes_len)?;
3316            // Decode the envelope for each type.
3317            let mut _next_ordinal_to_read = 0;
3318            let mut next_offset = offset;
3319            let end_offset = offset + bytes_len;
3320            _next_ordinal_to_read += 1;
3321            if next_offset >= end_offset {
3322                return Ok(());
3323            }
3324
3325            // Decode unknown envelopes for gaps in ordinals.
3326            while _next_ordinal_to_read < 1 {
3327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3328                _next_ordinal_to_read += 1;
3329                next_offset += envelope_size;
3330            }
3331
3332            let next_out_of_line = decoder.next_out_of_line();
3333            let handles_before = decoder.remaining_handles();
3334            if let Some((inlined, num_bytes, num_handles)) =
3335                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3336            {
3337                let member_inline_size = <fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3338                if inlined != (member_inline_size <= 4) {
3339                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3340                }
3341                let inner_offset;
3342                let mut inner_depth = depth.clone();
3343                if inlined {
3344                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3345                    inner_offset = next_offset;
3346                } else {
3347                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3348                    inner_depth.increment()?;
3349                }
3350                let val_ref = self.preferred_lifetime_info.get_or_insert_with(|| {
3351                    fidl::new_empty!(fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo, D)
3352                });
3353                fidl::decode!(
3354                    fidl_fuchsia_net_interfaces__common::PreferredLifetimeInfo,
3355                    D,
3356                    val_ref,
3357                    decoder,
3358                    inner_offset,
3359                    inner_depth
3360                )?;
3361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3362                {
3363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3364                }
3365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3367                }
3368            }
3369
3370            next_offset += envelope_size;
3371            _next_ordinal_to_read += 1;
3372            if next_offset >= end_offset {
3373                return Ok(());
3374            }
3375
3376            // Decode unknown envelopes for gaps in ordinals.
3377            while _next_ordinal_to_read < 2 {
3378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3379                _next_ordinal_to_read += 1;
3380                next_offset += envelope_size;
3381            }
3382
3383            let next_out_of_line = decoder.next_out_of_line();
3384            let handles_before = decoder.remaining_handles();
3385            if let Some((inlined, num_bytes, num_handles)) =
3386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3387            {
3388                let member_inline_size =
3389                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3390                if inlined != (member_inline_size <= 4) {
3391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3392                }
3393                let inner_offset;
3394                let mut inner_depth = depth.clone();
3395                if inlined {
3396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3397                    inner_offset = next_offset;
3398                } else {
3399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3400                    inner_depth.increment()?;
3401                }
3402                let val_ref =
3403                    self.valid_lifetime_end.get_or_insert_with(|| fidl::new_empty!(i64, D));
3404                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3405                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3406                {
3407                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3408                }
3409                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3410                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3411                }
3412            }
3413
3414            next_offset += envelope_size;
3415
3416            // Decode the remaining unknown envelopes.
3417            while next_offset < end_offset {
3418                _next_ordinal_to_read += 1;
3419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3420                next_offset += envelope_size;
3421            }
3422
3423            Ok(())
3424        }
3425    }
3426
3427    impl ArpConfiguration {
3428        #[inline(always)]
3429        fn max_ordinal_present(&self) -> u64 {
3430            if let Some(_) = self.dad {
3431                return 2;
3432            }
3433            if let Some(_) = self.nud {
3434                return 1;
3435            }
3436            0
3437        }
3438    }
3439
3440    impl fidl::encoding::ValueTypeMarker for ArpConfiguration {
3441        type Borrowed<'a> = &'a Self;
3442        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3443            value
3444        }
3445    }
3446
3447    unsafe impl fidl::encoding::TypeMarker for ArpConfiguration {
3448        type Owned = Self;
3449
3450        #[inline(always)]
3451        fn inline_align(_context: fidl::encoding::Context) -> usize {
3452            8
3453        }
3454
3455        #[inline(always)]
3456        fn inline_size(_context: fidl::encoding::Context) -> usize {
3457            16
3458        }
3459    }
3460
3461    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ArpConfiguration, D>
3462        for &ArpConfiguration
3463    {
3464        unsafe fn encode(
3465            self,
3466            encoder: &mut fidl::encoding::Encoder<'_, D>,
3467            offset: usize,
3468            mut depth: fidl::encoding::Depth,
3469        ) -> fidl::Result<()> {
3470            encoder.debug_check_bounds::<ArpConfiguration>(offset);
3471            // Vector header
3472            let max_ordinal: u64 = self.max_ordinal_present();
3473            encoder.write_num(max_ordinal, offset);
3474            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3475            // Calling encoder.out_of_line_offset(0) is not allowed.
3476            if max_ordinal == 0 {
3477                return Ok(());
3478            }
3479            depth.increment()?;
3480            let envelope_size = 8;
3481            let bytes_len = max_ordinal as usize * envelope_size;
3482            #[allow(unused_variables)]
3483            let offset = encoder.out_of_line_offset(bytes_len);
3484            let mut _prev_end_offset: usize = 0;
3485            if 1 > max_ordinal {
3486                return Ok(());
3487            }
3488
3489            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3490            // are envelope_size bytes.
3491            let cur_offset: usize = (1 - 1) * envelope_size;
3492
3493            // Zero reserved fields.
3494            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3495
3496            // Safety:
3497            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3498            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3499            //   envelope_size bytes, there is always sufficient room.
3500            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
3501                self.nud
3502                    .as_ref()
3503                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3504                encoder,
3505                offset + cur_offset,
3506                depth,
3507            )?;
3508
3509            _prev_end_offset = cur_offset + envelope_size;
3510            if 2 > max_ordinal {
3511                return Ok(());
3512            }
3513
3514            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3515            // are envelope_size bytes.
3516            let cur_offset: usize = (2 - 1) * envelope_size;
3517
3518            // Zero reserved fields.
3519            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3520
3521            // Safety:
3522            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3523            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3524            //   envelope_size bytes, there is always sufficient room.
3525            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
3526                self.dad
3527                    .as_ref()
3528                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
3529                encoder,
3530                offset + cur_offset,
3531                depth,
3532            )?;
3533
3534            _prev_end_offset = cur_offset + envelope_size;
3535
3536            Ok(())
3537        }
3538    }
3539
3540    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ArpConfiguration {
3541        #[inline(always)]
3542        fn new_empty() -> Self {
3543            Self::default()
3544        }
3545
3546        unsafe fn decode(
3547            &mut self,
3548            decoder: &mut fidl::encoding::Decoder<'_, D>,
3549            offset: usize,
3550            mut depth: fidl::encoding::Depth,
3551        ) -> fidl::Result<()> {
3552            decoder.debug_check_bounds::<Self>(offset);
3553            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3554                None => return Err(fidl::Error::NotNullable),
3555                Some(len) => len,
3556            };
3557            // Calling decoder.out_of_line_offset(0) is not allowed.
3558            if len == 0 {
3559                return Ok(());
3560            };
3561            depth.increment()?;
3562            let envelope_size = 8;
3563            let bytes_len = len * envelope_size;
3564            let offset = decoder.out_of_line_offset(bytes_len)?;
3565            // Decode the envelope for each type.
3566            let mut _next_ordinal_to_read = 0;
3567            let mut next_offset = offset;
3568            let end_offset = offset + bytes_len;
3569            _next_ordinal_to_read += 1;
3570            if next_offset >= end_offset {
3571                return Ok(());
3572            }
3573
3574            // Decode unknown envelopes for gaps in ordinals.
3575            while _next_ordinal_to_read < 1 {
3576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3577                _next_ordinal_to_read += 1;
3578                next_offset += envelope_size;
3579            }
3580
3581            let next_out_of_line = decoder.next_out_of_line();
3582            let handles_before = decoder.remaining_handles();
3583            if let Some((inlined, num_bytes, num_handles)) =
3584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3585            {
3586                let member_inline_size =
3587                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3588                if inlined != (member_inline_size <= 4) {
3589                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3590                }
3591                let inner_offset;
3592                let mut inner_depth = depth.clone();
3593                if inlined {
3594                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3595                    inner_offset = next_offset;
3596                } else {
3597                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3598                    inner_depth.increment()?;
3599                }
3600                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
3601                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3602                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3603                {
3604                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3605                }
3606                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3607                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3608                }
3609            }
3610
3611            next_offset += envelope_size;
3612            _next_ordinal_to_read += 1;
3613            if next_offset >= end_offset {
3614                return Ok(());
3615            }
3616
3617            // Decode unknown envelopes for gaps in ordinals.
3618            while _next_ordinal_to_read < 2 {
3619                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3620                _next_ordinal_to_read += 1;
3621                next_offset += envelope_size;
3622            }
3623
3624            let next_out_of_line = decoder.next_out_of_line();
3625            let handles_before = decoder.remaining_handles();
3626            if let Some((inlined, num_bytes, num_handles)) =
3627                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3628            {
3629                let member_inline_size =
3630                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3631                if inlined != (member_inline_size <= 4) {
3632                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3633                }
3634                let inner_offset;
3635                let mut inner_depth = depth.clone();
3636                if inlined {
3637                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3638                    inner_offset = next_offset;
3639                } else {
3640                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3641                    inner_depth.increment()?;
3642                }
3643                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
3644                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
3645                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3646                {
3647                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3648                }
3649                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3650                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3651                }
3652            }
3653
3654            next_offset += envelope_size;
3655
3656            // Decode the remaining unknown envelopes.
3657            while next_offset < end_offset {
3658                _next_ordinal_to_read += 1;
3659                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3660                next_offset += envelope_size;
3661            }
3662
3663            Ok(())
3664        }
3665    }
3666
3667    impl Configuration {
3668        #[inline(always)]
3669        fn max_ordinal_present(&self) -> u64 {
3670            if let Some(_) = self.ipv6 {
3671                return 2;
3672            }
3673            if let Some(_) = self.ipv4 {
3674                return 1;
3675            }
3676            0
3677        }
3678    }
3679
3680    impl fidl::encoding::ValueTypeMarker for Configuration {
3681        type Borrowed<'a> = &'a Self;
3682        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3683            value
3684        }
3685    }
3686
3687    unsafe impl fidl::encoding::TypeMarker for Configuration {
3688        type Owned = Self;
3689
3690        #[inline(always)]
3691        fn inline_align(_context: fidl::encoding::Context) -> usize {
3692            8
3693        }
3694
3695        #[inline(always)]
3696        fn inline_size(_context: fidl::encoding::Context) -> usize {
3697            16
3698        }
3699    }
3700
3701    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Configuration, D>
3702        for &Configuration
3703    {
3704        unsafe fn encode(
3705            self,
3706            encoder: &mut fidl::encoding::Encoder<'_, D>,
3707            offset: usize,
3708            mut depth: fidl::encoding::Depth,
3709        ) -> fidl::Result<()> {
3710            encoder.debug_check_bounds::<Configuration>(offset);
3711            // Vector header
3712            let max_ordinal: u64 = self.max_ordinal_present();
3713            encoder.write_num(max_ordinal, offset);
3714            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3715            // Calling encoder.out_of_line_offset(0) is not allowed.
3716            if max_ordinal == 0 {
3717                return Ok(());
3718            }
3719            depth.increment()?;
3720            let envelope_size = 8;
3721            let bytes_len = max_ordinal as usize * envelope_size;
3722            #[allow(unused_variables)]
3723            let offset = encoder.out_of_line_offset(bytes_len);
3724            let mut _prev_end_offset: usize = 0;
3725            if 1 > max_ordinal {
3726                return Ok(());
3727            }
3728
3729            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3730            // are envelope_size bytes.
3731            let cur_offset: usize = (1 - 1) * envelope_size;
3732
3733            // Zero reserved fields.
3734            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3735
3736            // Safety:
3737            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3738            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3739            //   envelope_size bytes, there is always sufficient room.
3740            fidl::encoding::encode_in_envelope_optional::<Ipv4Configuration, D>(
3741                self.ipv4
3742                    .as_ref()
3743                    .map(<Ipv4Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3744                encoder,
3745                offset + cur_offset,
3746                depth,
3747            )?;
3748
3749            _prev_end_offset = cur_offset + envelope_size;
3750            if 2 > max_ordinal {
3751                return Ok(());
3752            }
3753
3754            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3755            // are envelope_size bytes.
3756            let cur_offset: usize = (2 - 1) * envelope_size;
3757
3758            // Zero reserved fields.
3759            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3760
3761            // Safety:
3762            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3763            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3764            //   envelope_size bytes, there is always sufficient room.
3765            fidl::encoding::encode_in_envelope_optional::<Ipv6Configuration, D>(
3766                self.ipv6
3767                    .as_ref()
3768                    .map(<Ipv6Configuration as fidl::encoding::ValueTypeMarker>::borrow),
3769                encoder,
3770                offset + cur_offset,
3771                depth,
3772            )?;
3773
3774            _prev_end_offset = cur_offset + envelope_size;
3775
3776            Ok(())
3777        }
3778    }
3779
3780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Configuration {
3781        #[inline(always)]
3782        fn new_empty() -> Self {
3783            Self::default()
3784        }
3785
3786        unsafe fn decode(
3787            &mut self,
3788            decoder: &mut fidl::encoding::Decoder<'_, D>,
3789            offset: usize,
3790            mut depth: fidl::encoding::Depth,
3791        ) -> fidl::Result<()> {
3792            decoder.debug_check_bounds::<Self>(offset);
3793            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3794                None => return Err(fidl::Error::NotNullable),
3795                Some(len) => len,
3796            };
3797            // Calling decoder.out_of_line_offset(0) is not allowed.
3798            if len == 0 {
3799                return Ok(());
3800            };
3801            depth.increment()?;
3802            let envelope_size = 8;
3803            let bytes_len = len * envelope_size;
3804            let offset = decoder.out_of_line_offset(bytes_len)?;
3805            // Decode the envelope for each type.
3806            let mut _next_ordinal_to_read = 0;
3807            let mut next_offset = offset;
3808            let end_offset = offset + bytes_len;
3809            _next_ordinal_to_read += 1;
3810            if next_offset >= end_offset {
3811                return Ok(());
3812            }
3813
3814            // Decode unknown envelopes for gaps in ordinals.
3815            while _next_ordinal_to_read < 1 {
3816                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3817                _next_ordinal_to_read += 1;
3818                next_offset += envelope_size;
3819            }
3820
3821            let next_out_of_line = decoder.next_out_of_line();
3822            let handles_before = decoder.remaining_handles();
3823            if let Some((inlined, num_bytes, num_handles)) =
3824                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3825            {
3826                let member_inline_size =
3827                    <Ipv4Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3828                if inlined != (member_inline_size <= 4) {
3829                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3830                }
3831                let inner_offset;
3832                let mut inner_depth = depth.clone();
3833                if inlined {
3834                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3835                    inner_offset = next_offset;
3836                } else {
3837                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3838                    inner_depth.increment()?;
3839                }
3840                let val_ref =
3841                    self.ipv4.get_or_insert_with(|| fidl::new_empty!(Ipv4Configuration, D));
3842                fidl::decode!(Ipv4Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3843                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3844                {
3845                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3846                }
3847                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3848                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3849                }
3850            }
3851
3852            next_offset += envelope_size;
3853            _next_ordinal_to_read += 1;
3854            if next_offset >= end_offset {
3855                return Ok(());
3856            }
3857
3858            // Decode unknown envelopes for gaps in ordinals.
3859            while _next_ordinal_to_read < 2 {
3860                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3861                _next_ordinal_to_read += 1;
3862                next_offset += envelope_size;
3863            }
3864
3865            let next_out_of_line = decoder.next_out_of_line();
3866            let handles_before = decoder.remaining_handles();
3867            if let Some((inlined, num_bytes, num_handles)) =
3868                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3869            {
3870                let member_inline_size =
3871                    <Ipv6Configuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3872                if inlined != (member_inline_size <= 4) {
3873                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3874                }
3875                let inner_offset;
3876                let mut inner_depth = depth.clone();
3877                if inlined {
3878                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3879                    inner_offset = next_offset;
3880                } else {
3881                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3882                    inner_depth.increment()?;
3883                }
3884                let val_ref =
3885                    self.ipv6.get_or_insert_with(|| fidl::new_empty!(Ipv6Configuration, D));
3886                fidl::decode!(Ipv6Configuration, D, val_ref, decoder, inner_offset, inner_depth)?;
3887                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3888                {
3889                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3890                }
3891                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3892                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3893                }
3894            }
3895
3896            next_offset += envelope_size;
3897
3898            // Decode the remaining unknown envelopes.
3899            while next_offset < end_offset {
3900                _next_ordinal_to_read += 1;
3901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3902                next_offset += envelope_size;
3903            }
3904
3905            Ok(())
3906        }
3907    }
3908
3909    impl DadConfiguration {
3910        #[inline(always)]
3911        fn max_ordinal_present(&self) -> u64 {
3912            if let Some(_) = self.transmits {
3913                return 1;
3914            }
3915            0
3916        }
3917    }
3918
3919    impl fidl::encoding::ValueTypeMarker for DadConfiguration {
3920        type Borrowed<'a> = &'a Self;
3921        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3922            value
3923        }
3924    }
3925
3926    unsafe impl fidl::encoding::TypeMarker for DadConfiguration {
3927        type Owned = Self;
3928
3929        #[inline(always)]
3930        fn inline_align(_context: fidl::encoding::Context) -> usize {
3931            8
3932        }
3933
3934        #[inline(always)]
3935        fn inline_size(_context: fidl::encoding::Context) -> usize {
3936            16
3937        }
3938    }
3939
3940    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DadConfiguration, D>
3941        for &DadConfiguration
3942    {
3943        unsafe fn encode(
3944            self,
3945            encoder: &mut fidl::encoding::Encoder<'_, D>,
3946            offset: usize,
3947            mut depth: fidl::encoding::Depth,
3948        ) -> fidl::Result<()> {
3949            encoder.debug_check_bounds::<DadConfiguration>(offset);
3950            // Vector header
3951            let max_ordinal: u64 = self.max_ordinal_present();
3952            encoder.write_num(max_ordinal, offset);
3953            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3954            // Calling encoder.out_of_line_offset(0) is not allowed.
3955            if max_ordinal == 0 {
3956                return Ok(());
3957            }
3958            depth.increment()?;
3959            let envelope_size = 8;
3960            let bytes_len = max_ordinal as usize * envelope_size;
3961            #[allow(unused_variables)]
3962            let offset = encoder.out_of_line_offset(bytes_len);
3963            let mut _prev_end_offset: usize = 0;
3964            if 1 > max_ordinal {
3965                return Ok(());
3966            }
3967
3968            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3969            // are envelope_size bytes.
3970            let cur_offset: usize = (1 - 1) * envelope_size;
3971
3972            // Zero reserved fields.
3973            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3974
3975            // Safety:
3976            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3977            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3978            //   envelope_size bytes, there is always sufficient room.
3979            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3980                self.transmits.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3981                encoder,
3982                offset + cur_offset,
3983                depth,
3984            )?;
3985
3986            _prev_end_offset = cur_offset + envelope_size;
3987
3988            Ok(())
3989        }
3990    }
3991
3992    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DadConfiguration {
3993        #[inline(always)]
3994        fn new_empty() -> Self {
3995            Self::default()
3996        }
3997
3998        unsafe fn decode(
3999            &mut self,
4000            decoder: &mut fidl::encoding::Decoder<'_, D>,
4001            offset: usize,
4002            mut depth: fidl::encoding::Depth,
4003        ) -> fidl::Result<()> {
4004            decoder.debug_check_bounds::<Self>(offset);
4005            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4006                None => return Err(fidl::Error::NotNullable),
4007                Some(len) => len,
4008            };
4009            // Calling decoder.out_of_line_offset(0) is not allowed.
4010            if len == 0 {
4011                return Ok(());
4012            };
4013            depth.increment()?;
4014            let envelope_size = 8;
4015            let bytes_len = len * envelope_size;
4016            let offset = decoder.out_of_line_offset(bytes_len)?;
4017            // Decode the envelope for each type.
4018            let mut _next_ordinal_to_read = 0;
4019            let mut next_offset = offset;
4020            let end_offset = offset + bytes_len;
4021            _next_ordinal_to_read += 1;
4022            if next_offset >= end_offset {
4023                return Ok(());
4024            }
4025
4026            // Decode unknown envelopes for gaps in ordinals.
4027            while _next_ordinal_to_read < 1 {
4028                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4029                _next_ordinal_to_read += 1;
4030                next_offset += envelope_size;
4031            }
4032
4033            let next_out_of_line = decoder.next_out_of_line();
4034            let handles_before = decoder.remaining_handles();
4035            if let Some((inlined, num_bytes, num_handles)) =
4036                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4037            {
4038                let member_inline_size =
4039                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4040                if inlined != (member_inline_size <= 4) {
4041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4042                }
4043                let inner_offset;
4044                let mut inner_depth = depth.clone();
4045                if inlined {
4046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4047                    inner_offset = next_offset;
4048                } else {
4049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4050                    inner_depth.increment()?;
4051                }
4052                let val_ref = self.transmits.get_or_insert_with(|| fidl::new_empty!(u16, D));
4053                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4054                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4055                {
4056                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4057                }
4058                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4059                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4060                }
4061            }
4062
4063            next_offset += envelope_size;
4064
4065            // Decode the remaining unknown envelopes.
4066            while next_offset < end_offset {
4067                _next_ordinal_to_read += 1;
4068                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4069                next_offset += envelope_size;
4070            }
4071
4072            Ok(())
4073        }
4074    }
4075
4076    impl IgmpConfiguration {
4077        #[inline(always)]
4078        fn max_ordinal_present(&self) -> u64 {
4079            if let Some(_) = self.version {
4080                return 1;
4081            }
4082            0
4083        }
4084    }
4085
4086    impl fidl::encoding::ValueTypeMarker for IgmpConfiguration {
4087        type Borrowed<'a> = &'a Self;
4088        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4089            value
4090        }
4091    }
4092
4093    unsafe impl fidl::encoding::TypeMarker for IgmpConfiguration {
4094        type Owned = Self;
4095
4096        #[inline(always)]
4097        fn inline_align(_context: fidl::encoding::Context) -> usize {
4098            8
4099        }
4100
4101        #[inline(always)]
4102        fn inline_size(_context: fidl::encoding::Context) -> usize {
4103            16
4104        }
4105    }
4106
4107    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IgmpConfiguration, D>
4108        for &IgmpConfiguration
4109    {
4110        unsafe fn encode(
4111            self,
4112            encoder: &mut fidl::encoding::Encoder<'_, D>,
4113            offset: usize,
4114            mut depth: fidl::encoding::Depth,
4115        ) -> fidl::Result<()> {
4116            encoder.debug_check_bounds::<IgmpConfiguration>(offset);
4117            // Vector header
4118            let max_ordinal: u64 = self.max_ordinal_present();
4119            encoder.write_num(max_ordinal, offset);
4120            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4121            // Calling encoder.out_of_line_offset(0) is not allowed.
4122            if max_ordinal == 0 {
4123                return Ok(());
4124            }
4125            depth.increment()?;
4126            let envelope_size = 8;
4127            let bytes_len = max_ordinal as usize * envelope_size;
4128            #[allow(unused_variables)]
4129            let offset = encoder.out_of_line_offset(bytes_len);
4130            let mut _prev_end_offset: usize = 0;
4131            if 1 > max_ordinal {
4132                return Ok(());
4133            }
4134
4135            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4136            // are envelope_size bytes.
4137            let cur_offset: usize = (1 - 1) * envelope_size;
4138
4139            // Zero reserved fields.
4140            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4141
4142            // Safety:
4143            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4144            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4145            //   envelope_size bytes, there is always sufficient room.
4146            fidl::encoding::encode_in_envelope_optional::<IgmpVersion, D>(
4147                self.version.as_ref().map(<IgmpVersion as fidl::encoding::ValueTypeMarker>::borrow),
4148                encoder,
4149                offset + cur_offset,
4150                depth,
4151            )?;
4152
4153            _prev_end_offset = cur_offset + envelope_size;
4154
4155            Ok(())
4156        }
4157    }
4158
4159    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IgmpConfiguration {
4160        #[inline(always)]
4161        fn new_empty() -> Self {
4162            Self::default()
4163        }
4164
4165        unsafe fn decode(
4166            &mut self,
4167            decoder: &mut fidl::encoding::Decoder<'_, D>,
4168            offset: usize,
4169            mut depth: fidl::encoding::Depth,
4170        ) -> fidl::Result<()> {
4171            decoder.debug_check_bounds::<Self>(offset);
4172            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4173                None => return Err(fidl::Error::NotNullable),
4174                Some(len) => len,
4175            };
4176            // Calling decoder.out_of_line_offset(0) is not allowed.
4177            if len == 0 {
4178                return Ok(());
4179            };
4180            depth.increment()?;
4181            let envelope_size = 8;
4182            let bytes_len = len * envelope_size;
4183            let offset = decoder.out_of_line_offset(bytes_len)?;
4184            // Decode the envelope for each type.
4185            let mut _next_ordinal_to_read = 0;
4186            let mut next_offset = offset;
4187            let end_offset = offset + bytes_len;
4188            _next_ordinal_to_read += 1;
4189            if next_offset >= end_offset {
4190                return Ok(());
4191            }
4192
4193            // Decode unknown envelopes for gaps in ordinals.
4194            while _next_ordinal_to_read < 1 {
4195                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4196                _next_ordinal_to_read += 1;
4197                next_offset += envelope_size;
4198            }
4199
4200            let next_out_of_line = decoder.next_out_of_line();
4201            let handles_before = decoder.remaining_handles();
4202            if let Some((inlined, num_bytes, num_handles)) =
4203                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4204            {
4205                let member_inline_size =
4206                    <IgmpVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4207                if inlined != (member_inline_size <= 4) {
4208                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4209                }
4210                let inner_offset;
4211                let mut inner_depth = depth.clone();
4212                if inlined {
4213                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4214                    inner_offset = next_offset;
4215                } else {
4216                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4217                    inner_depth.increment()?;
4218                }
4219                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(IgmpVersion, D));
4220                fidl::decode!(IgmpVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
4221                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4222                {
4223                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4224                }
4225                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4226                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4227                }
4228            }
4229
4230            next_offset += envelope_size;
4231
4232            // Decode the remaining unknown envelopes.
4233            while next_offset < end_offset {
4234                _next_ordinal_to_read += 1;
4235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4236                next_offset += envelope_size;
4237            }
4238
4239            Ok(())
4240        }
4241    }
4242
4243    impl Ipv4Configuration {
4244        #[inline(always)]
4245        fn max_ordinal_present(&self) -> u64 {
4246            if let Some(_) = self.arp {
4247                return 4;
4248            }
4249            if let Some(_) = self.igmp {
4250                return 3;
4251            }
4252            if let Some(_) = self.multicast_forwarding {
4253                return 2;
4254            }
4255            if let Some(_) = self.unicast_forwarding {
4256                return 1;
4257            }
4258            0
4259        }
4260    }
4261
4262    impl fidl::encoding::ValueTypeMarker for Ipv4Configuration {
4263        type Borrowed<'a> = &'a Self;
4264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4265            value
4266        }
4267    }
4268
4269    unsafe impl fidl::encoding::TypeMarker for Ipv4Configuration {
4270        type Owned = Self;
4271
4272        #[inline(always)]
4273        fn inline_align(_context: fidl::encoding::Context) -> usize {
4274            8
4275        }
4276
4277        #[inline(always)]
4278        fn inline_size(_context: fidl::encoding::Context) -> usize {
4279            16
4280        }
4281    }
4282
4283    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv4Configuration, D>
4284        for &Ipv4Configuration
4285    {
4286        unsafe fn encode(
4287            self,
4288            encoder: &mut fidl::encoding::Encoder<'_, D>,
4289            offset: usize,
4290            mut depth: fidl::encoding::Depth,
4291        ) -> fidl::Result<()> {
4292            encoder.debug_check_bounds::<Ipv4Configuration>(offset);
4293            // Vector header
4294            let max_ordinal: u64 = self.max_ordinal_present();
4295            encoder.write_num(max_ordinal, offset);
4296            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4297            // Calling encoder.out_of_line_offset(0) is not allowed.
4298            if max_ordinal == 0 {
4299                return Ok(());
4300            }
4301            depth.increment()?;
4302            let envelope_size = 8;
4303            let bytes_len = max_ordinal as usize * envelope_size;
4304            #[allow(unused_variables)]
4305            let offset = encoder.out_of_line_offset(bytes_len);
4306            let mut _prev_end_offset: usize = 0;
4307            if 1 > max_ordinal {
4308                return Ok(());
4309            }
4310
4311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4312            // are envelope_size bytes.
4313            let cur_offset: usize = (1 - 1) * envelope_size;
4314
4315            // Zero reserved fields.
4316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4317
4318            // Safety:
4319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4321            //   envelope_size bytes, there is always sufficient room.
4322            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4323                self.unicast_forwarding
4324                    .as_ref()
4325                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4326                encoder,
4327                offset + cur_offset,
4328                depth,
4329            )?;
4330
4331            _prev_end_offset = cur_offset + envelope_size;
4332            if 2 > max_ordinal {
4333                return Ok(());
4334            }
4335
4336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4337            // are envelope_size bytes.
4338            let cur_offset: usize = (2 - 1) * envelope_size;
4339
4340            // Zero reserved fields.
4341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4342
4343            // Safety:
4344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4346            //   envelope_size bytes, there is always sufficient room.
4347            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4348                self.multicast_forwarding
4349                    .as_ref()
4350                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4351                encoder,
4352                offset + cur_offset,
4353                depth,
4354            )?;
4355
4356            _prev_end_offset = cur_offset + envelope_size;
4357            if 3 > max_ordinal {
4358                return Ok(());
4359            }
4360
4361            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4362            // are envelope_size bytes.
4363            let cur_offset: usize = (3 - 1) * envelope_size;
4364
4365            // Zero reserved fields.
4366            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4367
4368            // Safety:
4369            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4370            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4371            //   envelope_size bytes, there is always sufficient room.
4372            fidl::encoding::encode_in_envelope_optional::<IgmpConfiguration, D>(
4373                self.igmp
4374                    .as_ref()
4375                    .map(<IgmpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4376                encoder,
4377                offset + cur_offset,
4378                depth,
4379            )?;
4380
4381            _prev_end_offset = cur_offset + envelope_size;
4382            if 4 > max_ordinal {
4383                return Ok(());
4384            }
4385
4386            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4387            // are envelope_size bytes.
4388            let cur_offset: usize = (4 - 1) * envelope_size;
4389
4390            // Zero reserved fields.
4391            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4392
4393            // Safety:
4394            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4395            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4396            //   envelope_size bytes, there is always sufficient room.
4397            fidl::encoding::encode_in_envelope_optional::<ArpConfiguration, D>(
4398                self.arp
4399                    .as_ref()
4400                    .map(<ArpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4401                encoder,
4402                offset + cur_offset,
4403                depth,
4404            )?;
4405
4406            _prev_end_offset = cur_offset + envelope_size;
4407
4408            Ok(())
4409        }
4410    }
4411
4412    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv4Configuration {
4413        #[inline(always)]
4414        fn new_empty() -> Self {
4415            Self::default()
4416        }
4417
4418        unsafe fn decode(
4419            &mut self,
4420            decoder: &mut fidl::encoding::Decoder<'_, D>,
4421            offset: usize,
4422            mut depth: fidl::encoding::Depth,
4423        ) -> fidl::Result<()> {
4424            decoder.debug_check_bounds::<Self>(offset);
4425            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4426                None => return Err(fidl::Error::NotNullable),
4427                Some(len) => len,
4428            };
4429            // Calling decoder.out_of_line_offset(0) is not allowed.
4430            if len == 0 {
4431                return Ok(());
4432            };
4433            depth.increment()?;
4434            let envelope_size = 8;
4435            let bytes_len = len * envelope_size;
4436            let offset = decoder.out_of_line_offset(bytes_len)?;
4437            // Decode the envelope for each type.
4438            let mut _next_ordinal_to_read = 0;
4439            let mut next_offset = offset;
4440            let end_offset = offset + bytes_len;
4441            _next_ordinal_to_read += 1;
4442            if next_offset >= end_offset {
4443                return Ok(());
4444            }
4445
4446            // Decode unknown envelopes for gaps in ordinals.
4447            while _next_ordinal_to_read < 1 {
4448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4449                _next_ordinal_to_read += 1;
4450                next_offset += envelope_size;
4451            }
4452
4453            let next_out_of_line = decoder.next_out_of_line();
4454            let handles_before = decoder.remaining_handles();
4455            if let Some((inlined, num_bytes, num_handles)) =
4456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4457            {
4458                let member_inline_size =
4459                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4460                if inlined != (member_inline_size <= 4) {
4461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4462                }
4463                let inner_offset;
4464                let mut inner_depth = depth.clone();
4465                if inlined {
4466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4467                    inner_offset = next_offset;
4468                } else {
4469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4470                    inner_depth.increment()?;
4471                }
4472                let val_ref =
4473                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4474                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4475                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4476                {
4477                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4478                }
4479                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4480                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4481                }
4482            }
4483
4484            next_offset += envelope_size;
4485            _next_ordinal_to_read += 1;
4486            if next_offset >= end_offset {
4487                return Ok(());
4488            }
4489
4490            // Decode unknown envelopes for gaps in ordinals.
4491            while _next_ordinal_to_read < 2 {
4492                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4493                _next_ordinal_to_read += 1;
4494                next_offset += envelope_size;
4495            }
4496
4497            let next_out_of_line = decoder.next_out_of_line();
4498            let handles_before = decoder.remaining_handles();
4499            if let Some((inlined, num_bytes, num_handles)) =
4500                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4501            {
4502                let member_inline_size =
4503                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4504                if inlined != (member_inline_size <= 4) {
4505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4506                }
4507                let inner_offset;
4508                let mut inner_depth = depth.clone();
4509                if inlined {
4510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4511                    inner_offset = next_offset;
4512                } else {
4513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4514                    inner_depth.increment()?;
4515                }
4516                let val_ref =
4517                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4518                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4520                {
4521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4522                }
4523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4525                }
4526            }
4527
4528            next_offset += envelope_size;
4529            _next_ordinal_to_read += 1;
4530            if next_offset >= end_offset {
4531                return Ok(());
4532            }
4533
4534            // Decode unknown envelopes for gaps in ordinals.
4535            while _next_ordinal_to_read < 3 {
4536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4537                _next_ordinal_to_read += 1;
4538                next_offset += envelope_size;
4539            }
4540
4541            let next_out_of_line = decoder.next_out_of_line();
4542            let handles_before = decoder.remaining_handles();
4543            if let Some((inlined, num_bytes, num_handles)) =
4544                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4545            {
4546                let member_inline_size =
4547                    <IgmpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4548                if inlined != (member_inline_size <= 4) {
4549                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4550                }
4551                let inner_offset;
4552                let mut inner_depth = depth.clone();
4553                if inlined {
4554                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4555                    inner_offset = next_offset;
4556                } else {
4557                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4558                    inner_depth.increment()?;
4559                }
4560                let val_ref =
4561                    self.igmp.get_or_insert_with(|| fidl::new_empty!(IgmpConfiguration, D));
4562                fidl::decode!(IgmpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4564                {
4565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4566                }
4567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4569                }
4570            }
4571
4572            next_offset += envelope_size;
4573            _next_ordinal_to_read += 1;
4574            if next_offset >= end_offset {
4575                return Ok(());
4576            }
4577
4578            // Decode unknown envelopes for gaps in ordinals.
4579            while _next_ordinal_to_read < 4 {
4580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4581                _next_ordinal_to_read += 1;
4582                next_offset += envelope_size;
4583            }
4584
4585            let next_out_of_line = decoder.next_out_of_line();
4586            let handles_before = decoder.remaining_handles();
4587            if let Some((inlined, num_bytes, num_handles)) =
4588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4589            {
4590                let member_inline_size =
4591                    <ArpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4592                if inlined != (member_inline_size <= 4) {
4593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4594                }
4595                let inner_offset;
4596                let mut inner_depth = depth.clone();
4597                if inlined {
4598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4599                    inner_offset = next_offset;
4600                } else {
4601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4602                    inner_depth.increment()?;
4603                }
4604                let val_ref = self.arp.get_or_insert_with(|| fidl::new_empty!(ArpConfiguration, D));
4605                fidl::decode!(ArpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4607                {
4608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4609                }
4610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4612                }
4613            }
4614
4615            next_offset += envelope_size;
4616
4617            // Decode the remaining unknown envelopes.
4618            while next_offset < end_offset {
4619                _next_ordinal_to_read += 1;
4620                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4621                next_offset += envelope_size;
4622            }
4623
4624            Ok(())
4625        }
4626    }
4627
4628    impl Ipv6Configuration {
4629        #[inline(always)]
4630        fn max_ordinal_present(&self) -> u64 {
4631            if let Some(_) = self.ndp {
4632                return 4;
4633            }
4634            if let Some(_) = self.mld {
4635                return 3;
4636            }
4637            if let Some(_) = self.multicast_forwarding {
4638                return 2;
4639            }
4640            if let Some(_) = self.unicast_forwarding {
4641                return 1;
4642            }
4643            0
4644        }
4645    }
4646
4647    impl fidl::encoding::ValueTypeMarker for Ipv6Configuration {
4648        type Borrowed<'a> = &'a Self;
4649        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4650            value
4651        }
4652    }
4653
4654    unsafe impl fidl::encoding::TypeMarker for Ipv6Configuration {
4655        type Owned = Self;
4656
4657        #[inline(always)]
4658        fn inline_align(_context: fidl::encoding::Context) -> usize {
4659            8
4660        }
4661
4662        #[inline(always)]
4663        fn inline_size(_context: fidl::encoding::Context) -> usize {
4664            16
4665        }
4666    }
4667
4668    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv6Configuration, D>
4669        for &Ipv6Configuration
4670    {
4671        unsafe fn encode(
4672            self,
4673            encoder: &mut fidl::encoding::Encoder<'_, D>,
4674            offset: usize,
4675            mut depth: fidl::encoding::Depth,
4676        ) -> fidl::Result<()> {
4677            encoder.debug_check_bounds::<Ipv6Configuration>(offset);
4678            // Vector header
4679            let max_ordinal: u64 = self.max_ordinal_present();
4680            encoder.write_num(max_ordinal, offset);
4681            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4682            // Calling encoder.out_of_line_offset(0) is not allowed.
4683            if max_ordinal == 0 {
4684                return Ok(());
4685            }
4686            depth.increment()?;
4687            let envelope_size = 8;
4688            let bytes_len = max_ordinal as usize * envelope_size;
4689            #[allow(unused_variables)]
4690            let offset = encoder.out_of_line_offset(bytes_len);
4691            let mut _prev_end_offset: usize = 0;
4692            if 1 > max_ordinal {
4693                return Ok(());
4694            }
4695
4696            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4697            // are envelope_size bytes.
4698            let cur_offset: usize = (1 - 1) * envelope_size;
4699
4700            // Zero reserved fields.
4701            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4702
4703            // Safety:
4704            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4705            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4706            //   envelope_size bytes, there is always sufficient room.
4707            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4708                self.unicast_forwarding
4709                    .as_ref()
4710                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4711                encoder,
4712                offset + cur_offset,
4713                depth,
4714            )?;
4715
4716            _prev_end_offset = cur_offset + envelope_size;
4717            if 2 > max_ordinal {
4718                return Ok(());
4719            }
4720
4721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4722            // are envelope_size bytes.
4723            let cur_offset: usize = (2 - 1) * envelope_size;
4724
4725            // Zero reserved fields.
4726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4727
4728            // Safety:
4729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4731            //   envelope_size bytes, there is always sufficient room.
4732            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4733                self.multicast_forwarding
4734                    .as_ref()
4735                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4736                encoder,
4737                offset + cur_offset,
4738                depth,
4739            )?;
4740
4741            _prev_end_offset = cur_offset + envelope_size;
4742            if 3 > max_ordinal {
4743                return Ok(());
4744            }
4745
4746            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4747            // are envelope_size bytes.
4748            let cur_offset: usize = (3 - 1) * envelope_size;
4749
4750            // Zero reserved fields.
4751            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4752
4753            // Safety:
4754            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4755            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4756            //   envelope_size bytes, there is always sufficient room.
4757            fidl::encoding::encode_in_envelope_optional::<MldConfiguration, D>(
4758                self.mld
4759                    .as_ref()
4760                    .map(<MldConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4761                encoder,
4762                offset + cur_offset,
4763                depth,
4764            )?;
4765
4766            _prev_end_offset = cur_offset + envelope_size;
4767            if 4 > max_ordinal {
4768                return Ok(());
4769            }
4770
4771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4772            // are envelope_size bytes.
4773            let cur_offset: usize = (4 - 1) * envelope_size;
4774
4775            // Zero reserved fields.
4776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4777
4778            // Safety:
4779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4781            //   envelope_size bytes, there is always sufficient room.
4782            fidl::encoding::encode_in_envelope_optional::<NdpConfiguration, D>(
4783                self.ndp
4784                    .as_ref()
4785                    .map(<NdpConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4786                encoder,
4787                offset + cur_offset,
4788                depth,
4789            )?;
4790
4791            _prev_end_offset = cur_offset + envelope_size;
4792
4793            Ok(())
4794        }
4795    }
4796
4797    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv6Configuration {
4798        #[inline(always)]
4799        fn new_empty() -> Self {
4800            Self::default()
4801        }
4802
4803        unsafe fn decode(
4804            &mut self,
4805            decoder: &mut fidl::encoding::Decoder<'_, D>,
4806            offset: usize,
4807            mut depth: fidl::encoding::Depth,
4808        ) -> fidl::Result<()> {
4809            decoder.debug_check_bounds::<Self>(offset);
4810            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4811                None => return Err(fidl::Error::NotNullable),
4812                Some(len) => len,
4813            };
4814            // Calling decoder.out_of_line_offset(0) is not allowed.
4815            if len == 0 {
4816                return Ok(());
4817            };
4818            depth.increment()?;
4819            let envelope_size = 8;
4820            let bytes_len = len * envelope_size;
4821            let offset = decoder.out_of_line_offset(bytes_len)?;
4822            // Decode the envelope for each type.
4823            let mut _next_ordinal_to_read = 0;
4824            let mut next_offset = offset;
4825            let end_offset = offset + bytes_len;
4826            _next_ordinal_to_read += 1;
4827            if next_offset >= end_offset {
4828                return Ok(());
4829            }
4830
4831            // Decode unknown envelopes for gaps in ordinals.
4832            while _next_ordinal_to_read < 1 {
4833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4834                _next_ordinal_to_read += 1;
4835                next_offset += envelope_size;
4836            }
4837
4838            let next_out_of_line = decoder.next_out_of_line();
4839            let handles_before = decoder.remaining_handles();
4840            if let Some((inlined, num_bytes, num_handles)) =
4841                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4842            {
4843                let member_inline_size =
4844                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4845                if inlined != (member_inline_size <= 4) {
4846                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4847                }
4848                let inner_offset;
4849                let mut inner_depth = depth.clone();
4850                if inlined {
4851                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4852                    inner_offset = next_offset;
4853                } else {
4854                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4855                    inner_depth.increment()?;
4856                }
4857                let val_ref =
4858                    self.unicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4859                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4861                {
4862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4863                }
4864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4866                }
4867            }
4868
4869            next_offset += envelope_size;
4870            _next_ordinal_to_read += 1;
4871            if next_offset >= end_offset {
4872                return Ok(());
4873            }
4874
4875            // Decode unknown envelopes for gaps in ordinals.
4876            while _next_ordinal_to_read < 2 {
4877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4878                _next_ordinal_to_read += 1;
4879                next_offset += envelope_size;
4880            }
4881
4882            let next_out_of_line = decoder.next_out_of_line();
4883            let handles_before = decoder.remaining_handles();
4884            if let Some((inlined, num_bytes, num_handles)) =
4885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4886            {
4887                let member_inline_size =
4888                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4889                if inlined != (member_inline_size <= 4) {
4890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4891                }
4892                let inner_offset;
4893                let mut inner_depth = depth.clone();
4894                if inlined {
4895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4896                    inner_offset = next_offset;
4897                } else {
4898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4899                    inner_depth.increment()?;
4900                }
4901                let val_ref =
4902                    self.multicast_forwarding.get_or_insert_with(|| fidl::new_empty!(bool, D));
4903                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4904                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4905                {
4906                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4907                }
4908                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4909                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4910                }
4911            }
4912
4913            next_offset += envelope_size;
4914            _next_ordinal_to_read += 1;
4915            if next_offset >= end_offset {
4916                return Ok(());
4917            }
4918
4919            // Decode unknown envelopes for gaps in ordinals.
4920            while _next_ordinal_to_read < 3 {
4921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4922                _next_ordinal_to_read += 1;
4923                next_offset += envelope_size;
4924            }
4925
4926            let next_out_of_line = decoder.next_out_of_line();
4927            let handles_before = decoder.remaining_handles();
4928            if let Some((inlined, num_bytes, num_handles)) =
4929                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4930            {
4931                let member_inline_size =
4932                    <MldConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4933                if inlined != (member_inline_size <= 4) {
4934                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4935                }
4936                let inner_offset;
4937                let mut inner_depth = depth.clone();
4938                if inlined {
4939                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4940                    inner_offset = next_offset;
4941                } else {
4942                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4943                    inner_depth.increment()?;
4944                }
4945                let val_ref = self.mld.get_or_insert_with(|| fidl::new_empty!(MldConfiguration, D));
4946                fidl::decode!(MldConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4947                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4948                {
4949                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4950                }
4951                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4952                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4953                }
4954            }
4955
4956            next_offset += envelope_size;
4957            _next_ordinal_to_read += 1;
4958            if next_offset >= end_offset {
4959                return Ok(());
4960            }
4961
4962            // Decode unknown envelopes for gaps in ordinals.
4963            while _next_ordinal_to_read < 4 {
4964                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4965                _next_ordinal_to_read += 1;
4966                next_offset += envelope_size;
4967            }
4968
4969            let next_out_of_line = decoder.next_out_of_line();
4970            let handles_before = decoder.remaining_handles();
4971            if let Some((inlined, num_bytes, num_handles)) =
4972                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4973            {
4974                let member_inline_size =
4975                    <NdpConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4976                if inlined != (member_inline_size <= 4) {
4977                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4978                }
4979                let inner_offset;
4980                let mut inner_depth = depth.clone();
4981                if inlined {
4982                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4983                    inner_offset = next_offset;
4984                } else {
4985                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4986                    inner_depth.increment()?;
4987                }
4988                let val_ref = self.ndp.get_or_insert_with(|| fidl::new_empty!(NdpConfiguration, D));
4989                fidl::decode!(NdpConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
4990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4991                {
4992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4993                }
4994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4996                }
4997            }
4998
4999            next_offset += envelope_size;
5000
5001            // Decode the remaining unknown envelopes.
5002            while next_offset < end_offset {
5003                _next_ordinal_to_read += 1;
5004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5005                next_offset += envelope_size;
5006            }
5007
5008            Ok(())
5009        }
5010    }
5011
5012    impl MldConfiguration {
5013        #[inline(always)]
5014        fn max_ordinal_present(&self) -> u64 {
5015            if let Some(_) = self.version {
5016                return 1;
5017            }
5018            0
5019        }
5020    }
5021
5022    impl fidl::encoding::ValueTypeMarker for MldConfiguration {
5023        type Borrowed<'a> = &'a Self;
5024        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5025            value
5026        }
5027    }
5028
5029    unsafe impl fidl::encoding::TypeMarker for MldConfiguration {
5030        type Owned = Self;
5031
5032        #[inline(always)]
5033        fn inline_align(_context: fidl::encoding::Context) -> usize {
5034            8
5035        }
5036
5037        #[inline(always)]
5038        fn inline_size(_context: fidl::encoding::Context) -> usize {
5039            16
5040        }
5041    }
5042
5043    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MldConfiguration, D>
5044        for &MldConfiguration
5045    {
5046        unsafe fn encode(
5047            self,
5048            encoder: &mut fidl::encoding::Encoder<'_, D>,
5049            offset: usize,
5050            mut depth: fidl::encoding::Depth,
5051        ) -> fidl::Result<()> {
5052            encoder.debug_check_bounds::<MldConfiguration>(offset);
5053            // Vector header
5054            let max_ordinal: u64 = self.max_ordinal_present();
5055            encoder.write_num(max_ordinal, offset);
5056            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5057            // Calling encoder.out_of_line_offset(0) is not allowed.
5058            if max_ordinal == 0 {
5059                return Ok(());
5060            }
5061            depth.increment()?;
5062            let envelope_size = 8;
5063            let bytes_len = max_ordinal as usize * envelope_size;
5064            #[allow(unused_variables)]
5065            let offset = encoder.out_of_line_offset(bytes_len);
5066            let mut _prev_end_offset: usize = 0;
5067            if 1 > max_ordinal {
5068                return Ok(());
5069            }
5070
5071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5072            // are envelope_size bytes.
5073            let cur_offset: usize = (1 - 1) * envelope_size;
5074
5075            // Zero reserved fields.
5076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5077
5078            // Safety:
5079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5081            //   envelope_size bytes, there is always sufficient room.
5082            fidl::encoding::encode_in_envelope_optional::<MldVersion, D>(
5083                self.version.as_ref().map(<MldVersion as fidl::encoding::ValueTypeMarker>::borrow),
5084                encoder,
5085                offset + cur_offset,
5086                depth,
5087            )?;
5088
5089            _prev_end_offset = cur_offset + envelope_size;
5090
5091            Ok(())
5092        }
5093    }
5094
5095    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MldConfiguration {
5096        #[inline(always)]
5097        fn new_empty() -> Self {
5098            Self::default()
5099        }
5100
5101        unsafe fn decode(
5102            &mut self,
5103            decoder: &mut fidl::encoding::Decoder<'_, D>,
5104            offset: usize,
5105            mut depth: fidl::encoding::Depth,
5106        ) -> fidl::Result<()> {
5107            decoder.debug_check_bounds::<Self>(offset);
5108            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5109                None => return Err(fidl::Error::NotNullable),
5110                Some(len) => len,
5111            };
5112            // Calling decoder.out_of_line_offset(0) is not allowed.
5113            if len == 0 {
5114                return Ok(());
5115            };
5116            depth.increment()?;
5117            let envelope_size = 8;
5118            let bytes_len = len * envelope_size;
5119            let offset = decoder.out_of_line_offset(bytes_len)?;
5120            // Decode the envelope for each type.
5121            let mut _next_ordinal_to_read = 0;
5122            let mut next_offset = offset;
5123            let end_offset = offset + bytes_len;
5124            _next_ordinal_to_read += 1;
5125            if next_offset >= end_offset {
5126                return Ok(());
5127            }
5128
5129            // Decode unknown envelopes for gaps in ordinals.
5130            while _next_ordinal_to_read < 1 {
5131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5132                _next_ordinal_to_read += 1;
5133                next_offset += envelope_size;
5134            }
5135
5136            let next_out_of_line = decoder.next_out_of_line();
5137            let handles_before = decoder.remaining_handles();
5138            if let Some((inlined, num_bytes, num_handles)) =
5139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5140            {
5141                let member_inline_size =
5142                    <MldVersion as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5143                if inlined != (member_inline_size <= 4) {
5144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5145                }
5146                let inner_offset;
5147                let mut inner_depth = depth.clone();
5148                if inlined {
5149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5150                    inner_offset = next_offset;
5151                } else {
5152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5153                    inner_depth.increment()?;
5154                }
5155                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(MldVersion, D));
5156                fidl::decode!(MldVersion, D, val_ref, decoder, inner_offset, inner_depth)?;
5157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5158                {
5159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5160                }
5161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5163                }
5164            }
5165
5166            next_offset += envelope_size;
5167
5168            // Decode the remaining unknown envelopes.
5169            while next_offset < end_offset {
5170                _next_ordinal_to_read += 1;
5171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5172                next_offset += envelope_size;
5173            }
5174
5175            Ok(())
5176        }
5177    }
5178
5179    impl NdpConfiguration {
5180        #[inline(always)]
5181        fn max_ordinal_present(&self) -> u64 {
5182            if let Some(_) = self.slaac {
5183                return 3;
5184            }
5185            if let Some(_) = self.dad {
5186                return 2;
5187            }
5188            if let Some(_) = self.nud {
5189                return 1;
5190            }
5191            0
5192        }
5193    }
5194
5195    impl fidl::encoding::ValueTypeMarker for NdpConfiguration {
5196        type Borrowed<'a> = &'a Self;
5197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5198            value
5199        }
5200    }
5201
5202    unsafe impl fidl::encoding::TypeMarker for NdpConfiguration {
5203        type Owned = Self;
5204
5205        #[inline(always)]
5206        fn inline_align(_context: fidl::encoding::Context) -> usize {
5207            8
5208        }
5209
5210        #[inline(always)]
5211        fn inline_size(_context: fidl::encoding::Context) -> usize {
5212            16
5213        }
5214    }
5215
5216    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NdpConfiguration, D>
5217        for &NdpConfiguration
5218    {
5219        unsafe fn encode(
5220            self,
5221            encoder: &mut fidl::encoding::Encoder<'_, D>,
5222            offset: usize,
5223            mut depth: fidl::encoding::Depth,
5224        ) -> fidl::Result<()> {
5225            encoder.debug_check_bounds::<NdpConfiguration>(offset);
5226            // Vector header
5227            let max_ordinal: u64 = self.max_ordinal_present();
5228            encoder.write_num(max_ordinal, offset);
5229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5230            // Calling encoder.out_of_line_offset(0) is not allowed.
5231            if max_ordinal == 0 {
5232                return Ok(());
5233            }
5234            depth.increment()?;
5235            let envelope_size = 8;
5236            let bytes_len = max_ordinal as usize * envelope_size;
5237            #[allow(unused_variables)]
5238            let offset = encoder.out_of_line_offset(bytes_len);
5239            let mut _prev_end_offset: usize = 0;
5240            if 1 > max_ordinal {
5241                return Ok(());
5242            }
5243
5244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5245            // are envelope_size bytes.
5246            let cur_offset: usize = (1 - 1) * envelope_size;
5247
5248            // Zero reserved fields.
5249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5250
5251            // Safety:
5252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5254            //   envelope_size bytes, there is always sufficient room.
5255            fidl::encoding::encode_in_envelope_optional::<NudConfiguration, D>(
5256                self.nud
5257                    .as_ref()
5258                    .map(<NudConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5259                encoder,
5260                offset + cur_offset,
5261                depth,
5262            )?;
5263
5264            _prev_end_offset = cur_offset + envelope_size;
5265            if 2 > max_ordinal {
5266                return Ok(());
5267            }
5268
5269            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5270            // are envelope_size bytes.
5271            let cur_offset: usize = (2 - 1) * envelope_size;
5272
5273            // Zero reserved fields.
5274            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5275
5276            // Safety:
5277            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5278            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5279            //   envelope_size bytes, there is always sufficient room.
5280            fidl::encoding::encode_in_envelope_optional::<DadConfiguration, D>(
5281                self.dad
5282                    .as_ref()
5283                    .map(<DadConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5284                encoder,
5285                offset + cur_offset,
5286                depth,
5287            )?;
5288
5289            _prev_end_offset = cur_offset + envelope_size;
5290            if 3 > max_ordinal {
5291                return Ok(());
5292            }
5293
5294            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5295            // are envelope_size bytes.
5296            let cur_offset: usize = (3 - 1) * envelope_size;
5297
5298            // Zero reserved fields.
5299            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5300
5301            // Safety:
5302            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5303            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5304            //   envelope_size bytes, there is always sufficient room.
5305            fidl::encoding::encode_in_envelope_optional::<SlaacConfiguration, D>(
5306                self.slaac
5307                    .as_ref()
5308                    .map(<SlaacConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
5309                encoder,
5310                offset + cur_offset,
5311                depth,
5312            )?;
5313
5314            _prev_end_offset = cur_offset + envelope_size;
5315
5316            Ok(())
5317        }
5318    }
5319
5320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NdpConfiguration {
5321        #[inline(always)]
5322        fn new_empty() -> Self {
5323            Self::default()
5324        }
5325
5326        unsafe fn decode(
5327            &mut self,
5328            decoder: &mut fidl::encoding::Decoder<'_, D>,
5329            offset: usize,
5330            mut depth: fidl::encoding::Depth,
5331        ) -> fidl::Result<()> {
5332            decoder.debug_check_bounds::<Self>(offset);
5333            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5334                None => return Err(fidl::Error::NotNullable),
5335                Some(len) => len,
5336            };
5337            // Calling decoder.out_of_line_offset(0) is not allowed.
5338            if len == 0 {
5339                return Ok(());
5340            };
5341            depth.increment()?;
5342            let envelope_size = 8;
5343            let bytes_len = len * envelope_size;
5344            let offset = decoder.out_of_line_offset(bytes_len)?;
5345            // Decode the envelope for each type.
5346            let mut _next_ordinal_to_read = 0;
5347            let mut next_offset = offset;
5348            let end_offset = offset + bytes_len;
5349            _next_ordinal_to_read += 1;
5350            if next_offset >= end_offset {
5351                return Ok(());
5352            }
5353
5354            // Decode unknown envelopes for gaps in ordinals.
5355            while _next_ordinal_to_read < 1 {
5356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5357                _next_ordinal_to_read += 1;
5358                next_offset += envelope_size;
5359            }
5360
5361            let next_out_of_line = decoder.next_out_of_line();
5362            let handles_before = decoder.remaining_handles();
5363            if let Some((inlined, num_bytes, num_handles)) =
5364                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5365            {
5366                let member_inline_size =
5367                    <NudConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5368                if inlined != (member_inline_size <= 4) {
5369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5370                }
5371                let inner_offset;
5372                let mut inner_depth = depth.clone();
5373                if inlined {
5374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5375                    inner_offset = next_offset;
5376                } else {
5377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5378                    inner_depth.increment()?;
5379                }
5380                let val_ref = self.nud.get_or_insert_with(|| fidl::new_empty!(NudConfiguration, D));
5381                fidl::decode!(NudConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5382                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5383                {
5384                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5385                }
5386                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5387                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5388                }
5389            }
5390
5391            next_offset += envelope_size;
5392            _next_ordinal_to_read += 1;
5393            if next_offset >= end_offset {
5394                return Ok(());
5395            }
5396
5397            // Decode unknown envelopes for gaps in ordinals.
5398            while _next_ordinal_to_read < 2 {
5399                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5400                _next_ordinal_to_read += 1;
5401                next_offset += envelope_size;
5402            }
5403
5404            let next_out_of_line = decoder.next_out_of_line();
5405            let handles_before = decoder.remaining_handles();
5406            if let Some((inlined, num_bytes, num_handles)) =
5407                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5408            {
5409                let member_inline_size =
5410                    <DadConfiguration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5411                if inlined != (member_inline_size <= 4) {
5412                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5413                }
5414                let inner_offset;
5415                let mut inner_depth = depth.clone();
5416                if inlined {
5417                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5418                    inner_offset = next_offset;
5419                } else {
5420                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5421                    inner_depth.increment()?;
5422                }
5423                let val_ref = self.dad.get_or_insert_with(|| fidl::new_empty!(DadConfiguration, D));
5424                fidl::decode!(DadConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5425                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5426                {
5427                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5428                }
5429                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5430                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5431                }
5432            }
5433
5434            next_offset += envelope_size;
5435            _next_ordinal_to_read += 1;
5436            if next_offset >= end_offset {
5437                return Ok(());
5438            }
5439
5440            // Decode unknown envelopes for gaps in ordinals.
5441            while _next_ordinal_to_read < 3 {
5442                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5443                _next_ordinal_to_read += 1;
5444                next_offset += envelope_size;
5445            }
5446
5447            let next_out_of_line = decoder.next_out_of_line();
5448            let handles_before = decoder.remaining_handles();
5449            if let Some((inlined, num_bytes, num_handles)) =
5450                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5451            {
5452                let member_inline_size =
5453                    <SlaacConfiguration as fidl::encoding::TypeMarker>::inline_size(
5454                        decoder.context,
5455                    );
5456                if inlined != (member_inline_size <= 4) {
5457                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5458                }
5459                let inner_offset;
5460                let mut inner_depth = depth.clone();
5461                if inlined {
5462                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5463                    inner_offset = next_offset;
5464                } else {
5465                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5466                    inner_depth.increment()?;
5467                }
5468                let val_ref =
5469                    self.slaac.get_or_insert_with(|| fidl::new_empty!(SlaacConfiguration, D));
5470                fidl::decode!(SlaacConfiguration, D, val_ref, decoder, inner_offset, inner_depth)?;
5471                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5472                {
5473                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5474                }
5475                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5476                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5477                }
5478            }
5479
5480            next_offset += envelope_size;
5481
5482            // Decode the remaining unknown envelopes.
5483            while next_offset < end_offset {
5484                _next_ordinal_to_read += 1;
5485                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5486                next_offset += envelope_size;
5487            }
5488
5489            Ok(())
5490        }
5491    }
5492
5493    impl NudConfiguration {
5494        #[inline(always)]
5495        fn max_ordinal_present(&self) -> u64 {
5496            if let Some(_) = self.base_reachable_time {
5497                return 3;
5498            }
5499            if let Some(_) = self.max_unicast_solicitations {
5500                return 2;
5501            }
5502            if let Some(_) = self.max_multicast_solicitations {
5503                return 1;
5504            }
5505            0
5506        }
5507    }
5508
5509    impl fidl::encoding::ValueTypeMarker for NudConfiguration {
5510        type Borrowed<'a> = &'a Self;
5511        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5512            value
5513        }
5514    }
5515
5516    unsafe impl fidl::encoding::TypeMarker for NudConfiguration {
5517        type Owned = Self;
5518
5519        #[inline(always)]
5520        fn inline_align(_context: fidl::encoding::Context) -> usize {
5521            8
5522        }
5523
5524        #[inline(always)]
5525        fn inline_size(_context: fidl::encoding::Context) -> usize {
5526            16
5527        }
5528    }
5529
5530    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NudConfiguration, D>
5531        for &NudConfiguration
5532    {
5533        unsafe fn encode(
5534            self,
5535            encoder: &mut fidl::encoding::Encoder<'_, D>,
5536            offset: usize,
5537            mut depth: fidl::encoding::Depth,
5538        ) -> fidl::Result<()> {
5539            encoder.debug_check_bounds::<NudConfiguration>(offset);
5540            // Vector header
5541            let max_ordinal: u64 = self.max_ordinal_present();
5542            encoder.write_num(max_ordinal, offset);
5543            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5544            // Calling encoder.out_of_line_offset(0) is not allowed.
5545            if max_ordinal == 0 {
5546                return Ok(());
5547            }
5548            depth.increment()?;
5549            let envelope_size = 8;
5550            let bytes_len = max_ordinal as usize * envelope_size;
5551            #[allow(unused_variables)]
5552            let offset = encoder.out_of_line_offset(bytes_len);
5553            let mut _prev_end_offset: usize = 0;
5554            if 1 > max_ordinal {
5555                return Ok(());
5556            }
5557
5558            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5559            // are envelope_size bytes.
5560            let cur_offset: usize = (1 - 1) * envelope_size;
5561
5562            // Zero reserved fields.
5563            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5564
5565            // Safety:
5566            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5567            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5568            //   envelope_size bytes, there is always sufficient room.
5569            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5570                self.max_multicast_solicitations
5571                    .as_ref()
5572                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5573                encoder,
5574                offset + cur_offset,
5575                depth,
5576            )?;
5577
5578            _prev_end_offset = cur_offset + envelope_size;
5579            if 2 > max_ordinal {
5580                return Ok(());
5581            }
5582
5583            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5584            // are envelope_size bytes.
5585            let cur_offset: usize = (2 - 1) * envelope_size;
5586
5587            // Zero reserved fields.
5588            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5589
5590            // Safety:
5591            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5592            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5593            //   envelope_size bytes, there is always sufficient room.
5594            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5595                self.max_unicast_solicitations
5596                    .as_ref()
5597                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5598                encoder,
5599                offset + cur_offset,
5600                depth,
5601            )?;
5602
5603            _prev_end_offset = cur_offset + envelope_size;
5604            if 3 > max_ordinal {
5605                return Ok(());
5606            }
5607
5608            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5609            // are envelope_size bytes.
5610            let cur_offset: usize = (3 - 1) * envelope_size;
5611
5612            // Zero reserved fields.
5613            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5614
5615            // Safety:
5616            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5617            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5618            //   envelope_size bytes, there is always sufficient room.
5619            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5620                self.base_reachable_time
5621                    .as_ref()
5622                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5623                encoder,
5624                offset + cur_offset,
5625                depth,
5626            )?;
5627
5628            _prev_end_offset = cur_offset + envelope_size;
5629
5630            Ok(())
5631        }
5632    }
5633
5634    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NudConfiguration {
5635        #[inline(always)]
5636        fn new_empty() -> Self {
5637            Self::default()
5638        }
5639
5640        unsafe fn decode(
5641            &mut self,
5642            decoder: &mut fidl::encoding::Decoder<'_, D>,
5643            offset: usize,
5644            mut depth: fidl::encoding::Depth,
5645        ) -> fidl::Result<()> {
5646            decoder.debug_check_bounds::<Self>(offset);
5647            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5648                None => return Err(fidl::Error::NotNullable),
5649                Some(len) => len,
5650            };
5651            // Calling decoder.out_of_line_offset(0) is not allowed.
5652            if len == 0 {
5653                return Ok(());
5654            };
5655            depth.increment()?;
5656            let envelope_size = 8;
5657            let bytes_len = len * envelope_size;
5658            let offset = decoder.out_of_line_offset(bytes_len)?;
5659            // Decode the envelope for each type.
5660            let mut _next_ordinal_to_read = 0;
5661            let mut next_offset = offset;
5662            let end_offset = offset + bytes_len;
5663            _next_ordinal_to_read += 1;
5664            if next_offset >= end_offset {
5665                return Ok(());
5666            }
5667
5668            // Decode unknown envelopes for gaps in ordinals.
5669            while _next_ordinal_to_read < 1 {
5670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5671                _next_ordinal_to_read += 1;
5672                next_offset += envelope_size;
5673            }
5674
5675            let next_out_of_line = decoder.next_out_of_line();
5676            let handles_before = decoder.remaining_handles();
5677            if let Some((inlined, num_bytes, num_handles)) =
5678                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5679            {
5680                let member_inline_size =
5681                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5682                if inlined != (member_inline_size <= 4) {
5683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5684                }
5685                let inner_offset;
5686                let mut inner_depth = depth.clone();
5687                if inlined {
5688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5689                    inner_offset = next_offset;
5690                } else {
5691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5692                    inner_depth.increment()?;
5693                }
5694                let val_ref = self
5695                    .max_multicast_solicitations
5696                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
5697                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5699                {
5700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5701                }
5702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5704                }
5705            }
5706
5707            next_offset += envelope_size;
5708            _next_ordinal_to_read += 1;
5709            if next_offset >= end_offset {
5710                return Ok(());
5711            }
5712
5713            // Decode unknown envelopes for gaps in ordinals.
5714            while _next_ordinal_to_read < 2 {
5715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5716                _next_ordinal_to_read += 1;
5717                next_offset += envelope_size;
5718            }
5719
5720            let next_out_of_line = decoder.next_out_of_line();
5721            let handles_before = decoder.remaining_handles();
5722            if let Some((inlined, num_bytes, num_handles)) =
5723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5724            {
5725                let member_inline_size =
5726                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5727                if inlined != (member_inline_size <= 4) {
5728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5729                }
5730                let inner_offset;
5731                let mut inner_depth = depth.clone();
5732                if inlined {
5733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5734                    inner_offset = next_offset;
5735                } else {
5736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5737                    inner_depth.increment()?;
5738                }
5739                let val_ref =
5740                    self.max_unicast_solicitations.get_or_insert_with(|| fidl::new_empty!(u16, D));
5741                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5742                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5743                {
5744                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5745                }
5746                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5747                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5748                }
5749            }
5750
5751            next_offset += envelope_size;
5752            _next_ordinal_to_read += 1;
5753            if next_offset >= end_offset {
5754                return Ok(());
5755            }
5756
5757            // Decode unknown envelopes for gaps in ordinals.
5758            while _next_ordinal_to_read < 3 {
5759                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5760                _next_ordinal_to_read += 1;
5761                next_offset += envelope_size;
5762            }
5763
5764            let next_out_of_line = decoder.next_out_of_line();
5765            let handles_before = decoder.remaining_handles();
5766            if let Some((inlined, num_bytes, num_handles)) =
5767                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5768            {
5769                let member_inline_size =
5770                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5771                if inlined != (member_inline_size <= 4) {
5772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5773                }
5774                let inner_offset;
5775                let mut inner_depth = depth.clone();
5776                if inlined {
5777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5778                    inner_offset = next_offset;
5779                } else {
5780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5781                    inner_depth.increment()?;
5782                }
5783                let val_ref =
5784                    self.base_reachable_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
5785                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5786                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5787                {
5788                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5789                }
5790                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5791                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5792                }
5793            }
5794
5795            next_offset += envelope_size;
5796
5797            // Decode the remaining unknown envelopes.
5798            while next_offset < end_offset {
5799                _next_ordinal_to_read += 1;
5800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5801                next_offset += envelope_size;
5802            }
5803
5804            Ok(())
5805        }
5806    }
5807
5808    impl SlaacConfiguration {
5809        #[inline(always)]
5810        fn max_ordinal_present(&self) -> u64 {
5811            if let Some(_) = self.temporary_address {
5812                return 1;
5813            }
5814            0
5815        }
5816    }
5817
5818    impl fidl::encoding::ValueTypeMarker for SlaacConfiguration {
5819        type Borrowed<'a> = &'a Self;
5820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5821            value
5822        }
5823    }
5824
5825    unsafe impl fidl::encoding::TypeMarker for SlaacConfiguration {
5826        type Owned = Self;
5827
5828        #[inline(always)]
5829        fn inline_align(_context: fidl::encoding::Context) -> usize {
5830            8
5831        }
5832
5833        #[inline(always)]
5834        fn inline_size(_context: fidl::encoding::Context) -> usize {
5835            16
5836        }
5837    }
5838
5839    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SlaacConfiguration, D>
5840        for &SlaacConfiguration
5841    {
5842        unsafe fn encode(
5843            self,
5844            encoder: &mut fidl::encoding::Encoder<'_, D>,
5845            offset: usize,
5846            mut depth: fidl::encoding::Depth,
5847        ) -> fidl::Result<()> {
5848            encoder.debug_check_bounds::<SlaacConfiguration>(offset);
5849            // Vector header
5850            let max_ordinal: u64 = self.max_ordinal_present();
5851            encoder.write_num(max_ordinal, offset);
5852            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5853            // Calling encoder.out_of_line_offset(0) is not allowed.
5854            if max_ordinal == 0 {
5855                return Ok(());
5856            }
5857            depth.increment()?;
5858            let envelope_size = 8;
5859            let bytes_len = max_ordinal as usize * envelope_size;
5860            #[allow(unused_variables)]
5861            let offset = encoder.out_of_line_offset(bytes_len);
5862            let mut _prev_end_offset: usize = 0;
5863            if 1 > max_ordinal {
5864                return Ok(());
5865            }
5866
5867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5868            // are envelope_size bytes.
5869            let cur_offset: usize = (1 - 1) * envelope_size;
5870
5871            // Zero reserved fields.
5872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5873
5874            // Safety:
5875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5877            //   envelope_size bytes, there is always sufficient room.
5878            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5879                self.temporary_address
5880                    .as_ref()
5881                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5882                encoder,
5883                offset + cur_offset,
5884                depth,
5885            )?;
5886
5887            _prev_end_offset = cur_offset + envelope_size;
5888
5889            Ok(())
5890        }
5891    }
5892
5893    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SlaacConfiguration {
5894        #[inline(always)]
5895        fn new_empty() -> Self {
5896            Self::default()
5897        }
5898
5899        unsafe fn decode(
5900            &mut self,
5901            decoder: &mut fidl::encoding::Decoder<'_, D>,
5902            offset: usize,
5903            mut depth: fidl::encoding::Depth,
5904        ) -> fidl::Result<()> {
5905            decoder.debug_check_bounds::<Self>(offset);
5906            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5907                None => return Err(fidl::Error::NotNullable),
5908                Some(len) => len,
5909            };
5910            // Calling decoder.out_of_line_offset(0) is not allowed.
5911            if len == 0 {
5912                return Ok(());
5913            };
5914            depth.increment()?;
5915            let envelope_size = 8;
5916            let bytes_len = len * envelope_size;
5917            let offset = decoder.out_of_line_offset(bytes_len)?;
5918            // Decode the envelope for each type.
5919            let mut _next_ordinal_to_read = 0;
5920            let mut next_offset = offset;
5921            let end_offset = offset + bytes_len;
5922            _next_ordinal_to_read += 1;
5923            if next_offset >= end_offset {
5924                return Ok(());
5925            }
5926
5927            // Decode unknown envelopes for gaps in ordinals.
5928            while _next_ordinal_to_read < 1 {
5929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5930                _next_ordinal_to_read += 1;
5931                next_offset += envelope_size;
5932            }
5933
5934            let next_out_of_line = decoder.next_out_of_line();
5935            let handles_before = decoder.remaining_handles();
5936            if let Some((inlined, num_bytes, num_handles)) =
5937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5938            {
5939                let member_inline_size =
5940                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5941                if inlined != (member_inline_size <= 4) {
5942                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5943                }
5944                let inner_offset;
5945                let mut inner_depth = depth.clone();
5946                if inlined {
5947                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5948                    inner_offset = next_offset;
5949                } else {
5950                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5951                    inner_depth.increment()?;
5952                }
5953                let val_ref =
5954                    self.temporary_address.get_or_insert_with(|| fidl::new_empty!(bool, D));
5955                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5957                {
5958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5959                }
5960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5962                }
5963            }
5964
5965            next_offset += envelope_size;
5966
5967            // Decode the remaining unknown envelopes.
5968            while next_offset < end_offset {
5969                _next_ordinal_to_read += 1;
5970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5971                next_offset += envelope_size;
5972            }
5973
5974            Ok(())
5975        }
5976    }
5977}