fidl_fuchsia_net_interfaces_admin__common/
fidl_fuchsia_net_interfaces_admin__common.rs

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