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