fidl_fuchsia_net_interfaces_admin__common/
fidl_fuchsia_net_interfaces_admin__common.rs

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