Skip to main content

fidl_fuchsia_net_policy_socketproxy_common/
fidl_fuchsia_net_policy_socketproxy_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
11bitflags! {
12    /// Capabilities of a network.
13    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
14    pub struct NetworkCapability: u32 {
15        const UNMETERED = 1;
16        const UNCONGESTED = 2;
17        const NOT_BANDWIDTH_CONSTRAINED = 4;
18    }
19}
20
21impl NetworkCapability {
22    #[inline(always)]
23    pub fn from_bits_allow_unknown(bits: u32) -> Self {
24        Self::from_bits_retain(bits)
25    }
26
27    #[inline(always)]
28    pub fn has_unknown_bits(&self) -> bool {
29        self.get_unknown_bits() != 0
30    }
31
32    #[inline(always)]
33    pub fn get_unknown_bits(&self) -> u32 {
34        self.bits() & !Self::all().bits()
35    }
36}
37
38bitflags! {
39    /// A bitset to represent whether a condition is true across the
40    /// IPv4 and IPv6 protocols.
41    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
42    pub struct ProtoProperties: u8 {
43        const V4 = 1;
44        const V6 = 2;
45    }
46}
47
48impl ProtoProperties {}
49
50/// The tier of connectivity for a network.
51#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
52pub enum ConnectivityState {
53    /// Indicates that a network cannot communicate with local
54    /// devices or reach the Internet.
55    NoConnectivity,
56    /// Indicates that a network can only communicate with other
57    /// devices on the local network.
58    LocalConnectivity,
59    /// Indicates that a network can only partially reach the Internet.
60    /// For example, it can send ICMP probes, but cannot resolve DNS.
61    PartialConnectivity,
62    /// Indicates that a network has been verified to reach the Internet.
63    /// For example, by successfully resolving DNS and HTTP requests.
64    FullConnectivity,
65    #[doc(hidden)]
66    __SourceBreaking { unknown_ordinal: u32 },
67}
68
69/// Pattern that matches an unknown `ConnectivityState` member.
70#[macro_export]
71macro_rules! ConnectivityStateUnknown {
72    () => {
73        _
74    };
75}
76
77impl ConnectivityState {
78    #[inline]
79    pub fn from_primitive(prim: u32) -> Option<Self> {
80        match prim {
81            1 => Some(Self::NoConnectivity),
82            3 => Some(Self::LocalConnectivity),
83            4 => Some(Self::PartialConnectivity),
84            5 => Some(Self::FullConnectivity),
85            _ => None,
86        }
87    }
88
89    #[inline]
90    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
91        match prim {
92            1 => Self::NoConnectivity,
93            3 => Self::LocalConnectivity,
94            4 => Self::PartialConnectivity,
95            5 => Self::FullConnectivity,
96            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
97        }
98    }
99
100    #[inline]
101    pub fn unknown() -> Self {
102        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
103    }
104
105    #[inline]
106    pub const fn into_primitive(self) -> u32 {
107        match self {
108            Self::NoConnectivity => 1,
109            Self::LocalConnectivity => 3,
110            Self::PartialConnectivity => 4,
111            Self::FullConnectivity => 5,
112            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
113        }
114    }
115
116    #[inline]
117    pub fn is_unknown(&self) -> bool {
118        match self {
119            Self::__SourceBreaking { unknown_ordinal: _ } => true,
120            _ => false,
121        }
122    }
123}
124
125#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
126pub enum NetworkRegistryAddError {
127    /// The `network_id` was not specified in the Network table.
128    MissingNetworkId,
129    /// The `info` was not specified in the Network table.
130    MissingNetworkInfo,
131    /// The `dns_servers` was not specified in the Network table.
132    MissingNetworkDnsServers,
133    /// There already exists a network with this network_id.
134    /// To update an existing network, use Update.
135    DuplicateNetworkId,
136    #[doc(hidden)]
137    __SourceBreaking { unknown_ordinal: u32 },
138}
139
140/// Pattern that matches an unknown `NetworkRegistryAddError` member.
141#[macro_export]
142macro_rules! NetworkRegistryAddErrorUnknown {
143    () => {
144        _
145    };
146}
147
148impl NetworkRegistryAddError {
149    #[inline]
150    pub fn from_primitive(prim: u32) -> Option<Self> {
151        match prim {
152            1 => Some(Self::MissingNetworkId),
153            2 => Some(Self::MissingNetworkInfo),
154            3 => Some(Self::MissingNetworkDnsServers),
155            4 => Some(Self::DuplicateNetworkId),
156            _ => None,
157        }
158    }
159
160    #[inline]
161    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
162        match prim {
163            1 => Self::MissingNetworkId,
164            2 => Self::MissingNetworkInfo,
165            3 => Self::MissingNetworkDnsServers,
166            4 => Self::DuplicateNetworkId,
167            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
168        }
169    }
170
171    #[inline]
172    pub fn unknown() -> Self {
173        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
174    }
175
176    #[inline]
177    pub const fn into_primitive(self) -> u32 {
178        match self {
179            Self::MissingNetworkId => 1,
180            Self::MissingNetworkInfo => 2,
181            Self::MissingNetworkDnsServers => 3,
182            Self::DuplicateNetworkId => 4,
183            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
184        }
185    }
186
187    #[inline]
188    pub fn is_unknown(&self) -> bool {
189        match self {
190            Self::__SourceBreaking { unknown_ordinal: _ } => true,
191            _ => false,
192        }
193    }
194}
195
196#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
197pub enum NetworkRegistryRemoveError {
198    /// No network with this network_id found.
199    NotFound,
200    /// The specified network is currently marked as the default network.
201    CannotRemoveDefaultNetwork,
202    #[doc(hidden)]
203    __SourceBreaking { unknown_ordinal: u32 },
204}
205
206/// Pattern that matches an unknown `NetworkRegistryRemoveError` member.
207#[macro_export]
208macro_rules! NetworkRegistryRemoveErrorUnknown {
209    () => {
210        _
211    };
212}
213
214impl NetworkRegistryRemoveError {
215    #[inline]
216    pub fn from_primitive(prim: u32) -> Option<Self> {
217        match prim {
218            1 => Some(Self::NotFound),
219            2 => Some(Self::CannotRemoveDefaultNetwork),
220            _ => None,
221        }
222    }
223
224    #[inline]
225    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
226        match prim {
227            1 => Self::NotFound,
228            2 => Self::CannotRemoveDefaultNetwork,
229            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
230        }
231    }
232
233    #[inline]
234    pub fn unknown() -> Self {
235        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
236    }
237
238    #[inline]
239    pub const fn into_primitive(self) -> u32 {
240        match self {
241            Self::NotFound => 1,
242            Self::CannotRemoveDefaultNetwork => 2,
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            _ => false,
252        }
253    }
254}
255
256#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
257pub enum NetworkRegistrySetDefaultError {
258    /// No network with this network_id found.
259    NotFound,
260    #[doc(hidden)]
261    __SourceBreaking { unknown_ordinal: u32 },
262}
263
264/// Pattern that matches an unknown `NetworkRegistrySetDefaultError` member.
265#[macro_export]
266macro_rules! NetworkRegistrySetDefaultErrorUnknown {
267    () => {
268        _
269    };
270}
271
272impl NetworkRegistrySetDefaultError {
273    #[inline]
274    pub fn from_primitive(prim: u32) -> Option<Self> {
275        match prim {
276            1 => Some(Self::NotFound),
277            _ => None,
278        }
279    }
280
281    #[inline]
282    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
283        match prim {
284            1 => Self::NotFound,
285            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
286        }
287    }
288
289    #[inline]
290    pub fn unknown() -> Self {
291        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
292    }
293
294    #[inline]
295    pub const fn into_primitive(self) -> u32 {
296        match self {
297            Self::NotFound => 1,
298            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
299        }
300    }
301
302    #[inline]
303    pub fn is_unknown(&self) -> bool {
304        match self {
305            Self::__SourceBreaking { unknown_ordinal: _ } => true,
306            _ => false,
307        }
308    }
309}
310
311#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
312pub enum NetworkRegistryUpdateError {
313    /// The `network_id` was not specified in the Network table.
314    MissingNetworkId,
315    /// The `info` was not specified in the Network table.
316    MissingNetworkInfo,
317    /// The `dns_servers` was not specified in the Network table.
318    MissingNetworkDnsServers,
319    /// No network with this `network_id` found.
320    NotFound,
321    #[doc(hidden)]
322    __SourceBreaking { unknown_ordinal: u32 },
323}
324
325/// Pattern that matches an unknown `NetworkRegistryUpdateError` member.
326#[macro_export]
327macro_rules! NetworkRegistryUpdateErrorUnknown {
328    () => {
329        _
330    };
331}
332
333impl NetworkRegistryUpdateError {
334    #[inline]
335    pub fn from_primitive(prim: u32) -> Option<Self> {
336        match prim {
337            1 => Some(Self::MissingNetworkId),
338            2 => Some(Self::MissingNetworkInfo),
339            3 => Some(Self::MissingNetworkDnsServers),
340            4 => Some(Self::NotFound),
341            _ => None,
342        }
343    }
344
345    #[inline]
346    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
347        match prim {
348            1 => Self::MissingNetworkId,
349            2 => Self::MissingNetworkInfo,
350            3 => Self::MissingNetworkDnsServers,
351            4 => Self::NotFound,
352            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
353        }
354    }
355
356    #[inline]
357    pub fn unknown() -> Self {
358        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
359    }
360
361    #[inline]
362    pub const fn into_primitive(self) -> u32 {
363        match self {
364            Self::MissingNetworkId => 1,
365            Self::MissingNetworkInfo => 2,
366            Self::MissingNetworkDnsServers => 3,
367            Self::NotFound => 4,
368            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
369        }
370    }
371
372    #[inline]
373    pub fn is_unknown(&self) -> bool {
374        match self {
375            Self::__SourceBreaking { unknown_ordinal: _ } => true,
376            _ => false,
377        }
378    }
379}
380
381/// The physical medium used for a network.
382#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
383pub enum NetworkType {
384    Unknown,
385    Ethernet,
386    Wifi,
387    Bluetooth,
388    Cellular,
389    #[doc(hidden)]
390    __SourceBreaking {
391        unknown_ordinal: u32,
392    },
393}
394
395/// Pattern that matches an unknown `NetworkType` member.
396#[macro_export]
397macro_rules! NetworkTypeUnknown {
398    () => {
399        _
400    };
401}
402
403impl NetworkType {
404    #[inline]
405    pub fn from_primitive(prim: u32) -> Option<Self> {
406        match prim {
407            1 => Some(Self::Unknown),
408            2 => Some(Self::Ethernet),
409            3 => Some(Self::Wifi),
410            4 => Some(Self::Bluetooth),
411            5 => Some(Self::Cellular),
412            _ => None,
413        }
414    }
415
416    #[inline]
417    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
418        match prim {
419            1 => Self::Unknown,
420            2 => Self::Ethernet,
421            3 => Self::Wifi,
422            4 => Self::Bluetooth,
423            5 => Self::Cellular,
424            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
425        }
426    }
427
428    #[inline]
429    pub fn unknown() -> Self {
430        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
431    }
432
433    #[inline]
434    pub const fn into_primitive(self) -> u32 {
435        match self {
436            Self::Unknown => 1,
437            Self::Ethernet => 2,
438            Self::Wifi => 3,
439            Self::Bluetooth => 4,
440            Self::Cellular => 5,
441            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
442        }
443    }
444
445    #[inline]
446    pub fn is_unknown(&self) -> bool {
447        match self {
448            Self::__SourceBreaking { unknown_ordinal: _ } => true,
449            _ => false,
450        }
451    }
452}
453
454#[derive(Clone, Debug, PartialEq)]
455pub struct NetworkRegistryAddRequest {
456    pub network: Network,
457}
458
459impl fidl::Persistable for NetworkRegistryAddRequest {}
460
461#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
462#[repr(C)]
463pub struct NetworkRegistryRemoveRequest {
464    pub network_id: u32,
465}
466
467impl fidl::Persistable for NetworkRegistryRemoveRequest {}
468
469#[derive(Clone, Debug, PartialEq)]
470pub struct NetworkRegistrySetDefaultRequest {
471    pub network_id: fidl_fuchsia_posix_socket_common::OptionalUint32,
472}
473
474impl fidl::Persistable for NetworkRegistrySetDefaultRequest {}
475
476#[derive(Clone, Debug, PartialEq)]
477pub struct NetworkRegistryUpdateRequest {
478    pub network: Network,
479}
480
481impl fidl::Persistable for NetworkRegistryUpdateRequest {}
482
483#[derive(Clone, Debug, Default, PartialEq)]
484pub struct FuchsiaNetworkInfo {
485    #[doc(hidden)]
486    pub __source_breaking: fidl::marker::SourceBreaking,
487}
488
489impl fidl::Persistable for FuchsiaNetworkInfo {}
490
491/// Network describes a single network interface provided to NetworkRegistry.
492#[derive(Clone, Debug, Default, PartialEq)]
493pub struct Network {
494    /// A unique ID for the registered network.
495    ///
496    /// Required.
497    pub network_id: Option<u32>,
498    /// Platform specific information about the network.
499    ///
500    /// Required.
501    pub info: Option<NetworkInfo>,
502    /// REQUIRED. The DNS servers associated with this network.
503    pub dns_servers: Option<NetworkDnsServers>,
504    /// The transport type for the network.
505    ///
506    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpreted
507    /// as NetworkType::UNKNOWN when absent.
508    pub network_type: Option<NetworkType>,
509    /// The capabilities for the network.
510    ///
511    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpreted
512    /// as an empty list when absent.
513    pub capabilities: Option<Vec<NetworkCapability>>,
514    /// The level of connectivity for the network.
515    ///
516    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpreted
517    /// as ConnectivityState::NO_CONNECTIVITY when absent.
518    pub connectivity: Option<ConnectivityState>,
519    /// The name of the underlying interface for the network.
520    ///
521    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpreted
522    /// as the empty string when absent.
523    pub name: Option<String>,
524    /// Whether the underlying interface has a v4/v6 address assigned.
525    ///
526    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpreted
527    /// as no information is available when absent.
528    pub has_address: Option<ProtoProperties>,
529    /// Whether the underlying interface has a v4/v6 default route.
530    ///
531    /// Added in FuchsiaNetworkMonitorFs NetworkMessage version 2. Interpereted
532    /// as no information is available when absent.
533    pub has_default_route: Option<ProtoProperties>,
534    #[doc(hidden)]
535    pub __source_breaking: fidl::marker::SourceBreaking,
536}
537
538impl fidl::Persistable for Network {}
539
540#[derive(Clone, Debug, Default, PartialEq)]
541pub struct NetworkDnsServers {
542    pub v4: Option<Vec<fidl_fuchsia_net_common::Ipv4Address>>,
543    pub v6: Option<Vec<fidl_fuchsia_net_common::Ipv6Address>>,
544    #[doc(hidden)]
545    pub __source_breaking: fidl::marker::SourceBreaking,
546}
547
548impl fidl::Persistable for NetworkDnsServers {}
549
550#[derive(Clone, Debug, Default, PartialEq)]
551pub struct StarnixNetworkInfo {
552    pub mark: Option<u32>,
553    pub handle: Option<u64>,
554    #[doc(hidden)]
555    pub __source_breaking: fidl::marker::SourceBreaking,
556}
557
558impl fidl::Persistable for StarnixNetworkInfo {}
559
560#[derive(Clone, Debug)]
561pub enum NetworkInfo {
562    /// Information about Starnix registered networks.
563    Starnix(StarnixNetworkInfo),
564    /// Information about Fuchsia registered networks.
565    Fuchsia(FuchsiaNetworkInfo),
566    #[doc(hidden)]
567    __SourceBreaking { unknown_ordinal: u64 },
568}
569
570/// Pattern that matches an unknown `NetworkInfo` member.
571#[macro_export]
572macro_rules! NetworkInfoUnknown {
573    () => {
574        _
575    };
576}
577
578// Custom PartialEq so that unknown variants are not equal to themselves.
579impl PartialEq for NetworkInfo {
580    fn eq(&self, other: &Self) -> bool {
581        match (self, other) {
582            (Self::Starnix(x), Self::Starnix(y)) => *x == *y,
583            (Self::Fuchsia(x), Self::Fuchsia(y)) => *x == *y,
584            _ => false,
585        }
586    }
587}
588
589impl NetworkInfo {
590    #[inline]
591    pub fn ordinal(&self) -> u64 {
592        match *self {
593            Self::Starnix(_) => 1,
594            Self::Fuchsia(_) => 2,
595            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
596        }
597    }
598
599    #[inline]
600    pub fn unknown_variant_for_testing() -> Self {
601        Self::__SourceBreaking { unknown_ordinal: 0 }
602    }
603
604    #[inline]
605    pub fn is_unknown(&self) -> bool {
606        match self {
607            Self::__SourceBreaking { .. } => true,
608            _ => false,
609        }
610    }
611}
612
613impl fidl::Persistable for NetworkInfo {}
614
615pub mod fuchsia_networks_ordinals {
616    pub const SET_DEFAULT: u64 = 0x787930c67b8cf82c;
617    pub const ADD: u64 = 0x197e70a1cbeab3ad;
618    pub const UPDATE: u64 = 0x3bc790ae5418ff0e;
619    pub const REMOVE: u64 = 0x1302df41dca6379e;
620}
621
622pub mod network_registry_ordinals {
623    pub const SET_DEFAULT: u64 = 0x787930c67b8cf82c;
624    pub const ADD: u64 = 0x197e70a1cbeab3ad;
625    pub const UPDATE: u64 = 0x3bc790ae5418ff0e;
626    pub const REMOVE: u64 = 0x1302df41dca6379e;
627}
628
629pub mod starnix_networks_ordinals {
630    pub const SET_DEFAULT: u64 = 0x787930c67b8cf82c;
631    pub const ADD: u64 = 0x197e70a1cbeab3ad;
632    pub const UPDATE: u64 = 0x3bc790ae5418ff0e;
633    pub const REMOVE: u64 = 0x1302df41dca6379e;
634}
635
636mod internal {
637    use super::*;
638    unsafe impl fidl::encoding::TypeMarker for NetworkCapability {
639        type Owned = Self;
640
641        #[inline(always)]
642        fn inline_align(_context: fidl::encoding::Context) -> usize {
643            4
644        }
645
646        #[inline(always)]
647        fn inline_size(_context: fidl::encoding::Context) -> usize {
648            4
649        }
650    }
651
652    impl fidl::encoding::ValueTypeMarker for NetworkCapability {
653        type Borrowed<'a> = Self;
654        #[inline(always)]
655        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
656            *value
657        }
658    }
659
660    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
661        for NetworkCapability
662    {
663        #[inline]
664        unsafe fn encode(
665            self,
666            encoder: &mut fidl::encoding::Encoder<'_, D>,
667            offset: usize,
668            _depth: fidl::encoding::Depth,
669        ) -> fidl::Result<()> {
670            encoder.debug_check_bounds::<Self>(offset);
671            encoder.write_num(self.bits(), offset);
672            Ok(())
673        }
674    }
675
676    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkCapability {
677        #[inline(always)]
678        fn new_empty() -> Self {
679            Self::empty()
680        }
681
682        #[inline]
683        unsafe fn decode(
684            &mut self,
685            decoder: &mut fidl::encoding::Decoder<'_, D>,
686            offset: usize,
687            _depth: fidl::encoding::Depth,
688        ) -> fidl::Result<()> {
689            decoder.debug_check_bounds::<Self>(offset);
690            let prim = decoder.read_num::<u32>(offset);
691            *self = Self::from_bits_allow_unknown(prim);
692            Ok(())
693        }
694    }
695    unsafe impl fidl::encoding::TypeMarker for ProtoProperties {
696        type Owned = Self;
697
698        #[inline(always)]
699        fn inline_align(_context: fidl::encoding::Context) -> usize {
700            1
701        }
702
703        #[inline(always)]
704        fn inline_size(_context: fidl::encoding::Context) -> usize {
705            1
706        }
707    }
708
709    impl fidl::encoding::ValueTypeMarker for ProtoProperties {
710        type Borrowed<'a> = Self;
711        #[inline(always)]
712        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
713            *value
714        }
715    }
716
717    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
718        for ProtoProperties
719    {
720        #[inline]
721        unsafe fn encode(
722            self,
723            encoder: &mut fidl::encoding::Encoder<'_, D>,
724            offset: usize,
725            _depth: fidl::encoding::Depth,
726        ) -> fidl::Result<()> {
727            encoder.debug_check_bounds::<Self>(offset);
728            if self.bits() & Self::all().bits() != self.bits() {
729                return Err(fidl::Error::InvalidBitsValue);
730            }
731            encoder.write_num(self.bits(), offset);
732            Ok(())
733        }
734    }
735
736    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProtoProperties {
737        #[inline(always)]
738        fn new_empty() -> Self {
739            Self::empty()
740        }
741
742        #[inline]
743        unsafe fn decode(
744            &mut self,
745            decoder: &mut fidl::encoding::Decoder<'_, D>,
746            offset: usize,
747            _depth: fidl::encoding::Depth,
748        ) -> fidl::Result<()> {
749            decoder.debug_check_bounds::<Self>(offset);
750            let prim = decoder.read_num::<u8>(offset);
751            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
752            Ok(())
753        }
754    }
755    unsafe impl fidl::encoding::TypeMarker for ConnectivityState {
756        type Owned = Self;
757
758        #[inline(always)]
759        fn inline_align(_context: fidl::encoding::Context) -> usize {
760            std::mem::align_of::<u32>()
761        }
762
763        #[inline(always)]
764        fn inline_size(_context: fidl::encoding::Context) -> usize {
765            std::mem::size_of::<u32>()
766        }
767
768        #[inline(always)]
769        fn encode_is_copy() -> bool {
770            false
771        }
772
773        #[inline(always)]
774        fn decode_is_copy() -> bool {
775            false
776        }
777    }
778
779    impl fidl::encoding::ValueTypeMarker for ConnectivityState {
780        type Borrowed<'a> = Self;
781        #[inline(always)]
782        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
783            *value
784        }
785    }
786
787    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
788        for ConnectivityState
789    {
790        #[inline]
791        unsafe fn encode(
792            self,
793            encoder: &mut fidl::encoding::Encoder<'_, D>,
794            offset: usize,
795            _depth: fidl::encoding::Depth,
796        ) -> fidl::Result<()> {
797            encoder.debug_check_bounds::<Self>(offset);
798            encoder.write_num(self.into_primitive(), offset);
799            Ok(())
800        }
801    }
802
803    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectivityState {
804        #[inline(always)]
805        fn new_empty() -> Self {
806            Self::unknown()
807        }
808
809        #[inline]
810        unsafe fn decode(
811            &mut self,
812            decoder: &mut fidl::encoding::Decoder<'_, D>,
813            offset: usize,
814            _depth: fidl::encoding::Depth,
815        ) -> fidl::Result<()> {
816            decoder.debug_check_bounds::<Self>(offset);
817            let prim = decoder.read_num::<u32>(offset);
818
819            *self = Self::from_primitive_allow_unknown(prim);
820            Ok(())
821        }
822    }
823    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryAddError {
824        type Owned = Self;
825
826        #[inline(always)]
827        fn inline_align(_context: fidl::encoding::Context) -> usize {
828            std::mem::align_of::<u32>()
829        }
830
831        #[inline(always)]
832        fn inline_size(_context: fidl::encoding::Context) -> usize {
833            std::mem::size_of::<u32>()
834        }
835
836        #[inline(always)]
837        fn encode_is_copy() -> bool {
838            false
839        }
840
841        #[inline(always)]
842        fn decode_is_copy() -> bool {
843            false
844        }
845    }
846
847    impl fidl::encoding::ValueTypeMarker for NetworkRegistryAddError {
848        type Borrowed<'a> = Self;
849        #[inline(always)]
850        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
851            *value
852        }
853    }
854
855    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
856        for NetworkRegistryAddError
857    {
858        #[inline]
859        unsafe fn encode(
860            self,
861            encoder: &mut fidl::encoding::Encoder<'_, D>,
862            offset: usize,
863            _depth: fidl::encoding::Depth,
864        ) -> fidl::Result<()> {
865            encoder.debug_check_bounds::<Self>(offset);
866            encoder.write_num(self.into_primitive(), offset);
867            Ok(())
868        }
869    }
870
871    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
872        for NetworkRegistryAddError
873    {
874        #[inline(always)]
875        fn new_empty() -> Self {
876            Self::unknown()
877        }
878
879        #[inline]
880        unsafe fn decode(
881            &mut self,
882            decoder: &mut fidl::encoding::Decoder<'_, D>,
883            offset: usize,
884            _depth: fidl::encoding::Depth,
885        ) -> fidl::Result<()> {
886            decoder.debug_check_bounds::<Self>(offset);
887            let prim = decoder.read_num::<u32>(offset);
888
889            *self = Self::from_primitive_allow_unknown(prim);
890            Ok(())
891        }
892    }
893    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryRemoveError {
894        type Owned = Self;
895
896        #[inline(always)]
897        fn inline_align(_context: fidl::encoding::Context) -> usize {
898            std::mem::align_of::<u32>()
899        }
900
901        #[inline(always)]
902        fn inline_size(_context: fidl::encoding::Context) -> usize {
903            std::mem::size_of::<u32>()
904        }
905
906        #[inline(always)]
907        fn encode_is_copy() -> bool {
908            false
909        }
910
911        #[inline(always)]
912        fn decode_is_copy() -> bool {
913            false
914        }
915    }
916
917    impl fidl::encoding::ValueTypeMarker for NetworkRegistryRemoveError {
918        type Borrowed<'a> = Self;
919        #[inline(always)]
920        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
921            *value
922        }
923    }
924
925    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
926        for NetworkRegistryRemoveError
927    {
928        #[inline]
929        unsafe fn encode(
930            self,
931            encoder: &mut fidl::encoding::Encoder<'_, D>,
932            offset: usize,
933            _depth: fidl::encoding::Depth,
934        ) -> fidl::Result<()> {
935            encoder.debug_check_bounds::<Self>(offset);
936            encoder.write_num(self.into_primitive(), offset);
937            Ok(())
938        }
939    }
940
941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
942        for NetworkRegistryRemoveError
943    {
944        #[inline(always)]
945        fn new_empty() -> Self {
946            Self::unknown()
947        }
948
949        #[inline]
950        unsafe fn decode(
951            &mut self,
952            decoder: &mut fidl::encoding::Decoder<'_, D>,
953            offset: usize,
954            _depth: fidl::encoding::Depth,
955        ) -> fidl::Result<()> {
956            decoder.debug_check_bounds::<Self>(offset);
957            let prim = decoder.read_num::<u32>(offset);
958
959            *self = Self::from_primitive_allow_unknown(prim);
960            Ok(())
961        }
962    }
963    unsafe impl fidl::encoding::TypeMarker for NetworkRegistrySetDefaultError {
964        type Owned = Self;
965
966        #[inline(always)]
967        fn inline_align(_context: fidl::encoding::Context) -> usize {
968            std::mem::align_of::<u32>()
969        }
970
971        #[inline(always)]
972        fn inline_size(_context: fidl::encoding::Context) -> usize {
973            std::mem::size_of::<u32>()
974        }
975
976        #[inline(always)]
977        fn encode_is_copy() -> bool {
978            false
979        }
980
981        #[inline(always)]
982        fn decode_is_copy() -> bool {
983            false
984        }
985    }
986
987    impl fidl::encoding::ValueTypeMarker for NetworkRegistrySetDefaultError {
988        type Borrowed<'a> = Self;
989        #[inline(always)]
990        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
991            *value
992        }
993    }
994
995    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
996        for NetworkRegistrySetDefaultError
997    {
998        #[inline]
999        unsafe fn encode(
1000            self,
1001            encoder: &mut fidl::encoding::Encoder<'_, D>,
1002            offset: usize,
1003            _depth: fidl::encoding::Depth,
1004        ) -> fidl::Result<()> {
1005            encoder.debug_check_bounds::<Self>(offset);
1006            encoder.write_num(self.into_primitive(), offset);
1007            Ok(())
1008        }
1009    }
1010
1011    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1012        for NetworkRegistrySetDefaultError
1013    {
1014        #[inline(always)]
1015        fn new_empty() -> Self {
1016            Self::unknown()
1017        }
1018
1019        #[inline]
1020        unsafe fn decode(
1021            &mut self,
1022            decoder: &mut fidl::encoding::Decoder<'_, D>,
1023            offset: usize,
1024            _depth: fidl::encoding::Depth,
1025        ) -> fidl::Result<()> {
1026            decoder.debug_check_bounds::<Self>(offset);
1027            let prim = decoder.read_num::<u32>(offset);
1028
1029            *self = Self::from_primitive_allow_unknown(prim);
1030            Ok(())
1031        }
1032    }
1033    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryUpdateError {
1034        type Owned = Self;
1035
1036        #[inline(always)]
1037        fn inline_align(_context: fidl::encoding::Context) -> usize {
1038            std::mem::align_of::<u32>()
1039        }
1040
1041        #[inline(always)]
1042        fn inline_size(_context: fidl::encoding::Context) -> usize {
1043            std::mem::size_of::<u32>()
1044        }
1045
1046        #[inline(always)]
1047        fn encode_is_copy() -> bool {
1048            false
1049        }
1050
1051        #[inline(always)]
1052        fn decode_is_copy() -> bool {
1053            false
1054        }
1055    }
1056
1057    impl fidl::encoding::ValueTypeMarker for NetworkRegistryUpdateError {
1058        type Borrowed<'a> = Self;
1059        #[inline(always)]
1060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1061            *value
1062        }
1063    }
1064
1065    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1066        for NetworkRegistryUpdateError
1067    {
1068        #[inline]
1069        unsafe fn encode(
1070            self,
1071            encoder: &mut fidl::encoding::Encoder<'_, D>,
1072            offset: usize,
1073            _depth: fidl::encoding::Depth,
1074        ) -> fidl::Result<()> {
1075            encoder.debug_check_bounds::<Self>(offset);
1076            encoder.write_num(self.into_primitive(), offset);
1077            Ok(())
1078        }
1079    }
1080
1081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1082        for NetworkRegistryUpdateError
1083    {
1084        #[inline(always)]
1085        fn new_empty() -> Self {
1086            Self::unknown()
1087        }
1088
1089        #[inline]
1090        unsafe fn decode(
1091            &mut self,
1092            decoder: &mut fidl::encoding::Decoder<'_, D>,
1093            offset: usize,
1094            _depth: fidl::encoding::Depth,
1095        ) -> fidl::Result<()> {
1096            decoder.debug_check_bounds::<Self>(offset);
1097            let prim = decoder.read_num::<u32>(offset);
1098
1099            *self = Self::from_primitive_allow_unknown(prim);
1100            Ok(())
1101        }
1102    }
1103    unsafe impl fidl::encoding::TypeMarker for NetworkType {
1104        type Owned = Self;
1105
1106        #[inline(always)]
1107        fn inline_align(_context: fidl::encoding::Context) -> usize {
1108            std::mem::align_of::<u32>()
1109        }
1110
1111        #[inline(always)]
1112        fn inline_size(_context: fidl::encoding::Context) -> usize {
1113            std::mem::size_of::<u32>()
1114        }
1115
1116        #[inline(always)]
1117        fn encode_is_copy() -> bool {
1118            false
1119        }
1120
1121        #[inline(always)]
1122        fn decode_is_copy() -> bool {
1123            false
1124        }
1125    }
1126
1127    impl fidl::encoding::ValueTypeMarker for NetworkType {
1128        type Borrowed<'a> = Self;
1129        #[inline(always)]
1130        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1131            *value
1132        }
1133    }
1134
1135    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for NetworkType {
1136        #[inline]
1137        unsafe fn encode(
1138            self,
1139            encoder: &mut fidl::encoding::Encoder<'_, D>,
1140            offset: usize,
1141            _depth: fidl::encoding::Depth,
1142        ) -> fidl::Result<()> {
1143            encoder.debug_check_bounds::<Self>(offset);
1144            encoder.write_num(self.into_primitive(), offset);
1145            Ok(())
1146        }
1147    }
1148
1149    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkType {
1150        #[inline(always)]
1151        fn new_empty() -> Self {
1152            Self::unknown()
1153        }
1154
1155        #[inline]
1156        unsafe fn decode(
1157            &mut self,
1158            decoder: &mut fidl::encoding::Decoder<'_, D>,
1159            offset: usize,
1160            _depth: fidl::encoding::Depth,
1161        ) -> fidl::Result<()> {
1162            decoder.debug_check_bounds::<Self>(offset);
1163            let prim = decoder.read_num::<u32>(offset);
1164
1165            *self = Self::from_primitive_allow_unknown(prim);
1166            Ok(())
1167        }
1168    }
1169
1170    impl fidl::encoding::ValueTypeMarker for NetworkRegistryAddRequest {
1171        type Borrowed<'a> = &'a Self;
1172        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1173            value
1174        }
1175    }
1176
1177    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryAddRequest {
1178        type Owned = Self;
1179
1180        #[inline(always)]
1181        fn inline_align(_context: fidl::encoding::Context) -> usize {
1182            8
1183        }
1184
1185        #[inline(always)]
1186        fn inline_size(_context: fidl::encoding::Context) -> usize {
1187            16
1188        }
1189    }
1190
1191    unsafe impl<D: fidl::encoding::ResourceDialect>
1192        fidl::encoding::Encode<NetworkRegistryAddRequest, D> for &NetworkRegistryAddRequest
1193    {
1194        #[inline]
1195        unsafe fn encode(
1196            self,
1197            encoder: &mut fidl::encoding::Encoder<'_, D>,
1198            offset: usize,
1199            _depth: fidl::encoding::Depth,
1200        ) -> fidl::Result<()> {
1201            encoder.debug_check_bounds::<NetworkRegistryAddRequest>(offset);
1202            // Delegate to tuple encoding.
1203            fidl::encoding::Encode::<NetworkRegistryAddRequest, D>::encode(
1204                (<Network as fidl::encoding::ValueTypeMarker>::borrow(&self.network),),
1205                encoder,
1206                offset,
1207                _depth,
1208            )
1209        }
1210    }
1211    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Network, D>>
1212        fidl::encoding::Encode<NetworkRegistryAddRequest, D> for (T0,)
1213    {
1214        #[inline]
1215        unsafe fn encode(
1216            self,
1217            encoder: &mut fidl::encoding::Encoder<'_, D>,
1218            offset: usize,
1219            depth: fidl::encoding::Depth,
1220        ) -> fidl::Result<()> {
1221            encoder.debug_check_bounds::<NetworkRegistryAddRequest>(offset);
1222            // Zero out padding regions. There's no need to apply masks
1223            // because the unmasked parts will be overwritten by fields.
1224            // Write the fields.
1225            self.0.encode(encoder, offset + 0, depth)?;
1226            Ok(())
1227        }
1228    }
1229
1230    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1231        for NetworkRegistryAddRequest
1232    {
1233        #[inline(always)]
1234        fn new_empty() -> Self {
1235            Self { network: fidl::new_empty!(Network, D) }
1236        }
1237
1238        #[inline]
1239        unsafe fn decode(
1240            &mut self,
1241            decoder: &mut fidl::encoding::Decoder<'_, D>,
1242            offset: usize,
1243            _depth: fidl::encoding::Depth,
1244        ) -> fidl::Result<()> {
1245            decoder.debug_check_bounds::<Self>(offset);
1246            // Verify that padding bytes are zero.
1247            fidl::decode!(Network, D, &mut self.network, decoder, offset + 0, _depth)?;
1248            Ok(())
1249        }
1250    }
1251
1252    impl fidl::encoding::ValueTypeMarker for NetworkRegistryRemoveRequest {
1253        type Borrowed<'a> = &'a Self;
1254        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1255            value
1256        }
1257    }
1258
1259    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryRemoveRequest {
1260        type Owned = Self;
1261
1262        #[inline(always)]
1263        fn inline_align(_context: fidl::encoding::Context) -> usize {
1264            4
1265        }
1266
1267        #[inline(always)]
1268        fn inline_size(_context: fidl::encoding::Context) -> usize {
1269            4
1270        }
1271        #[inline(always)]
1272        fn encode_is_copy() -> bool {
1273            true
1274        }
1275
1276        #[inline(always)]
1277        fn decode_is_copy() -> bool {
1278            true
1279        }
1280    }
1281
1282    unsafe impl<D: fidl::encoding::ResourceDialect>
1283        fidl::encoding::Encode<NetworkRegistryRemoveRequest, D> for &NetworkRegistryRemoveRequest
1284    {
1285        #[inline]
1286        unsafe fn encode(
1287            self,
1288            encoder: &mut fidl::encoding::Encoder<'_, D>,
1289            offset: usize,
1290            _depth: fidl::encoding::Depth,
1291        ) -> fidl::Result<()> {
1292            encoder.debug_check_bounds::<NetworkRegistryRemoveRequest>(offset);
1293            unsafe {
1294                // Copy the object into the buffer.
1295                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1296                (buf_ptr as *mut NetworkRegistryRemoveRequest)
1297                    .write_unaligned((self as *const NetworkRegistryRemoveRequest).read());
1298                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1299                // done second because the memcpy will write garbage to these bytes.
1300            }
1301            Ok(())
1302        }
1303    }
1304    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1305        fidl::encoding::Encode<NetworkRegistryRemoveRequest, D> for (T0,)
1306    {
1307        #[inline]
1308        unsafe fn encode(
1309            self,
1310            encoder: &mut fidl::encoding::Encoder<'_, D>,
1311            offset: usize,
1312            depth: fidl::encoding::Depth,
1313        ) -> fidl::Result<()> {
1314            encoder.debug_check_bounds::<NetworkRegistryRemoveRequest>(offset);
1315            // Zero out padding regions. There's no need to apply masks
1316            // because the unmasked parts will be overwritten by fields.
1317            // Write the fields.
1318            self.0.encode(encoder, offset + 0, depth)?;
1319            Ok(())
1320        }
1321    }
1322
1323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1324        for NetworkRegistryRemoveRequest
1325    {
1326        #[inline(always)]
1327        fn new_empty() -> Self {
1328            Self { network_id: fidl::new_empty!(u32, D) }
1329        }
1330
1331        #[inline]
1332        unsafe fn decode(
1333            &mut self,
1334            decoder: &mut fidl::encoding::Decoder<'_, D>,
1335            offset: usize,
1336            _depth: fidl::encoding::Depth,
1337        ) -> fidl::Result<()> {
1338            decoder.debug_check_bounds::<Self>(offset);
1339            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1340            // Verify that padding bytes are zero.
1341            // Copy from the buffer into the object.
1342            unsafe {
1343                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1344            }
1345            Ok(())
1346        }
1347    }
1348
1349    impl fidl::encoding::ValueTypeMarker for NetworkRegistrySetDefaultRequest {
1350        type Borrowed<'a> = &'a Self;
1351        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1352            value
1353        }
1354    }
1355
1356    unsafe impl fidl::encoding::TypeMarker for NetworkRegistrySetDefaultRequest {
1357        type Owned = Self;
1358
1359        #[inline(always)]
1360        fn inline_align(_context: fidl::encoding::Context) -> usize {
1361            8
1362        }
1363
1364        #[inline(always)]
1365        fn inline_size(_context: fidl::encoding::Context) -> usize {
1366            16
1367        }
1368    }
1369
1370    unsafe impl<D: fidl::encoding::ResourceDialect>
1371        fidl::encoding::Encode<NetworkRegistrySetDefaultRequest, D>
1372        for &NetworkRegistrySetDefaultRequest
1373    {
1374        #[inline]
1375        unsafe fn encode(
1376            self,
1377            encoder: &mut fidl::encoding::Encoder<'_, D>,
1378            offset: usize,
1379            _depth: fidl::encoding::Depth,
1380        ) -> fidl::Result<()> {
1381            encoder.debug_check_bounds::<NetworkRegistrySetDefaultRequest>(offset);
1382            // Delegate to tuple encoding.
1383            fidl::encoding::Encode::<NetworkRegistrySetDefaultRequest, D>::encode(
1384                (
1385                    <fidl_fuchsia_posix_socket_common::OptionalUint32 as fidl::encoding::ValueTypeMarker>::borrow(&self.network_id),
1386                ),
1387                encoder, offset, _depth
1388            )
1389        }
1390    }
1391    unsafe impl<
1392        D: fidl::encoding::ResourceDialect,
1393        T0: fidl::encoding::Encode<fidl_fuchsia_posix_socket_common::OptionalUint32, D>,
1394    > fidl::encoding::Encode<NetworkRegistrySetDefaultRequest, D> for (T0,)
1395    {
1396        #[inline]
1397        unsafe fn encode(
1398            self,
1399            encoder: &mut fidl::encoding::Encoder<'_, D>,
1400            offset: usize,
1401            depth: fidl::encoding::Depth,
1402        ) -> fidl::Result<()> {
1403            encoder.debug_check_bounds::<NetworkRegistrySetDefaultRequest>(offset);
1404            // Zero out padding regions. There's no need to apply masks
1405            // because the unmasked parts will be overwritten by fields.
1406            // Write the fields.
1407            self.0.encode(encoder, offset + 0, depth)?;
1408            Ok(())
1409        }
1410    }
1411
1412    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1413        for NetworkRegistrySetDefaultRequest
1414    {
1415        #[inline(always)]
1416        fn new_empty() -> Self {
1417            Self {
1418                network_id: fidl::new_empty!(fidl_fuchsia_posix_socket_common::OptionalUint32, D),
1419            }
1420        }
1421
1422        #[inline]
1423        unsafe fn decode(
1424            &mut self,
1425            decoder: &mut fidl::encoding::Decoder<'_, D>,
1426            offset: usize,
1427            _depth: fidl::encoding::Depth,
1428        ) -> fidl::Result<()> {
1429            decoder.debug_check_bounds::<Self>(offset);
1430            // Verify that padding bytes are zero.
1431            fidl::decode!(
1432                fidl_fuchsia_posix_socket_common::OptionalUint32,
1433                D,
1434                &mut self.network_id,
1435                decoder,
1436                offset + 0,
1437                _depth
1438            )?;
1439            Ok(())
1440        }
1441    }
1442
1443    impl fidl::encoding::ValueTypeMarker for NetworkRegistryUpdateRequest {
1444        type Borrowed<'a> = &'a Self;
1445        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1446            value
1447        }
1448    }
1449
1450    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryUpdateRequest {
1451        type Owned = Self;
1452
1453        #[inline(always)]
1454        fn inline_align(_context: fidl::encoding::Context) -> usize {
1455            8
1456        }
1457
1458        #[inline(always)]
1459        fn inline_size(_context: fidl::encoding::Context) -> usize {
1460            16
1461        }
1462    }
1463
1464    unsafe impl<D: fidl::encoding::ResourceDialect>
1465        fidl::encoding::Encode<NetworkRegistryUpdateRequest, D> for &NetworkRegistryUpdateRequest
1466    {
1467        #[inline]
1468        unsafe fn encode(
1469            self,
1470            encoder: &mut fidl::encoding::Encoder<'_, D>,
1471            offset: usize,
1472            _depth: fidl::encoding::Depth,
1473        ) -> fidl::Result<()> {
1474            encoder.debug_check_bounds::<NetworkRegistryUpdateRequest>(offset);
1475            // Delegate to tuple encoding.
1476            fidl::encoding::Encode::<NetworkRegistryUpdateRequest, D>::encode(
1477                (<Network as fidl::encoding::ValueTypeMarker>::borrow(&self.network),),
1478                encoder,
1479                offset,
1480                _depth,
1481            )
1482        }
1483    }
1484    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Network, D>>
1485        fidl::encoding::Encode<NetworkRegistryUpdateRequest, D> for (T0,)
1486    {
1487        #[inline]
1488        unsafe fn encode(
1489            self,
1490            encoder: &mut fidl::encoding::Encoder<'_, D>,
1491            offset: usize,
1492            depth: fidl::encoding::Depth,
1493        ) -> fidl::Result<()> {
1494            encoder.debug_check_bounds::<NetworkRegistryUpdateRequest>(offset);
1495            // Zero out padding regions. There's no need to apply masks
1496            // because the unmasked parts will be overwritten by fields.
1497            // Write the fields.
1498            self.0.encode(encoder, offset + 0, depth)?;
1499            Ok(())
1500        }
1501    }
1502
1503    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1504        for NetworkRegistryUpdateRequest
1505    {
1506        #[inline(always)]
1507        fn new_empty() -> Self {
1508            Self { network: fidl::new_empty!(Network, D) }
1509        }
1510
1511        #[inline]
1512        unsafe fn decode(
1513            &mut self,
1514            decoder: &mut fidl::encoding::Decoder<'_, D>,
1515            offset: usize,
1516            _depth: fidl::encoding::Depth,
1517        ) -> fidl::Result<()> {
1518            decoder.debug_check_bounds::<Self>(offset);
1519            // Verify that padding bytes are zero.
1520            fidl::decode!(Network, D, &mut self.network, decoder, offset + 0, _depth)?;
1521            Ok(())
1522        }
1523    }
1524
1525    impl FuchsiaNetworkInfo {
1526        #[inline(always)]
1527        fn max_ordinal_present(&self) -> u64 {
1528            0
1529        }
1530    }
1531
1532    impl fidl::encoding::ValueTypeMarker for FuchsiaNetworkInfo {
1533        type Borrowed<'a> = &'a Self;
1534        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1535            value
1536        }
1537    }
1538
1539    unsafe impl fidl::encoding::TypeMarker for FuchsiaNetworkInfo {
1540        type Owned = Self;
1541
1542        #[inline(always)]
1543        fn inline_align(_context: fidl::encoding::Context) -> usize {
1544            8
1545        }
1546
1547        #[inline(always)]
1548        fn inline_size(_context: fidl::encoding::Context) -> usize {
1549            16
1550        }
1551    }
1552
1553    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FuchsiaNetworkInfo, D>
1554        for &FuchsiaNetworkInfo
1555    {
1556        unsafe fn encode(
1557            self,
1558            encoder: &mut fidl::encoding::Encoder<'_, D>,
1559            offset: usize,
1560            mut depth: fidl::encoding::Depth,
1561        ) -> fidl::Result<()> {
1562            encoder.debug_check_bounds::<FuchsiaNetworkInfo>(offset);
1563            // Vector header
1564            let max_ordinal: u64 = self.max_ordinal_present();
1565            encoder.write_num(max_ordinal, offset);
1566            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1567            // Calling encoder.out_of_line_offset(0) is not allowed.
1568            if max_ordinal == 0 {
1569                return Ok(());
1570            }
1571            depth.increment()?;
1572            let envelope_size = 8;
1573            let bytes_len = max_ordinal as usize * envelope_size;
1574            #[allow(unused_variables)]
1575            let offset = encoder.out_of_line_offset(bytes_len);
1576            let mut _prev_end_offset: usize = 0;
1577
1578            Ok(())
1579        }
1580    }
1581
1582    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FuchsiaNetworkInfo {
1583        #[inline(always)]
1584        fn new_empty() -> Self {
1585            Self::default()
1586        }
1587
1588        unsafe fn decode(
1589            &mut self,
1590            decoder: &mut fidl::encoding::Decoder<'_, D>,
1591            offset: usize,
1592            mut depth: fidl::encoding::Depth,
1593        ) -> fidl::Result<()> {
1594            decoder.debug_check_bounds::<Self>(offset);
1595            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1596                None => return Err(fidl::Error::NotNullable),
1597                Some(len) => len,
1598            };
1599            // Calling decoder.out_of_line_offset(0) is not allowed.
1600            if len == 0 {
1601                return Ok(());
1602            };
1603            depth.increment()?;
1604            let envelope_size = 8;
1605            let bytes_len = len * envelope_size;
1606            let offset = decoder.out_of_line_offset(bytes_len)?;
1607            // Decode the envelope for each type.
1608            let mut _next_ordinal_to_read = 0;
1609            let mut next_offset = offset;
1610            let end_offset = offset + bytes_len;
1611
1612            // Decode the remaining unknown envelopes.
1613            while next_offset < end_offset {
1614                _next_ordinal_to_read += 1;
1615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1616                next_offset += envelope_size;
1617            }
1618
1619            Ok(())
1620        }
1621    }
1622
1623    impl Network {
1624        #[inline(always)]
1625        fn max_ordinal_present(&self) -> u64 {
1626            if let Some(_) = self.has_default_route {
1627                return 9;
1628            }
1629            if let Some(_) = self.has_address {
1630                return 8;
1631            }
1632            if let Some(_) = self.name {
1633                return 7;
1634            }
1635            if let Some(_) = self.connectivity {
1636                return 6;
1637            }
1638            if let Some(_) = self.capabilities {
1639                return 5;
1640            }
1641            if let Some(_) = self.network_type {
1642                return 4;
1643            }
1644            if let Some(_) = self.dns_servers {
1645                return 3;
1646            }
1647            if let Some(_) = self.info {
1648                return 2;
1649            }
1650            if let Some(_) = self.network_id {
1651                return 1;
1652            }
1653            0
1654        }
1655    }
1656
1657    impl fidl::encoding::ValueTypeMarker for Network {
1658        type Borrowed<'a> = &'a Self;
1659        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1660            value
1661        }
1662    }
1663
1664    unsafe impl fidl::encoding::TypeMarker for Network {
1665        type Owned = Self;
1666
1667        #[inline(always)]
1668        fn inline_align(_context: fidl::encoding::Context) -> usize {
1669            8
1670        }
1671
1672        #[inline(always)]
1673        fn inline_size(_context: fidl::encoding::Context) -> usize {
1674            16
1675        }
1676    }
1677
1678    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Network, D> for &Network {
1679        unsafe fn encode(
1680            self,
1681            encoder: &mut fidl::encoding::Encoder<'_, D>,
1682            offset: usize,
1683            mut depth: fidl::encoding::Depth,
1684        ) -> fidl::Result<()> {
1685            encoder.debug_check_bounds::<Network>(offset);
1686            // Vector header
1687            let max_ordinal: u64 = self.max_ordinal_present();
1688            encoder.write_num(max_ordinal, offset);
1689            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1690            // Calling encoder.out_of_line_offset(0) is not allowed.
1691            if max_ordinal == 0 {
1692                return Ok(());
1693            }
1694            depth.increment()?;
1695            let envelope_size = 8;
1696            let bytes_len = max_ordinal as usize * envelope_size;
1697            #[allow(unused_variables)]
1698            let offset = encoder.out_of_line_offset(bytes_len);
1699            let mut _prev_end_offset: usize = 0;
1700            if 1 > max_ordinal {
1701                return Ok(());
1702            }
1703
1704            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1705            // are envelope_size bytes.
1706            let cur_offset: usize = (1 - 1) * envelope_size;
1707
1708            // Zero reserved fields.
1709            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1710
1711            // Safety:
1712            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1713            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1714            //   envelope_size bytes, there is always sufficient room.
1715            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1716                self.network_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1717                encoder,
1718                offset + cur_offset,
1719                depth,
1720            )?;
1721
1722            _prev_end_offset = cur_offset + envelope_size;
1723            if 2 > max_ordinal {
1724                return Ok(());
1725            }
1726
1727            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1728            // are envelope_size bytes.
1729            let cur_offset: usize = (2 - 1) * envelope_size;
1730
1731            // Zero reserved fields.
1732            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1733
1734            // Safety:
1735            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1736            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1737            //   envelope_size bytes, there is always sufficient room.
1738            fidl::encoding::encode_in_envelope_optional::<NetworkInfo, D>(
1739                self.info.as_ref().map(<NetworkInfo as fidl::encoding::ValueTypeMarker>::borrow),
1740                encoder,
1741                offset + cur_offset,
1742                depth,
1743            )?;
1744
1745            _prev_end_offset = cur_offset + envelope_size;
1746            if 3 > max_ordinal {
1747                return Ok(());
1748            }
1749
1750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1751            // are envelope_size bytes.
1752            let cur_offset: usize = (3 - 1) * envelope_size;
1753
1754            // Zero reserved fields.
1755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1756
1757            // Safety:
1758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1760            //   envelope_size bytes, there is always sufficient room.
1761            fidl::encoding::encode_in_envelope_optional::<NetworkDnsServers, D>(
1762                self.dns_servers
1763                    .as_ref()
1764                    .map(<NetworkDnsServers as fidl::encoding::ValueTypeMarker>::borrow),
1765                encoder,
1766                offset + cur_offset,
1767                depth,
1768            )?;
1769
1770            _prev_end_offset = cur_offset + envelope_size;
1771            if 4 > max_ordinal {
1772                return Ok(());
1773            }
1774
1775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1776            // are envelope_size bytes.
1777            let cur_offset: usize = (4 - 1) * envelope_size;
1778
1779            // Zero reserved fields.
1780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1781
1782            // Safety:
1783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1785            //   envelope_size bytes, there is always sufficient room.
1786            fidl::encoding::encode_in_envelope_optional::<NetworkType, D>(
1787                self.network_type
1788                    .as_ref()
1789                    .map(<NetworkType as fidl::encoding::ValueTypeMarker>::borrow),
1790                encoder,
1791                offset + cur_offset,
1792                depth,
1793            )?;
1794
1795            _prev_end_offset = cur_offset + envelope_size;
1796            if 5 > max_ordinal {
1797                return Ok(());
1798            }
1799
1800            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1801            // are envelope_size bytes.
1802            let cur_offset: usize = (5 - 1) * envelope_size;
1803
1804            // Zero reserved fields.
1805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1806
1807            // Safety:
1808            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1809            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1810            //   envelope_size bytes, there is always sufficient room.
1811            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<NetworkCapability>, D>(
1812            self.capabilities.as_ref().map(<fidl::encoding::UnboundedVector<NetworkCapability> as fidl::encoding::ValueTypeMarker>::borrow),
1813            encoder, offset + cur_offset, depth
1814        )?;
1815
1816            _prev_end_offset = cur_offset + envelope_size;
1817            if 6 > max_ordinal {
1818                return Ok(());
1819            }
1820
1821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1822            // are envelope_size bytes.
1823            let cur_offset: usize = (6 - 1) * envelope_size;
1824
1825            // Zero reserved fields.
1826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1827
1828            // Safety:
1829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1831            //   envelope_size bytes, there is always sufficient room.
1832            fidl::encoding::encode_in_envelope_optional::<ConnectivityState, D>(
1833                self.connectivity
1834                    .as_ref()
1835                    .map(<ConnectivityState as fidl::encoding::ValueTypeMarker>::borrow),
1836                encoder,
1837                offset + cur_offset,
1838                depth,
1839            )?;
1840
1841            _prev_end_offset = cur_offset + envelope_size;
1842            if 7 > max_ordinal {
1843                return Ok(());
1844            }
1845
1846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1847            // are envelope_size bytes.
1848            let cur_offset: usize = (7 - 1) * envelope_size;
1849
1850            // Zero reserved fields.
1851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1852
1853            // Safety:
1854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1856            //   envelope_size bytes, there is always sufficient room.
1857            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<15>, D>(
1858                self.name.as_ref().map(
1859                    <fidl::encoding::BoundedString<15> as fidl::encoding::ValueTypeMarker>::borrow,
1860                ),
1861                encoder,
1862                offset + cur_offset,
1863                depth,
1864            )?;
1865
1866            _prev_end_offset = cur_offset + envelope_size;
1867            if 8 > max_ordinal {
1868                return Ok(());
1869            }
1870
1871            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1872            // are envelope_size bytes.
1873            let cur_offset: usize = (8 - 1) * envelope_size;
1874
1875            // Zero reserved fields.
1876            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1877
1878            // Safety:
1879            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1880            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1881            //   envelope_size bytes, there is always sufficient room.
1882            fidl::encoding::encode_in_envelope_optional::<ProtoProperties, D>(
1883                self.has_address
1884                    .as_ref()
1885                    .map(<ProtoProperties as fidl::encoding::ValueTypeMarker>::borrow),
1886                encoder,
1887                offset + cur_offset,
1888                depth,
1889            )?;
1890
1891            _prev_end_offset = cur_offset + envelope_size;
1892            if 9 > max_ordinal {
1893                return Ok(());
1894            }
1895
1896            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1897            // are envelope_size bytes.
1898            let cur_offset: usize = (9 - 1) * envelope_size;
1899
1900            // Zero reserved fields.
1901            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1902
1903            // Safety:
1904            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1905            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1906            //   envelope_size bytes, there is always sufficient room.
1907            fidl::encoding::encode_in_envelope_optional::<ProtoProperties, D>(
1908                self.has_default_route
1909                    .as_ref()
1910                    .map(<ProtoProperties as fidl::encoding::ValueTypeMarker>::borrow),
1911                encoder,
1912                offset + cur_offset,
1913                depth,
1914            )?;
1915
1916            _prev_end_offset = cur_offset + envelope_size;
1917
1918            Ok(())
1919        }
1920    }
1921
1922    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Network {
1923        #[inline(always)]
1924        fn new_empty() -> Self {
1925            Self::default()
1926        }
1927
1928        unsafe fn decode(
1929            &mut self,
1930            decoder: &mut fidl::encoding::Decoder<'_, D>,
1931            offset: usize,
1932            mut depth: fidl::encoding::Depth,
1933        ) -> fidl::Result<()> {
1934            decoder.debug_check_bounds::<Self>(offset);
1935            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1936                None => return Err(fidl::Error::NotNullable),
1937                Some(len) => len,
1938            };
1939            // Calling decoder.out_of_line_offset(0) is not allowed.
1940            if len == 0 {
1941                return Ok(());
1942            };
1943            depth.increment()?;
1944            let envelope_size = 8;
1945            let bytes_len = len * envelope_size;
1946            let offset = decoder.out_of_line_offset(bytes_len)?;
1947            // Decode the envelope for each type.
1948            let mut _next_ordinal_to_read = 0;
1949            let mut next_offset = offset;
1950            let end_offset = offset + bytes_len;
1951            _next_ordinal_to_read += 1;
1952            if next_offset >= end_offset {
1953                return Ok(());
1954            }
1955
1956            // Decode unknown envelopes for gaps in ordinals.
1957            while _next_ordinal_to_read < 1 {
1958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1959                _next_ordinal_to_read += 1;
1960                next_offset += envelope_size;
1961            }
1962
1963            let next_out_of_line = decoder.next_out_of_line();
1964            let handles_before = decoder.remaining_handles();
1965            if let Some((inlined, num_bytes, num_handles)) =
1966                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1967            {
1968                let member_inline_size =
1969                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1970                if inlined != (member_inline_size <= 4) {
1971                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1972                }
1973                let inner_offset;
1974                let mut inner_depth = depth.clone();
1975                if inlined {
1976                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1977                    inner_offset = next_offset;
1978                } else {
1979                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1980                    inner_depth.increment()?;
1981                }
1982                let val_ref = self.network_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1983                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1985                {
1986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1987                }
1988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1990                }
1991            }
1992
1993            next_offset += envelope_size;
1994            _next_ordinal_to_read += 1;
1995            if next_offset >= end_offset {
1996                return Ok(());
1997            }
1998
1999            // Decode unknown envelopes for gaps in ordinals.
2000            while _next_ordinal_to_read < 2 {
2001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2002                _next_ordinal_to_read += 1;
2003                next_offset += envelope_size;
2004            }
2005
2006            let next_out_of_line = decoder.next_out_of_line();
2007            let handles_before = decoder.remaining_handles();
2008            if let Some((inlined, num_bytes, num_handles)) =
2009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2010            {
2011                let member_inline_size =
2012                    <NetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2013                if inlined != (member_inline_size <= 4) {
2014                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2015                }
2016                let inner_offset;
2017                let mut inner_depth = depth.clone();
2018                if inlined {
2019                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2020                    inner_offset = next_offset;
2021                } else {
2022                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2023                    inner_depth.increment()?;
2024                }
2025                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(NetworkInfo, D));
2026                fidl::decode!(NetworkInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2028                {
2029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2030                }
2031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2033                }
2034            }
2035
2036            next_offset += envelope_size;
2037            _next_ordinal_to_read += 1;
2038            if next_offset >= end_offset {
2039                return Ok(());
2040            }
2041
2042            // Decode unknown envelopes for gaps in ordinals.
2043            while _next_ordinal_to_read < 3 {
2044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2045                _next_ordinal_to_read += 1;
2046                next_offset += envelope_size;
2047            }
2048
2049            let next_out_of_line = decoder.next_out_of_line();
2050            let handles_before = decoder.remaining_handles();
2051            if let Some((inlined, num_bytes, num_handles)) =
2052                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2053            {
2054                let member_inline_size =
2055                    <NetworkDnsServers as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2056                if inlined != (member_inline_size <= 4) {
2057                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2058                }
2059                let inner_offset;
2060                let mut inner_depth = depth.clone();
2061                if inlined {
2062                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2063                    inner_offset = next_offset;
2064                } else {
2065                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2066                    inner_depth.increment()?;
2067                }
2068                let val_ref =
2069                    self.dns_servers.get_or_insert_with(|| fidl::new_empty!(NetworkDnsServers, D));
2070                fidl::decode!(NetworkDnsServers, D, val_ref, decoder, inner_offset, inner_depth)?;
2071                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2072                {
2073                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2074                }
2075                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2076                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2077                }
2078            }
2079
2080            next_offset += envelope_size;
2081            _next_ordinal_to_read += 1;
2082            if next_offset >= end_offset {
2083                return Ok(());
2084            }
2085
2086            // Decode unknown envelopes for gaps in ordinals.
2087            while _next_ordinal_to_read < 4 {
2088                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2089                _next_ordinal_to_read += 1;
2090                next_offset += envelope_size;
2091            }
2092
2093            let next_out_of_line = decoder.next_out_of_line();
2094            let handles_before = decoder.remaining_handles();
2095            if let Some((inlined, num_bytes, num_handles)) =
2096                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2097            {
2098                let member_inline_size =
2099                    <NetworkType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2100                if inlined != (member_inline_size <= 4) {
2101                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2102                }
2103                let inner_offset;
2104                let mut inner_depth = depth.clone();
2105                if inlined {
2106                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2107                    inner_offset = next_offset;
2108                } else {
2109                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2110                    inner_depth.increment()?;
2111                }
2112                let val_ref =
2113                    self.network_type.get_or_insert_with(|| fidl::new_empty!(NetworkType, D));
2114                fidl::decode!(NetworkType, D, val_ref, decoder, inner_offset, inner_depth)?;
2115                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2116                {
2117                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2118                }
2119                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2120                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2121                }
2122            }
2123
2124            next_offset += envelope_size;
2125            _next_ordinal_to_read += 1;
2126            if next_offset >= end_offset {
2127                return Ok(());
2128            }
2129
2130            // Decode unknown envelopes for gaps in ordinals.
2131            while _next_ordinal_to_read < 5 {
2132                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2133                _next_ordinal_to_read += 1;
2134                next_offset += envelope_size;
2135            }
2136
2137            let next_out_of_line = decoder.next_out_of_line();
2138            let handles_before = decoder.remaining_handles();
2139            if let Some((inlined, num_bytes, num_handles)) =
2140                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2141            {
2142                let member_inline_size = <fidl::encoding::UnboundedVector<NetworkCapability> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2143                if inlined != (member_inline_size <= 4) {
2144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2145                }
2146                let inner_offset;
2147                let mut inner_depth = depth.clone();
2148                if inlined {
2149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2150                    inner_offset = next_offset;
2151                } else {
2152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2153                    inner_depth.increment()?;
2154                }
2155                let val_ref = self.capabilities.get_or_insert_with(|| {
2156                    fidl::new_empty!(fidl::encoding::UnboundedVector<NetworkCapability>, D)
2157                });
2158                fidl::decode!(
2159                    fidl::encoding::UnboundedVector<NetworkCapability>,
2160                    D,
2161                    val_ref,
2162                    decoder,
2163                    inner_offset,
2164                    inner_depth
2165                )?;
2166                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2167                {
2168                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2169                }
2170                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2171                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2172                }
2173            }
2174
2175            next_offset += envelope_size;
2176            _next_ordinal_to_read += 1;
2177            if next_offset >= end_offset {
2178                return Ok(());
2179            }
2180
2181            // Decode unknown envelopes for gaps in ordinals.
2182            while _next_ordinal_to_read < 6 {
2183                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2184                _next_ordinal_to_read += 1;
2185                next_offset += envelope_size;
2186            }
2187
2188            let next_out_of_line = decoder.next_out_of_line();
2189            let handles_before = decoder.remaining_handles();
2190            if let Some((inlined, num_bytes, num_handles)) =
2191                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2192            {
2193                let member_inline_size =
2194                    <ConnectivityState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2195                if inlined != (member_inline_size <= 4) {
2196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2197                }
2198                let inner_offset;
2199                let mut inner_depth = depth.clone();
2200                if inlined {
2201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2202                    inner_offset = next_offset;
2203                } else {
2204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2205                    inner_depth.increment()?;
2206                }
2207                let val_ref =
2208                    self.connectivity.get_or_insert_with(|| fidl::new_empty!(ConnectivityState, D));
2209                fidl::decode!(ConnectivityState, D, val_ref, decoder, inner_offset, inner_depth)?;
2210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2211                {
2212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2213                }
2214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2216                }
2217            }
2218
2219            next_offset += envelope_size;
2220            _next_ordinal_to_read += 1;
2221            if next_offset >= end_offset {
2222                return Ok(());
2223            }
2224
2225            // Decode unknown envelopes for gaps in ordinals.
2226            while _next_ordinal_to_read < 7 {
2227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2228                _next_ordinal_to_read += 1;
2229                next_offset += envelope_size;
2230            }
2231
2232            let next_out_of_line = decoder.next_out_of_line();
2233            let handles_before = decoder.remaining_handles();
2234            if let Some((inlined, num_bytes, num_handles)) =
2235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2236            {
2237                let member_inline_size =
2238                    <fidl::encoding::BoundedString<15> as fidl::encoding::TypeMarker>::inline_size(
2239                        decoder.context,
2240                    );
2241                if inlined != (member_inline_size <= 4) {
2242                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2243                }
2244                let inner_offset;
2245                let mut inner_depth = depth.clone();
2246                if inlined {
2247                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2248                    inner_offset = next_offset;
2249                } else {
2250                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2251                    inner_depth.increment()?;
2252                }
2253                let val_ref = self
2254                    .name
2255                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<15>, D));
2256                fidl::decode!(
2257                    fidl::encoding::BoundedString<15>,
2258                    D,
2259                    val_ref,
2260                    decoder,
2261                    inner_offset,
2262                    inner_depth
2263                )?;
2264                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2265                {
2266                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2267                }
2268                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2269                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2270                }
2271            }
2272
2273            next_offset += envelope_size;
2274            _next_ordinal_to_read += 1;
2275            if next_offset >= end_offset {
2276                return Ok(());
2277            }
2278
2279            // Decode unknown envelopes for gaps in ordinals.
2280            while _next_ordinal_to_read < 8 {
2281                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2282                _next_ordinal_to_read += 1;
2283                next_offset += envelope_size;
2284            }
2285
2286            let next_out_of_line = decoder.next_out_of_line();
2287            let handles_before = decoder.remaining_handles();
2288            if let Some((inlined, num_bytes, num_handles)) =
2289                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2290            {
2291                let member_inline_size =
2292                    <ProtoProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2293                if inlined != (member_inline_size <= 4) {
2294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2295                }
2296                let inner_offset;
2297                let mut inner_depth = depth.clone();
2298                if inlined {
2299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2300                    inner_offset = next_offset;
2301                } else {
2302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2303                    inner_depth.increment()?;
2304                }
2305                let val_ref =
2306                    self.has_address.get_or_insert_with(|| fidl::new_empty!(ProtoProperties, D));
2307                fidl::decode!(ProtoProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
2308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2309                {
2310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2311                }
2312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2314                }
2315            }
2316
2317            next_offset += envelope_size;
2318            _next_ordinal_to_read += 1;
2319            if next_offset >= end_offset {
2320                return Ok(());
2321            }
2322
2323            // Decode unknown envelopes for gaps in ordinals.
2324            while _next_ordinal_to_read < 9 {
2325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2326                _next_ordinal_to_read += 1;
2327                next_offset += envelope_size;
2328            }
2329
2330            let next_out_of_line = decoder.next_out_of_line();
2331            let handles_before = decoder.remaining_handles();
2332            if let Some((inlined, num_bytes, num_handles)) =
2333                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2334            {
2335                let member_inline_size =
2336                    <ProtoProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2337                if inlined != (member_inline_size <= 4) {
2338                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2339                }
2340                let inner_offset;
2341                let mut inner_depth = depth.clone();
2342                if inlined {
2343                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2344                    inner_offset = next_offset;
2345                } else {
2346                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2347                    inner_depth.increment()?;
2348                }
2349                let val_ref = self
2350                    .has_default_route
2351                    .get_or_insert_with(|| fidl::new_empty!(ProtoProperties, D));
2352                fidl::decode!(ProtoProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
2353                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2354                {
2355                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2356                }
2357                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2358                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2359                }
2360            }
2361
2362            next_offset += envelope_size;
2363
2364            // Decode the remaining unknown envelopes.
2365            while next_offset < end_offset {
2366                _next_ordinal_to_read += 1;
2367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2368                next_offset += envelope_size;
2369            }
2370
2371            Ok(())
2372        }
2373    }
2374
2375    impl NetworkDnsServers {
2376        #[inline(always)]
2377        fn max_ordinal_present(&self) -> u64 {
2378            if let Some(_) = self.v6 {
2379                return 2;
2380            }
2381            if let Some(_) = self.v4 {
2382                return 1;
2383            }
2384            0
2385        }
2386    }
2387
2388    impl fidl::encoding::ValueTypeMarker for NetworkDnsServers {
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 NetworkDnsServers {
2396        type Owned = Self;
2397
2398        #[inline(always)]
2399        fn inline_align(_context: fidl::encoding::Context) -> usize {
2400            8
2401        }
2402
2403        #[inline(always)]
2404        fn inline_size(_context: fidl::encoding::Context) -> usize {
2405            16
2406        }
2407    }
2408
2409    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkDnsServers, D>
2410        for &NetworkDnsServers
2411    {
2412        unsafe fn encode(
2413            self,
2414            encoder: &mut fidl::encoding::Encoder<'_, D>,
2415            offset: usize,
2416            mut depth: fidl::encoding::Depth,
2417        ) -> fidl::Result<()> {
2418            encoder.debug_check_bounds::<NetworkDnsServers>(offset);
2419            // Vector header
2420            let max_ordinal: u64 = self.max_ordinal_present();
2421            encoder.write_num(max_ordinal, offset);
2422            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2423            // Calling encoder.out_of_line_offset(0) is not allowed.
2424            if max_ordinal == 0 {
2425                return Ok(());
2426            }
2427            depth.increment()?;
2428            let envelope_size = 8;
2429            let bytes_len = max_ordinal as usize * envelope_size;
2430            #[allow(unused_variables)]
2431            let offset = encoder.out_of_line_offset(bytes_len);
2432            let mut _prev_end_offset: usize = 0;
2433            if 1 > max_ordinal {
2434                return Ok(());
2435            }
2436
2437            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2438            // are envelope_size bytes.
2439            let cur_offset: usize = (1 - 1) * envelope_size;
2440
2441            // Zero reserved fields.
2442            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2443
2444            // Safety:
2445            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2446            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2447            //   envelope_size bytes, there is always sufficient room.
2448            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>, D>(
2449            self.v4.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address> as fidl::encoding::ValueTypeMarker>::borrow),
2450            encoder, offset + cur_offset, depth
2451        )?;
2452
2453            _prev_end_offset = cur_offset + envelope_size;
2454            if 2 > max_ordinal {
2455                return Ok(());
2456            }
2457
2458            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2459            // are envelope_size bytes.
2460            let cur_offset: usize = (2 - 1) * envelope_size;
2461
2462            // Zero reserved fields.
2463            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2464
2465            // Safety:
2466            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2467            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2468            //   envelope_size bytes, there is always sufficient room.
2469            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>, D>(
2470            self.v6.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address> as fidl::encoding::ValueTypeMarker>::borrow),
2471            encoder, offset + cur_offset, depth
2472        )?;
2473
2474            _prev_end_offset = cur_offset + envelope_size;
2475
2476            Ok(())
2477        }
2478    }
2479
2480    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkDnsServers {
2481        #[inline(always)]
2482        fn new_empty() -> Self {
2483            Self::default()
2484        }
2485
2486        unsafe fn decode(
2487            &mut self,
2488            decoder: &mut fidl::encoding::Decoder<'_, D>,
2489            offset: usize,
2490            mut depth: fidl::encoding::Depth,
2491        ) -> fidl::Result<()> {
2492            decoder.debug_check_bounds::<Self>(offset);
2493            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2494                None => return Err(fidl::Error::NotNullable),
2495                Some(len) => len,
2496            };
2497            // Calling decoder.out_of_line_offset(0) is not allowed.
2498            if len == 0 {
2499                return Ok(());
2500            };
2501            depth.increment()?;
2502            let envelope_size = 8;
2503            let bytes_len = len * envelope_size;
2504            let offset = decoder.out_of_line_offset(bytes_len)?;
2505            // Decode the envelope for each type.
2506            let mut _next_ordinal_to_read = 0;
2507            let mut next_offset = offset;
2508            let end_offset = offset + bytes_len;
2509            _next_ordinal_to_read += 1;
2510            if next_offset >= end_offset {
2511                return Ok(());
2512            }
2513
2514            // Decode unknown envelopes for gaps in ordinals.
2515            while _next_ordinal_to_read < 1 {
2516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2517                _next_ordinal_to_read += 1;
2518                next_offset += envelope_size;
2519            }
2520
2521            let next_out_of_line = decoder.next_out_of_line();
2522            let handles_before = decoder.remaining_handles();
2523            if let Some((inlined, num_bytes, num_handles)) =
2524                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2525            {
2526                let member_inline_size = <fidl::encoding::UnboundedVector<
2527                    fidl_fuchsia_net_common::Ipv4Address,
2528                > as fidl::encoding::TypeMarker>::inline_size(
2529                    decoder.context
2530                );
2531                if inlined != (member_inline_size <= 4) {
2532                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2533                }
2534                let inner_offset;
2535                let mut inner_depth = depth.clone();
2536                if inlined {
2537                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2538                    inner_offset = next_offset;
2539                } else {
2540                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2541                    inner_depth.increment()?;
2542                }
2543                let val_ref = self.v4.get_or_insert_with(|| {
2544                    fidl::new_empty!(
2545                        fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>,
2546                        D
2547                    )
2548                });
2549                fidl::decode!(
2550                    fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>,
2551                    D,
2552                    val_ref,
2553                    decoder,
2554                    inner_offset,
2555                    inner_depth
2556                )?;
2557                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2558                {
2559                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2560                }
2561                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2562                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2563                }
2564            }
2565
2566            next_offset += envelope_size;
2567            _next_ordinal_to_read += 1;
2568            if next_offset >= end_offset {
2569                return Ok(());
2570            }
2571
2572            // Decode unknown envelopes for gaps in ordinals.
2573            while _next_ordinal_to_read < 2 {
2574                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2575                _next_ordinal_to_read += 1;
2576                next_offset += envelope_size;
2577            }
2578
2579            let next_out_of_line = decoder.next_out_of_line();
2580            let handles_before = decoder.remaining_handles();
2581            if let Some((inlined, num_bytes, num_handles)) =
2582                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2583            {
2584                let member_inline_size = <fidl::encoding::UnboundedVector<
2585                    fidl_fuchsia_net_common::Ipv6Address,
2586                > as fidl::encoding::TypeMarker>::inline_size(
2587                    decoder.context
2588                );
2589                if inlined != (member_inline_size <= 4) {
2590                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2591                }
2592                let inner_offset;
2593                let mut inner_depth = depth.clone();
2594                if inlined {
2595                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2596                    inner_offset = next_offset;
2597                } else {
2598                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2599                    inner_depth.increment()?;
2600                }
2601                let val_ref = self.v6.get_or_insert_with(|| {
2602                    fidl::new_empty!(
2603                        fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>,
2604                        D
2605                    )
2606                });
2607                fidl::decode!(
2608                    fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>,
2609                    D,
2610                    val_ref,
2611                    decoder,
2612                    inner_offset,
2613                    inner_depth
2614                )?;
2615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2616                {
2617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2618                }
2619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2621                }
2622            }
2623
2624            next_offset += envelope_size;
2625
2626            // Decode the remaining unknown envelopes.
2627            while next_offset < end_offset {
2628                _next_ordinal_to_read += 1;
2629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2630                next_offset += envelope_size;
2631            }
2632
2633            Ok(())
2634        }
2635    }
2636
2637    impl StarnixNetworkInfo {
2638        #[inline(always)]
2639        fn max_ordinal_present(&self) -> u64 {
2640            if let Some(_) = self.handle {
2641                return 2;
2642            }
2643            if let Some(_) = self.mark {
2644                return 1;
2645            }
2646            0
2647        }
2648    }
2649
2650    impl fidl::encoding::ValueTypeMarker for StarnixNetworkInfo {
2651        type Borrowed<'a> = &'a Self;
2652        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2653            value
2654        }
2655    }
2656
2657    unsafe impl fidl::encoding::TypeMarker for StarnixNetworkInfo {
2658        type Owned = Self;
2659
2660        #[inline(always)]
2661        fn inline_align(_context: fidl::encoding::Context) -> usize {
2662            8
2663        }
2664
2665        #[inline(always)]
2666        fn inline_size(_context: fidl::encoding::Context) -> usize {
2667            16
2668        }
2669    }
2670
2671    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StarnixNetworkInfo, D>
2672        for &StarnixNetworkInfo
2673    {
2674        unsafe fn encode(
2675            self,
2676            encoder: &mut fidl::encoding::Encoder<'_, D>,
2677            offset: usize,
2678            mut depth: fidl::encoding::Depth,
2679        ) -> fidl::Result<()> {
2680            encoder.debug_check_bounds::<StarnixNetworkInfo>(offset);
2681            // Vector header
2682            let max_ordinal: u64 = self.max_ordinal_present();
2683            encoder.write_num(max_ordinal, offset);
2684            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2685            // Calling encoder.out_of_line_offset(0) is not allowed.
2686            if max_ordinal == 0 {
2687                return Ok(());
2688            }
2689            depth.increment()?;
2690            let envelope_size = 8;
2691            let bytes_len = max_ordinal as usize * envelope_size;
2692            #[allow(unused_variables)]
2693            let offset = encoder.out_of_line_offset(bytes_len);
2694            let mut _prev_end_offset: usize = 0;
2695            if 1 > max_ordinal {
2696                return Ok(());
2697            }
2698
2699            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2700            // are envelope_size bytes.
2701            let cur_offset: usize = (1 - 1) * envelope_size;
2702
2703            // Zero reserved fields.
2704            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2705
2706            // Safety:
2707            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2708            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2709            //   envelope_size bytes, there is always sufficient room.
2710            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2711                self.mark.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2712                encoder,
2713                offset + cur_offset,
2714                depth,
2715            )?;
2716
2717            _prev_end_offset = cur_offset + envelope_size;
2718            if 2 > max_ordinal {
2719                return Ok(());
2720            }
2721
2722            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2723            // are envelope_size bytes.
2724            let cur_offset: usize = (2 - 1) * envelope_size;
2725
2726            // Zero reserved fields.
2727            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2728
2729            // Safety:
2730            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2731            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2732            //   envelope_size bytes, there is always sufficient room.
2733            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2734                self.handle.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2735                encoder,
2736                offset + cur_offset,
2737                depth,
2738            )?;
2739
2740            _prev_end_offset = cur_offset + envelope_size;
2741
2742            Ok(())
2743        }
2744    }
2745
2746    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StarnixNetworkInfo {
2747        #[inline(always)]
2748        fn new_empty() -> Self {
2749            Self::default()
2750        }
2751
2752        unsafe fn decode(
2753            &mut self,
2754            decoder: &mut fidl::encoding::Decoder<'_, D>,
2755            offset: usize,
2756            mut depth: fidl::encoding::Depth,
2757        ) -> fidl::Result<()> {
2758            decoder.debug_check_bounds::<Self>(offset);
2759            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2760                None => return Err(fidl::Error::NotNullable),
2761                Some(len) => len,
2762            };
2763            // Calling decoder.out_of_line_offset(0) is not allowed.
2764            if len == 0 {
2765                return Ok(());
2766            };
2767            depth.increment()?;
2768            let envelope_size = 8;
2769            let bytes_len = len * envelope_size;
2770            let offset = decoder.out_of_line_offset(bytes_len)?;
2771            // Decode the envelope for each type.
2772            let mut _next_ordinal_to_read = 0;
2773            let mut next_offset = offset;
2774            let end_offset = offset + bytes_len;
2775            _next_ordinal_to_read += 1;
2776            if next_offset >= end_offset {
2777                return Ok(());
2778            }
2779
2780            // Decode unknown envelopes for gaps in ordinals.
2781            while _next_ordinal_to_read < 1 {
2782                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2783                _next_ordinal_to_read += 1;
2784                next_offset += envelope_size;
2785            }
2786
2787            let next_out_of_line = decoder.next_out_of_line();
2788            let handles_before = decoder.remaining_handles();
2789            if let Some((inlined, num_bytes, num_handles)) =
2790                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2791            {
2792                let member_inline_size =
2793                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2794                if inlined != (member_inline_size <= 4) {
2795                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2796                }
2797                let inner_offset;
2798                let mut inner_depth = depth.clone();
2799                if inlined {
2800                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2801                    inner_offset = next_offset;
2802                } else {
2803                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2804                    inner_depth.increment()?;
2805                }
2806                let val_ref = self.mark.get_or_insert_with(|| fidl::new_empty!(u32, D));
2807                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2808                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2809                {
2810                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2811                }
2812                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2813                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2814                }
2815            }
2816
2817            next_offset += envelope_size;
2818            _next_ordinal_to_read += 1;
2819            if next_offset >= end_offset {
2820                return Ok(());
2821            }
2822
2823            // Decode unknown envelopes for gaps in ordinals.
2824            while _next_ordinal_to_read < 2 {
2825                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2826                _next_ordinal_to_read += 1;
2827                next_offset += envelope_size;
2828            }
2829
2830            let next_out_of_line = decoder.next_out_of_line();
2831            let handles_before = decoder.remaining_handles();
2832            if let Some((inlined, num_bytes, num_handles)) =
2833                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2834            {
2835                let member_inline_size =
2836                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2837                if inlined != (member_inline_size <= 4) {
2838                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2839                }
2840                let inner_offset;
2841                let mut inner_depth = depth.clone();
2842                if inlined {
2843                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2844                    inner_offset = next_offset;
2845                } else {
2846                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2847                    inner_depth.increment()?;
2848                }
2849                let val_ref = self.handle.get_or_insert_with(|| fidl::new_empty!(u64, D));
2850                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2851                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2852                {
2853                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2854                }
2855                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2856                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2857                }
2858            }
2859
2860            next_offset += envelope_size;
2861
2862            // Decode the remaining unknown envelopes.
2863            while next_offset < end_offset {
2864                _next_ordinal_to_read += 1;
2865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2866                next_offset += envelope_size;
2867            }
2868
2869            Ok(())
2870        }
2871    }
2872
2873    impl fidl::encoding::ValueTypeMarker for NetworkInfo {
2874        type Borrowed<'a> = &'a Self;
2875        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2876            value
2877        }
2878    }
2879
2880    unsafe impl fidl::encoding::TypeMarker for NetworkInfo {
2881        type Owned = Self;
2882
2883        #[inline(always)]
2884        fn inline_align(_context: fidl::encoding::Context) -> usize {
2885            8
2886        }
2887
2888        #[inline(always)]
2889        fn inline_size(_context: fidl::encoding::Context) -> usize {
2890            16
2891        }
2892    }
2893
2894    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkInfo, D>
2895        for &NetworkInfo
2896    {
2897        #[inline]
2898        unsafe fn encode(
2899            self,
2900            encoder: &mut fidl::encoding::Encoder<'_, D>,
2901            offset: usize,
2902            _depth: fidl::encoding::Depth,
2903        ) -> fidl::Result<()> {
2904            encoder.debug_check_bounds::<NetworkInfo>(offset);
2905            encoder.write_num::<u64>(self.ordinal(), offset);
2906            match self {
2907                NetworkInfo::Starnix(ref val) => {
2908                    fidl::encoding::encode_in_envelope::<StarnixNetworkInfo, D>(
2909                        <StarnixNetworkInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
2910                        encoder,
2911                        offset + 8,
2912                        _depth,
2913                    )
2914                }
2915                NetworkInfo::Fuchsia(ref val) => {
2916                    fidl::encoding::encode_in_envelope::<FuchsiaNetworkInfo, D>(
2917                        <FuchsiaNetworkInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
2918                        encoder,
2919                        offset + 8,
2920                        _depth,
2921                    )
2922                }
2923                NetworkInfo::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2924            }
2925        }
2926    }
2927
2928    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkInfo {
2929        #[inline(always)]
2930        fn new_empty() -> Self {
2931            Self::__SourceBreaking { unknown_ordinal: 0 }
2932        }
2933
2934        #[inline]
2935        unsafe fn decode(
2936            &mut self,
2937            decoder: &mut fidl::encoding::Decoder<'_, D>,
2938            offset: usize,
2939            mut depth: fidl::encoding::Depth,
2940        ) -> fidl::Result<()> {
2941            decoder.debug_check_bounds::<Self>(offset);
2942            #[allow(unused_variables)]
2943            let next_out_of_line = decoder.next_out_of_line();
2944            let handles_before = decoder.remaining_handles();
2945            let (ordinal, inlined, num_bytes, num_handles) =
2946                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2947
2948            let member_inline_size = match ordinal {
2949                1 => {
2950                    <StarnixNetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context)
2951                }
2952                2 => {
2953                    <FuchsiaNetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context)
2954                }
2955                0 => return Err(fidl::Error::UnknownUnionTag),
2956                _ => num_bytes as usize,
2957            };
2958
2959            if inlined != (member_inline_size <= 4) {
2960                return Err(fidl::Error::InvalidInlineBitInEnvelope);
2961            }
2962            let _inner_offset;
2963            if inlined {
2964                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2965                _inner_offset = offset + 8;
2966            } else {
2967                depth.increment()?;
2968                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2969            }
2970            match ordinal {
2971                1 => {
2972                    #[allow(irrefutable_let_patterns)]
2973                    if let NetworkInfo::Starnix(_) = self {
2974                        // Do nothing, read the value into the object
2975                    } else {
2976                        // Initialize `self` to the right variant
2977                        *self = NetworkInfo::Starnix(fidl::new_empty!(StarnixNetworkInfo, D));
2978                    }
2979                    #[allow(irrefutable_let_patterns)]
2980                    if let NetworkInfo::Starnix(ref mut val) = self {
2981                        fidl::decode!(StarnixNetworkInfo, D, val, decoder, _inner_offset, depth)?;
2982                    } else {
2983                        unreachable!()
2984                    }
2985                }
2986                2 => {
2987                    #[allow(irrefutable_let_patterns)]
2988                    if let NetworkInfo::Fuchsia(_) = self {
2989                        // Do nothing, read the value into the object
2990                    } else {
2991                        // Initialize `self` to the right variant
2992                        *self = NetworkInfo::Fuchsia(fidl::new_empty!(FuchsiaNetworkInfo, D));
2993                    }
2994                    #[allow(irrefutable_let_patterns)]
2995                    if let NetworkInfo::Fuchsia(ref mut val) = self {
2996                        fidl::decode!(FuchsiaNetworkInfo, D, val, decoder, _inner_offset, depth)?;
2997                    } else {
2998                        unreachable!()
2999                    }
3000                }
3001                #[allow(deprecated)]
3002                ordinal => {
3003                    for _ in 0..num_handles {
3004                        decoder.drop_next_handle()?;
3005                    }
3006                    *self = NetworkInfo::__SourceBreaking { unknown_ordinal: ordinal };
3007                }
3008            }
3009            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
3010                return Err(fidl::Error::InvalidNumBytesInEnvelope);
3011            }
3012            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3013                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3014            }
3015            Ok(())
3016        }
3017    }
3018}