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 network_registry_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
622mod internal {
623    use super::*;
624    unsafe impl fidl::encoding::TypeMarker for NetworkCapability {
625        type Owned = Self;
626
627        #[inline(always)]
628        fn inline_align(_context: fidl::encoding::Context) -> usize {
629            4
630        }
631
632        #[inline(always)]
633        fn inline_size(_context: fidl::encoding::Context) -> usize {
634            4
635        }
636    }
637
638    impl fidl::encoding::ValueTypeMarker for NetworkCapability {
639        type Borrowed<'a> = Self;
640        #[inline(always)]
641        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
642            *value
643        }
644    }
645
646    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
647        for NetworkCapability
648    {
649        #[inline]
650        unsafe fn encode(
651            self,
652            encoder: &mut fidl::encoding::Encoder<'_, D>,
653            offset: usize,
654            _depth: fidl::encoding::Depth,
655        ) -> fidl::Result<()> {
656            encoder.debug_check_bounds::<Self>(offset);
657            encoder.write_num(self.bits(), offset);
658            Ok(())
659        }
660    }
661
662    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkCapability {
663        #[inline(always)]
664        fn new_empty() -> Self {
665            Self::empty()
666        }
667
668        #[inline]
669        unsafe fn decode(
670            &mut self,
671            decoder: &mut fidl::encoding::Decoder<'_, D>,
672            offset: usize,
673            _depth: fidl::encoding::Depth,
674        ) -> fidl::Result<()> {
675            decoder.debug_check_bounds::<Self>(offset);
676            let prim = decoder.read_num::<u32>(offset);
677            *self = Self::from_bits_allow_unknown(prim);
678            Ok(())
679        }
680    }
681    unsafe impl fidl::encoding::TypeMarker for ProtoProperties {
682        type Owned = Self;
683
684        #[inline(always)]
685        fn inline_align(_context: fidl::encoding::Context) -> usize {
686            1
687        }
688
689        #[inline(always)]
690        fn inline_size(_context: fidl::encoding::Context) -> usize {
691            1
692        }
693    }
694
695    impl fidl::encoding::ValueTypeMarker for ProtoProperties {
696        type Borrowed<'a> = Self;
697        #[inline(always)]
698        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
699            *value
700        }
701    }
702
703    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
704        for ProtoProperties
705    {
706        #[inline]
707        unsafe fn encode(
708            self,
709            encoder: &mut fidl::encoding::Encoder<'_, D>,
710            offset: usize,
711            _depth: fidl::encoding::Depth,
712        ) -> fidl::Result<()> {
713            encoder.debug_check_bounds::<Self>(offset);
714            if self.bits() & Self::all().bits() != self.bits() {
715                return Err(fidl::Error::InvalidBitsValue);
716            }
717            encoder.write_num(self.bits(), offset);
718            Ok(())
719        }
720    }
721
722    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProtoProperties {
723        #[inline(always)]
724        fn new_empty() -> Self {
725            Self::empty()
726        }
727
728        #[inline]
729        unsafe fn decode(
730            &mut self,
731            decoder: &mut fidl::encoding::Decoder<'_, D>,
732            offset: usize,
733            _depth: fidl::encoding::Depth,
734        ) -> fidl::Result<()> {
735            decoder.debug_check_bounds::<Self>(offset);
736            let prim = decoder.read_num::<u8>(offset);
737            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
738            Ok(())
739        }
740    }
741    unsafe impl fidl::encoding::TypeMarker for ConnectivityState {
742        type Owned = Self;
743
744        #[inline(always)]
745        fn inline_align(_context: fidl::encoding::Context) -> usize {
746            std::mem::align_of::<u32>()
747        }
748
749        #[inline(always)]
750        fn inline_size(_context: fidl::encoding::Context) -> usize {
751            std::mem::size_of::<u32>()
752        }
753
754        #[inline(always)]
755        fn encode_is_copy() -> bool {
756            false
757        }
758
759        #[inline(always)]
760        fn decode_is_copy() -> bool {
761            false
762        }
763    }
764
765    impl fidl::encoding::ValueTypeMarker for ConnectivityState {
766        type Borrowed<'a> = Self;
767        #[inline(always)]
768        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
769            *value
770        }
771    }
772
773    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
774        for ConnectivityState
775    {
776        #[inline]
777        unsafe fn encode(
778            self,
779            encoder: &mut fidl::encoding::Encoder<'_, D>,
780            offset: usize,
781            _depth: fidl::encoding::Depth,
782        ) -> fidl::Result<()> {
783            encoder.debug_check_bounds::<Self>(offset);
784            encoder.write_num(self.into_primitive(), offset);
785            Ok(())
786        }
787    }
788
789    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectivityState {
790        #[inline(always)]
791        fn new_empty() -> Self {
792            Self::unknown()
793        }
794
795        #[inline]
796        unsafe fn decode(
797            &mut self,
798            decoder: &mut fidl::encoding::Decoder<'_, D>,
799            offset: usize,
800            _depth: fidl::encoding::Depth,
801        ) -> fidl::Result<()> {
802            decoder.debug_check_bounds::<Self>(offset);
803            let prim = decoder.read_num::<u32>(offset);
804
805            *self = Self::from_primitive_allow_unknown(prim);
806            Ok(())
807        }
808    }
809    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryAddError {
810        type Owned = Self;
811
812        #[inline(always)]
813        fn inline_align(_context: fidl::encoding::Context) -> usize {
814            std::mem::align_of::<u32>()
815        }
816
817        #[inline(always)]
818        fn inline_size(_context: fidl::encoding::Context) -> usize {
819            std::mem::size_of::<u32>()
820        }
821
822        #[inline(always)]
823        fn encode_is_copy() -> bool {
824            false
825        }
826
827        #[inline(always)]
828        fn decode_is_copy() -> bool {
829            false
830        }
831    }
832
833    impl fidl::encoding::ValueTypeMarker for NetworkRegistryAddError {
834        type Borrowed<'a> = Self;
835        #[inline(always)]
836        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
837            *value
838        }
839    }
840
841    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
842        for NetworkRegistryAddError
843    {
844        #[inline]
845        unsafe fn encode(
846            self,
847            encoder: &mut fidl::encoding::Encoder<'_, D>,
848            offset: usize,
849            _depth: fidl::encoding::Depth,
850        ) -> fidl::Result<()> {
851            encoder.debug_check_bounds::<Self>(offset);
852            encoder.write_num(self.into_primitive(), offset);
853            Ok(())
854        }
855    }
856
857    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
858        for NetworkRegistryAddError
859    {
860        #[inline(always)]
861        fn new_empty() -> Self {
862            Self::unknown()
863        }
864
865        #[inline]
866        unsafe fn decode(
867            &mut self,
868            decoder: &mut fidl::encoding::Decoder<'_, D>,
869            offset: usize,
870            _depth: fidl::encoding::Depth,
871        ) -> fidl::Result<()> {
872            decoder.debug_check_bounds::<Self>(offset);
873            let prim = decoder.read_num::<u32>(offset);
874
875            *self = Self::from_primitive_allow_unknown(prim);
876            Ok(())
877        }
878    }
879    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryRemoveError {
880        type Owned = Self;
881
882        #[inline(always)]
883        fn inline_align(_context: fidl::encoding::Context) -> usize {
884            std::mem::align_of::<u32>()
885        }
886
887        #[inline(always)]
888        fn inline_size(_context: fidl::encoding::Context) -> usize {
889            std::mem::size_of::<u32>()
890        }
891
892        #[inline(always)]
893        fn encode_is_copy() -> bool {
894            false
895        }
896
897        #[inline(always)]
898        fn decode_is_copy() -> bool {
899            false
900        }
901    }
902
903    impl fidl::encoding::ValueTypeMarker for NetworkRegistryRemoveError {
904        type Borrowed<'a> = Self;
905        #[inline(always)]
906        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
907            *value
908        }
909    }
910
911    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
912        for NetworkRegistryRemoveError
913    {
914        #[inline]
915        unsafe fn encode(
916            self,
917            encoder: &mut fidl::encoding::Encoder<'_, D>,
918            offset: usize,
919            _depth: fidl::encoding::Depth,
920        ) -> fidl::Result<()> {
921            encoder.debug_check_bounds::<Self>(offset);
922            encoder.write_num(self.into_primitive(), offset);
923            Ok(())
924        }
925    }
926
927    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
928        for NetworkRegistryRemoveError
929    {
930        #[inline(always)]
931        fn new_empty() -> Self {
932            Self::unknown()
933        }
934
935        #[inline]
936        unsafe fn decode(
937            &mut self,
938            decoder: &mut fidl::encoding::Decoder<'_, D>,
939            offset: usize,
940            _depth: fidl::encoding::Depth,
941        ) -> fidl::Result<()> {
942            decoder.debug_check_bounds::<Self>(offset);
943            let prim = decoder.read_num::<u32>(offset);
944
945            *self = Self::from_primitive_allow_unknown(prim);
946            Ok(())
947        }
948    }
949    unsafe impl fidl::encoding::TypeMarker for NetworkRegistrySetDefaultError {
950        type Owned = Self;
951
952        #[inline(always)]
953        fn inline_align(_context: fidl::encoding::Context) -> usize {
954            std::mem::align_of::<u32>()
955        }
956
957        #[inline(always)]
958        fn inline_size(_context: fidl::encoding::Context) -> usize {
959            std::mem::size_of::<u32>()
960        }
961
962        #[inline(always)]
963        fn encode_is_copy() -> bool {
964            false
965        }
966
967        #[inline(always)]
968        fn decode_is_copy() -> bool {
969            false
970        }
971    }
972
973    impl fidl::encoding::ValueTypeMarker for NetworkRegistrySetDefaultError {
974        type Borrowed<'a> = Self;
975        #[inline(always)]
976        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
977            *value
978        }
979    }
980
981    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
982        for NetworkRegistrySetDefaultError
983    {
984        #[inline]
985        unsafe fn encode(
986            self,
987            encoder: &mut fidl::encoding::Encoder<'_, D>,
988            offset: usize,
989            _depth: fidl::encoding::Depth,
990        ) -> fidl::Result<()> {
991            encoder.debug_check_bounds::<Self>(offset);
992            encoder.write_num(self.into_primitive(), offset);
993            Ok(())
994        }
995    }
996
997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
998        for NetworkRegistrySetDefaultError
999    {
1000        #[inline(always)]
1001        fn new_empty() -> Self {
1002            Self::unknown()
1003        }
1004
1005        #[inline]
1006        unsafe fn decode(
1007            &mut self,
1008            decoder: &mut fidl::encoding::Decoder<'_, D>,
1009            offset: usize,
1010            _depth: fidl::encoding::Depth,
1011        ) -> fidl::Result<()> {
1012            decoder.debug_check_bounds::<Self>(offset);
1013            let prim = decoder.read_num::<u32>(offset);
1014
1015            *self = Self::from_primitive_allow_unknown(prim);
1016            Ok(())
1017        }
1018    }
1019    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryUpdateError {
1020        type Owned = Self;
1021
1022        #[inline(always)]
1023        fn inline_align(_context: fidl::encoding::Context) -> usize {
1024            std::mem::align_of::<u32>()
1025        }
1026
1027        #[inline(always)]
1028        fn inline_size(_context: fidl::encoding::Context) -> usize {
1029            std::mem::size_of::<u32>()
1030        }
1031
1032        #[inline(always)]
1033        fn encode_is_copy() -> bool {
1034            false
1035        }
1036
1037        #[inline(always)]
1038        fn decode_is_copy() -> bool {
1039            false
1040        }
1041    }
1042
1043    impl fidl::encoding::ValueTypeMarker for NetworkRegistryUpdateError {
1044        type Borrowed<'a> = Self;
1045        #[inline(always)]
1046        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1047            *value
1048        }
1049    }
1050
1051    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1052        for NetworkRegistryUpdateError
1053    {
1054        #[inline]
1055        unsafe fn encode(
1056            self,
1057            encoder: &mut fidl::encoding::Encoder<'_, D>,
1058            offset: usize,
1059            _depth: fidl::encoding::Depth,
1060        ) -> fidl::Result<()> {
1061            encoder.debug_check_bounds::<Self>(offset);
1062            encoder.write_num(self.into_primitive(), offset);
1063            Ok(())
1064        }
1065    }
1066
1067    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1068        for NetworkRegistryUpdateError
1069    {
1070        #[inline(always)]
1071        fn new_empty() -> Self {
1072            Self::unknown()
1073        }
1074
1075        #[inline]
1076        unsafe fn decode(
1077            &mut self,
1078            decoder: &mut fidl::encoding::Decoder<'_, D>,
1079            offset: usize,
1080            _depth: fidl::encoding::Depth,
1081        ) -> fidl::Result<()> {
1082            decoder.debug_check_bounds::<Self>(offset);
1083            let prim = decoder.read_num::<u32>(offset);
1084
1085            *self = Self::from_primitive_allow_unknown(prim);
1086            Ok(())
1087        }
1088    }
1089    unsafe impl fidl::encoding::TypeMarker for NetworkType {
1090        type Owned = Self;
1091
1092        #[inline(always)]
1093        fn inline_align(_context: fidl::encoding::Context) -> usize {
1094            std::mem::align_of::<u32>()
1095        }
1096
1097        #[inline(always)]
1098        fn inline_size(_context: fidl::encoding::Context) -> usize {
1099            std::mem::size_of::<u32>()
1100        }
1101
1102        #[inline(always)]
1103        fn encode_is_copy() -> bool {
1104            false
1105        }
1106
1107        #[inline(always)]
1108        fn decode_is_copy() -> bool {
1109            false
1110        }
1111    }
1112
1113    impl fidl::encoding::ValueTypeMarker for NetworkType {
1114        type Borrowed<'a> = Self;
1115        #[inline(always)]
1116        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1117            *value
1118        }
1119    }
1120
1121    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for NetworkType {
1122        #[inline]
1123        unsafe fn encode(
1124            self,
1125            encoder: &mut fidl::encoding::Encoder<'_, D>,
1126            offset: usize,
1127            _depth: fidl::encoding::Depth,
1128        ) -> fidl::Result<()> {
1129            encoder.debug_check_bounds::<Self>(offset);
1130            encoder.write_num(self.into_primitive(), offset);
1131            Ok(())
1132        }
1133    }
1134
1135    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkType {
1136        #[inline(always)]
1137        fn new_empty() -> Self {
1138            Self::unknown()
1139        }
1140
1141        #[inline]
1142        unsafe fn decode(
1143            &mut self,
1144            decoder: &mut fidl::encoding::Decoder<'_, D>,
1145            offset: usize,
1146            _depth: fidl::encoding::Depth,
1147        ) -> fidl::Result<()> {
1148            decoder.debug_check_bounds::<Self>(offset);
1149            let prim = decoder.read_num::<u32>(offset);
1150
1151            *self = Self::from_primitive_allow_unknown(prim);
1152            Ok(())
1153        }
1154    }
1155
1156    impl fidl::encoding::ValueTypeMarker for NetworkRegistryAddRequest {
1157        type Borrowed<'a> = &'a Self;
1158        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1159            value
1160        }
1161    }
1162
1163    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryAddRequest {
1164        type Owned = Self;
1165
1166        #[inline(always)]
1167        fn inline_align(_context: fidl::encoding::Context) -> usize {
1168            8
1169        }
1170
1171        #[inline(always)]
1172        fn inline_size(_context: fidl::encoding::Context) -> usize {
1173            16
1174        }
1175    }
1176
1177    unsafe impl<D: fidl::encoding::ResourceDialect>
1178        fidl::encoding::Encode<NetworkRegistryAddRequest, D> for &NetworkRegistryAddRequest
1179    {
1180        #[inline]
1181        unsafe fn encode(
1182            self,
1183            encoder: &mut fidl::encoding::Encoder<'_, D>,
1184            offset: usize,
1185            _depth: fidl::encoding::Depth,
1186        ) -> fidl::Result<()> {
1187            encoder.debug_check_bounds::<NetworkRegistryAddRequest>(offset);
1188            // Delegate to tuple encoding.
1189            fidl::encoding::Encode::<NetworkRegistryAddRequest, D>::encode(
1190                (<Network as fidl::encoding::ValueTypeMarker>::borrow(&self.network),),
1191                encoder,
1192                offset,
1193                _depth,
1194            )
1195        }
1196    }
1197    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Network, D>>
1198        fidl::encoding::Encode<NetworkRegistryAddRequest, D> for (T0,)
1199    {
1200        #[inline]
1201        unsafe fn encode(
1202            self,
1203            encoder: &mut fidl::encoding::Encoder<'_, D>,
1204            offset: usize,
1205            depth: fidl::encoding::Depth,
1206        ) -> fidl::Result<()> {
1207            encoder.debug_check_bounds::<NetworkRegistryAddRequest>(offset);
1208            // Zero out padding regions. There's no need to apply masks
1209            // because the unmasked parts will be overwritten by fields.
1210            // Write the fields.
1211            self.0.encode(encoder, offset + 0, depth)?;
1212            Ok(())
1213        }
1214    }
1215
1216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1217        for NetworkRegistryAddRequest
1218    {
1219        #[inline(always)]
1220        fn new_empty() -> Self {
1221            Self { network: fidl::new_empty!(Network, D) }
1222        }
1223
1224        #[inline]
1225        unsafe fn decode(
1226            &mut self,
1227            decoder: &mut fidl::encoding::Decoder<'_, D>,
1228            offset: usize,
1229            _depth: fidl::encoding::Depth,
1230        ) -> fidl::Result<()> {
1231            decoder.debug_check_bounds::<Self>(offset);
1232            // Verify that padding bytes are zero.
1233            fidl::decode!(Network, D, &mut self.network, decoder, offset + 0, _depth)?;
1234            Ok(())
1235        }
1236    }
1237
1238    impl fidl::encoding::ValueTypeMarker for NetworkRegistryRemoveRequest {
1239        type Borrowed<'a> = &'a Self;
1240        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1241            value
1242        }
1243    }
1244
1245    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryRemoveRequest {
1246        type Owned = Self;
1247
1248        #[inline(always)]
1249        fn inline_align(_context: fidl::encoding::Context) -> usize {
1250            4
1251        }
1252
1253        #[inline(always)]
1254        fn inline_size(_context: fidl::encoding::Context) -> usize {
1255            4
1256        }
1257        #[inline(always)]
1258        fn encode_is_copy() -> bool {
1259            true
1260        }
1261
1262        #[inline(always)]
1263        fn decode_is_copy() -> bool {
1264            true
1265        }
1266    }
1267
1268    unsafe impl<D: fidl::encoding::ResourceDialect>
1269        fidl::encoding::Encode<NetworkRegistryRemoveRequest, D> for &NetworkRegistryRemoveRequest
1270    {
1271        #[inline]
1272        unsafe fn encode(
1273            self,
1274            encoder: &mut fidl::encoding::Encoder<'_, D>,
1275            offset: usize,
1276            _depth: fidl::encoding::Depth,
1277        ) -> fidl::Result<()> {
1278            encoder.debug_check_bounds::<NetworkRegistryRemoveRequest>(offset);
1279            unsafe {
1280                // Copy the object into the buffer.
1281                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1282                (buf_ptr as *mut NetworkRegistryRemoveRequest)
1283                    .write_unaligned((self as *const NetworkRegistryRemoveRequest).read());
1284                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1285                // done second because the memcpy will write garbage to these bytes.
1286            }
1287            Ok(())
1288        }
1289    }
1290    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1291        fidl::encoding::Encode<NetworkRegistryRemoveRequest, D> for (T0,)
1292    {
1293        #[inline]
1294        unsafe fn encode(
1295            self,
1296            encoder: &mut fidl::encoding::Encoder<'_, D>,
1297            offset: usize,
1298            depth: fidl::encoding::Depth,
1299        ) -> fidl::Result<()> {
1300            encoder.debug_check_bounds::<NetworkRegistryRemoveRequest>(offset);
1301            // Zero out padding regions. There's no need to apply masks
1302            // because the unmasked parts will be overwritten by fields.
1303            // Write the fields.
1304            self.0.encode(encoder, offset + 0, depth)?;
1305            Ok(())
1306        }
1307    }
1308
1309    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1310        for NetworkRegistryRemoveRequest
1311    {
1312        #[inline(always)]
1313        fn new_empty() -> Self {
1314            Self { network_id: fidl::new_empty!(u32, D) }
1315        }
1316
1317        #[inline]
1318        unsafe fn decode(
1319            &mut self,
1320            decoder: &mut fidl::encoding::Decoder<'_, D>,
1321            offset: usize,
1322            _depth: fidl::encoding::Depth,
1323        ) -> fidl::Result<()> {
1324            decoder.debug_check_bounds::<Self>(offset);
1325            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1326            // Verify that padding bytes are zero.
1327            // Copy from the buffer into the object.
1328            unsafe {
1329                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1330            }
1331            Ok(())
1332        }
1333    }
1334
1335    impl fidl::encoding::ValueTypeMarker for NetworkRegistrySetDefaultRequest {
1336        type Borrowed<'a> = &'a Self;
1337        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1338            value
1339        }
1340    }
1341
1342    unsafe impl fidl::encoding::TypeMarker for NetworkRegistrySetDefaultRequest {
1343        type Owned = Self;
1344
1345        #[inline(always)]
1346        fn inline_align(_context: fidl::encoding::Context) -> usize {
1347            8
1348        }
1349
1350        #[inline(always)]
1351        fn inline_size(_context: fidl::encoding::Context) -> usize {
1352            16
1353        }
1354    }
1355
1356    unsafe impl<D: fidl::encoding::ResourceDialect>
1357        fidl::encoding::Encode<NetworkRegistrySetDefaultRequest, D>
1358        for &NetworkRegistrySetDefaultRequest
1359    {
1360        #[inline]
1361        unsafe fn encode(
1362            self,
1363            encoder: &mut fidl::encoding::Encoder<'_, D>,
1364            offset: usize,
1365            _depth: fidl::encoding::Depth,
1366        ) -> fidl::Result<()> {
1367            encoder.debug_check_bounds::<NetworkRegistrySetDefaultRequest>(offset);
1368            // Delegate to tuple encoding.
1369            fidl::encoding::Encode::<NetworkRegistrySetDefaultRequest, D>::encode(
1370                (
1371                    <fidl_fuchsia_posix_socket_common::OptionalUint32 as fidl::encoding::ValueTypeMarker>::borrow(&self.network_id),
1372                ),
1373                encoder, offset, _depth
1374            )
1375        }
1376    }
1377    unsafe impl<
1378        D: fidl::encoding::ResourceDialect,
1379        T0: fidl::encoding::Encode<fidl_fuchsia_posix_socket_common::OptionalUint32, D>,
1380    > fidl::encoding::Encode<NetworkRegistrySetDefaultRequest, D> for (T0,)
1381    {
1382        #[inline]
1383        unsafe fn encode(
1384            self,
1385            encoder: &mut fidl::encoding::Encoder<'_, D>,
1386            offset: usize,
1387            depth: fidl::encoding::Depth,
1388        ) -> fidl::Result<()> {
1389            encoder.debug_check_bounds::<NetworkRegistrySetDefaultRequest>(offset);
1390            // Zero out padding regions. There's no need to apply masks
1391            // because the unmasked parts will be overwritten by fields.
1392            // Write the fields.
1393            self.0.encode(encoder, offset + 0, depth)?;
1394            Ok(())
1395        }
1396    }
1397
1398    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1399        for NetworkRegistrySetDefaultRequest
1400    {
1401        #[inline(always)]
1402        fn new_empty() -> Self {
1403            Self {
1404                network_id: fidl::new_empty!(fidl_fuchsia_posix_socket_common::OptionalUint32, D),
1405            }
1406        }
1407
1408        #[inline]
1409        unsafe fn decode(
1410            &mut self,
1411            decoder: &mut fidl::encoding::Decoder<'_, D>,
1412            offset: usize,
1413            _depth: fidl::encoding::Depth,
1414        ) -> fidl::Result<()> {
1415            decoder.debug_check_bounds::<Self>(offset);
1416            // Verify that padding bytes are zero.
1417            fidl::decode!(
1418                fidl_fuchsia_posix_socket_common::OptionalUint32,
1419                D,
1420                &mut self.network_id,
1421                decoder,
1422                offset + 0,
1423                _depth
1424            )?;
1425            Ok(())
1426        }
1427    }
1428
1429    impl fidl::encoding::ValueTypeMarker for NetworkRegistryUpdateRequest {
1430        type Borrowed<'a> = &'a Self;
1431        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1432            value
1433        }
1434    }
1435
1436    unsafe impl fidl::encoding::TypeMarker for NetworkRegistryUpdateRequest {
1437        type Owned = Self;
1438
1439        #[inline(always)]
1440        fn inline_align(_context: fidl::encoding::Context) -> usize {
1441            8
1442        }
1443
1444        #[inline(always)]
1445        fn inline_size(_context: fidl::encoding::Context) -> usize {
1446            16
1447        }
1448    }
1449
1450    unsafe impl<D: fidl::encoding::ResourceDialect>
1451        fidl::encoding::Encode<NetworkRegistryUpdateRequest, D> for &NetworkRegistryUpdateRequest
1452    {
1453        #[inline]
1454        unsafe fn encode(
1455            self,
1456            encoder: &mut fidl::encoding::Encoder<'_, D>,
1457            offset: usize,
1458            _depth: fidl::encoding::Depth,
1459        ) -> fidl::Result<()> {
1460            encoder.debug_check_bounds::<NetworkRegistryUpdateRequest>(offset);
1461            // Delegate to tuple encoding.
1462            fidl::encoding::Encode::<NetworkRegistryUpdateRequest, D>::encode(
1463                (<Network as fidl::encoding::ValueTypeMarker>::borrow(&self.network),),
1464                encoder,
1465                offset,
1466                _depth,
1467            )
1468        }
1469    }
1470    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Network, D>>
1471        fidl::encoding::Encode<NetworkRegistryUpdateRequest, D> for (T0,)
1472    {
1473        #[inline]
1474        unsafe fn encode(
1475            self,
1476            encoder: &mut fidl::encoding::Encoder<'_, D>,
1477            offset: usize,
1478            depth: fidl::encoding::Depth,
1479        ) -> fidl::Result<()> {
1480            encoder.debug_check_bounds::<NetworkRegistryUpdateRequest>(offset);
1481            // Zero out padding regions. There's no need to apply masks
1482            // because the unmasked parts will be overwritten by fields.
1483            // Write the fields.
1484            self.0.encode(encoder, offset + 0, depth)?;
1485            Ok(())
1486        }
1487    }
1488
1489    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1490        for NetworkRegistryUpdateRequest
1491    {
1492        #[inline(always)]
1493        fn new_empty() -> Self {
1494            Self { network: fidl::new_empty!(Network, D) }
1495        }
1496
1497        #[inline]
1498        unsafe fn decode(
1499            &mut self,
1500            decoder: &mut fidl::encoding::Decoder<'_, D>,
1501            offset: usize,
1502            _depth: fidl::encoding::Depth,
1503        ) -> fidl::Result<()> {
1504            decoder.debug_check_bounds::<Self>(offset);
1505            // Verify that padding bytes are zero.
1506            fidl::decode!(Network, D, &mut self.network, decoder, offset + 0, _depth)?;
1507            Ok(())
1508        }
1509    }
1510
1511    impl FuchsiaNetworkInfo {
1512        #[inline(always)]
1513        fn max_ordinal_present(&self) -> u64 {
1514            0
1515        }
1516    }
1517
1518    impl fidl::encoding::ValueTypeMarker for FuchsiaNetworkInfo {
1519        type Borrowed<'a> = &'a Self;
1520        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1521            value
1522        }
1523    }
1524
1525    unsafe impl fidl::encoding::TypeMarker for FuchsiaNetworkInfo {
1526        type Owned = Self;
1527
1528        #[inline(always)]
1529        fn inline_align(_context: fidl::encoding::Context) -> usize {
1530            8
1531        }
1532
1533        #[inline(always)]
1534        fn inline_size(_context: fidl::encoding::Context) -> usize {
1535            16
1536        }
1537    }
1538
1539    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FuchsiaNetworkInfo, D>
1540        for &FuchsiaNetworkInfo
1541    {
1542        unsafe fn encode(
1543            self,
1544            encoder: &mut fidl::encoding::Encoder<'_, D>,
1545            offset: usize,
1546            mut depth: fidl::encoding::Depth,
1547        ) -> fidl::Result<()> {
1548            encoder.debug_check_bounds::<FuchsiaNetworkInfo>(offset);
1549            // Vector header
1550            let max_ordinal: u64 = self.max_ordinal_present();
1551            encoder.write_num(max_ordinal, offset);
1552            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1553            // Calling encoder.out_of_line_offset(0) is not allowed.
1554            if max_ordinal == 0 {
1555                return Ok(());
1556            }
1557            depth.increment()?;
1558            let envelope_size = 8;
1559            let bytes_len = max_ordinal as usize * envelope_size;
1560            #[allow(unused_variables)]
1561            let offset = encoder.out_of_line_offset(bytes_len);
1562            let mut _prev_end_offset: usize = 0;
1563
1564            Ok(())
1565        }
1566    }
1567
1568    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FuchsiaNetworkInfo {
1569        #[inline(always)]
1570        fn new_empty() -> Self {
1571            Self::default()
1572        }
1573
1574        unsafe fn decode(
1575            &mut self,
1576            decoder: &mut fidl::encoding::Decoder<'_, D>,
1577            offset: usize,
1578            mut depth: fidl::encoding::Depth,
1579        ) -> fidl::Result<()> {
1580            decoder.debug_check_bounds::<Self>(offset);
1581            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1582                None => return Err(fidl::Error::NotNullable),
1583                Some(len) => len,
1584            };
1585            // Calling decoder.out_of_line_offset(0) is not allowed.
1586            if len == 0 {
1587                return Ok(());
1588            };
1589            depth.increment()?;
1590            let envelope_size = 8;
1591            let bytes_len = len * envelope_size;
1592            let offset = decoder.out_of_line_offset(bytes_len)?;
1593            // Decode the envelope for each type.
1594            let mut _next_ordinal_to_read = 0;
1595            let mut next_offset = offset;
1596            let end_offset = offset + bytes_len;
1597
1598            // Decode the remaining unknown envelopes.
1599            while next_offset < end_offset {
1600                _next_ordinal_to_read += 1;
1601                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1602                next_offset += envelope_size;
1603            }
1604
1605            Ok(())
1606        }
1607    }
1608
1609    impl Network {
1610        #[inline(always)]
1611        fn max_ordinal_present(&self) -> u64 {
1612            if let Some(_) = self.has_default_route {
1613                return 9;
1614            }
1615            if let Some(_) = self.has_address {
1616                return 8;
1617            }
1618            if let Some(_) = self.name {
1619                return 7;
1620            }
1621            if let Some(_) = self.connectivity {
1622                return 6;
1623            }
1624            if let Some(_) = self.capabilities {
1625                return 5;
1626            }
1627            if let Some(_) = self.network_type {
1628                return 4;
1629            }
1630            if let Some(_) = self.dns_servers {
1631                return 3;
1632            }
1633            if let Some(_) = self.info {
1634                return 2;
1635            }
1636            if let Some(_) = self.network_id {
1637                return 1;
1638            }
1639            0
1640        }
1641    }
1642
1643    impl fidl::encoding::ValueTypeMarker for Network {
1644        type Borrowed<'a> = &'a Self;
1645        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1646            value
1647        }
1648    }
1649
1650    unsafe impl fidl::encoding::TypeMarker for Network {
1651        type Owned = Self;
1652
1653        #[inline(always)]
1654        fn inline_align(_context: fidl::encoding::Context) -> usize {
1655            8
1656        }
1657
1658        #[inline(always)]
1659        fn inline_size(_context: fidl::encoding::Context) -> usize {
1660            16
1661        }
1662    }
1663
1664    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Network, D> for &Network {
1665        unsafe fn encode(
1666            self,
1667            encoder: &mut fidl::encoding::Encoder<'_, D>,
1668            offset: usize,
1669            mut depth: fidl::encoding::Depth,
1670        ) -> fidl::Result<()> {
1671            encoder.debug_check_bounds::<Network>(offset);
1672            // Vector header
1673            let max_ordinal: u64 = self.max_ordinal_present();
1674            encoder.write_num(max_ordinal, offset);
1675            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1676            // Calling encoder.out_of_line_offset(0) is not allowed.
1677            if max_ordinal == 0 {
1678                return Ok(());
1679            }
1680            depth.increment()?;
1681            let envelope_size = 8;
1682            let bytes_len = max_ordinal as usize * envelope_size;
1683            #[allow(unused_variables)]
1684            let offset = encoder.out_of_line_offset(bytes_len);
1685            let mut _prev_end_offset: usize = 0;
1686            if 1 > max_ordinal {
1687                return Ok(());
1688            }
1689
1690            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1691            // are envelope_size bytes.
1692            let cur_offset: usize = (1 - 1) * envelope_size;
1693
1694            // Zero reserved fields.
1695            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1696
1697            // Safety:
1698            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1699            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1700            //   envelope_size bytes, there is always sufficient room.
1701            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1702                self.network_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1703                encoder,
1704                offset + cur_offset,
1705                depth,
1706            )?;
1707
1708            _prev_end_offset = cur_offset + envelope_size;
1709            if 2 > max_ordinal {
1710                return Ok(());
1711            }
1712
1713            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1714            // are envelope_size bytes.
1715            let cur_offset: usize = (2 - 1) * envelope_size;
1716
1717            // Zero reserved fields.
1718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1719
1720            // Safety:
1721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1723            //   envelope_size bytes, there is always sufficient room.
1724            fidl::encoding::encode_in_envelope_optional::<NetworkInfo, D>(
1725                self.info.as_ref().map(<NetworkInfo as fidl::encoding::ValueTypeMarker>::borrow),
1726                encoder,
1727                offset + cur_offset,
1728                depth,
1729            )?;
1730
1731            _prev_end_offset = cur_offset + envelope_size;
1732            if 3 > max_ordinal {
1733                return Ok(());
1734            }
1735
1736            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1737            // are envelope_size bytes.
1738            let cur_offset: usize = (3 - 1) * envelope_size;
1739
1740            // Zero reserved fields.
1741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1742
1743            // Safety:
1744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1746            //   envelope_size bytes, there is always sufficient room.
1747            fidl::encoding::encode_in_envelope_optional::<NetworkDnsServers, D>(
1748                self.dns_servers
1749                    .as_ref()
1750                    .map(<NetworkDnsServers as fidl::encoding::ValueTypeMarker>::borrow),
1751                encoder,
1752                offset + cur_offset,
1753                depth,
1754            )?;
1755
1756            _prev_end_offset = cur_offset + envelope_size;
1757            if 4 > max_ordinal {
1758                return Ok(());
1759            }
1760
1761            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1762            // are envelope_size bytes.
1763            let cur_offset: usize = (4 - 1) * envelope_size;
1764
1765            // Zero reserved fields.
1766            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1767
1768            // Safety:
1769            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1770            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1771            //   envelope_size bytes, there is always sufficient room.
1772            fidl::encoding::encode_in_envelope_optional::<NetworkType, D>(
1773                self.network_type
1774                    .as_ref()
1775                    .map(<NetworkType as fidl::encoding::ValueTypeMarker>::borrow),
1776                encoder,
1777                offset + cur_offset,
1778                depth,
1779            )?;
1780
1781            _prev_end_offset = cur_offset + envelope_size;
1782            if 5 > max_ordinal {
1783                return Ok(());
1784            }
1785
1786            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1787            // are envelope_size bytes.
1788            let cur_offset: usize = (5 - 1) * envelope_size;
1789
1790            // Zero reserved fields.
1791            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1792
1793            // Safety:
1794            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1795            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1796            //   envelope_size bytes, there is always sufficient room.
1797            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<NetworkCapability>, D>(
1798            self.capabilities.as_ref().map(<fidl::encoding::UnboundedVector<NetworkCapability> as fidl::encoding::ValueTypeMarker>::borrow),
1799            encoder, offset + cur_offset, depth
1800        )?;
1801
1802            _prev_end_offset = cur_offset + envelope_size;
1803            if 6 > max_ordinal {
1804                return Ok(());
1805            }
1806
1807            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1808            // are envelope_size bytes.
1809            let cur_offset: usize = (6 - 1) * envelope_size;
1810
1811            // Zero reserved fields.
1812            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1813
1814            // Safety:
1815            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1816            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1817            //   envelope_size bytes, there is always sufficient room.
1818            fidl::encoding::encode_in_envelope_optional::<ConnectivityState, D>(
1819                self.connectivity
1820                    .as_ref()
1821                    .map(<ConnectivityState as fidl::encoding::ValueTypeMarker>::borrow),
1822                encoder,
1823                offset + cur_offset,
1824                depth,
1825            )?;
1826
1827            _prev_end_offset = cur_offset + envelope_size;
1828            if 7 > max_ordinal {
1829                return Ok(());
1830            }
1831
1832            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1833            // are envelope_size bytes.
1834            let cur_offset: usize = (7 - 1) * envelope_size;
1835
1836            // Zero reserved fields.
1837            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1838
1839            // Safety:
1840            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1841            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1842            //   envelope_size bytes, there is always sufficient room.
1843            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<15>, D>(
1844                self.name.as_ref().map(
1845                    <fidl::encoding::BoundedString<15> as fidl::encoding::ValueTypeMarker>::borrow,
1846                ),
1847                encoder,
1848                offset + cur_offset,
1849                depth,
1850            )?;
1851
1852            _prev_end_offset = cur_offset + envelope_size;
1853            if 8 > max_ordinal {
1854                return Ok(());
1855            }
1856
1857            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1858            // are envelope_size bytes.
1859            let cur_offset: usize = (8 - 1) * envelope_size;
1860
1861            // Zero reserved fields.
1862            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1863
1864            // Safety:
1865            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1866            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1867            //   envelope_size bytes, there is always sufficient room.
1868            fidl::encoding::encode_in_envelope_optional::<ProtoProperties, D>(
1869                self.has_address
1870                    .as_ref()
1871                    .map(<ProtoProperties as fidl::encoding::ValueTypeMarker>::borrow),
1872                encoder,
1873                offset + cur_offset,
1874                depth,
1875            )?;
1876
1877            _prev_end_offset = cur_offset + envelope_size;
1878            if 9 > max_ordinal {
1879                return Ok(());
1880            }
1881
1882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1883            // are envelope_size bytes.
1884            let cur_offset: usize = (9 - 1) * envelope_size;
1885
1886            // Zero reserved fields.
1887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1888
1889            // Safety:
1890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1892            //   envelope_size bytes, there is always sufficient room.
1893            fidl::encoding::encode_in_envelope_optional::<ProtoProperties, D>(
1894                self.has_default_route
1895                    .as_ref()
1896                    .map(<ProtoProperties as fidl::encoding::ValueTypeMarker>::borrow),
1897                encoder,
1898                offset + cur_offset,
1899                depth,
1900            )?;
1901
1902            _prev_end_offset = cur_offset + envelope_size;
1903
1904            Ok(())
1905        }
1906    }
1907
1908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Network {
1909        #[inline(always)]
1910        fn new_empty() -> Self {
1911            Self::default()
1912        }
1913
1914        unsafe fn decode(
1915            &mut self,
1916            decoder: &mut fidl::encoding::Decoder<'_, D>,
1917            offset: usize,
1918            mut depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            decoder.debug_check_bounds::<Self>(offset);
1921            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1922                None => return Err(fidl::Error::NotNullable),
1923                Some(len) => len,
1924            };
1925            // Calling decoder.out_of_line_offset(0) is not allowed.
1926            if len == 0 {
1927                return Ok(());
1928            };
1929            depth.increment()?;
1930            let envelope_size = 8;
1931            let bytes_len = len * envelope_size;
1932            let offset = decoder.out_of_line_offset(bytes_len)?;
1933            // Decode the envelope for each type.
1934            let mut _next_ordinal_to_read = 0;
1935            let mut next_offset = offset;
1936            let end_offset = offset + bytes_len;
1937            _next_ordinal_to_read += 1;
1938            if next_offset >= end_offset {
1939                return Ok(());
1940            }
1941
1942            // Decode unknown envelopes for gaps in ordinals.
1943            while _next_ordinal_to_read < 1 {
1944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1945                _next_ordinal_to_read += 1;
1946                next_offset += envelope_size;
1947            }
1948
1949            let next_out_of_line = decoder.next_out_of_line();
1950            let handles_before = decoder.remaining_handles();
1951            if let Some((inlined, num_bytes, num_handles)) =
1952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1953            {
1954                let member_inline_size =
1955                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1956                if inlined != (member_inline_size <= 4) {
1957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1958                }
1959                let inner_offset;
1960                let mut inner_depth = depth.clone();
1961                if inlined {
1962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1963                    inner_offset = next_offset;
1964                } else {
1965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1966                    inner_depth.increment()?;
1967                }
1968                let val_ref = self.network_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1969                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1971                {
1972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1973                }
1974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1976                }
1977            }
1978
1979            next_offset += envelope_size;
1980            _next_ordinal_to_read += 1;
1981            if next_offset >= end_offset {
1982                return Ok(());
1983            }
1984
1985            // Decode unknown envelopes for gaps in ordinals.
1986            while _next_ordinal_to_read < 2 {
1987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1988                _next_ordinal_to_read += 1;
1989                next_offset += envelope_size;
1990            }
1991
1992            let next_out_of_line = decoder.next_out_of_line();
1993            let handles_before = decoder.remaining_handles();
1994            if let Some((inlined, num_bytes, num_handles)) =
1995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1996            {
1997                let member_inline_size =
1998                    <NetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1999                if inlined != (member_inline_size <= 4) {
2000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2001                }
2002                let inner_offset;
2003                let mut inner_depth = depth.clone();
2004                if inlined {
2005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2006                    inner_offset = next_offset;
2007                } else {
2008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2009                    inner_depth.increment()?;
2010                }
2011                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(NetworkInfo, D));
2012                fidl::decode!(NetworkInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2013                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2014                {
2015                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2016                }
2017                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2018                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2019                }
2020            }
2021
2022            next_offset += envelope_size;
2023            _next_ordinal_to_read += 1;
2024            if next_offset >= end_offset {
2025                return Ok(());
2026            }
2027
2028            // Decode unknown envelopes for gaps in ordinals.
2029            while _next_ordinal_to_read < 3 {
2030                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2031                _next_ordinal_to_read += 1;
2032                next_offset += envelope_size;
2033            }
2034
2035            let next_out_of_line = decoder.next_out_of_line();
2036            let handles_before = decoder.remaining_handles();
2037            if let Some((inlined, num_bytes, num_handles)) =
2038                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2039            {
2040                let member_inline_size =
2041                    <NetworkDnsServers as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2042                if inlined != (member_inline_size <= 4) {
2043                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2044                }
2045                let inner_offset;
2046                let mut inner_depth = depth.clone();
2047                if inlined {
2048                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2049                    inner_offset = next_offset;
2050                } else {
2051                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2052                    inner_depth.increment()?;
2053                }
2054                let val_ref =
2055                    self.dns_servers.get_or_insert_with(|| fidl::new_empty!(NetworkDnsServers, D));
2056                fidl::decode!(NetworkDnsServers, D, val_ref, decoder, inner_offset, inner_depth)?;
2057                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2058                {
2059                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2060                }
2061                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2062                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2063                }
2064            }
2065
2066            next_offset += envelope_size;
2067            _next_ordinal_to_read += 1;
2068            if next_offset >= end_offset {
2069                return Ok(());
2070            }
2071
2072            // Decode unknown envelopes for gaps in ordinals.
2073            while _next_ordinal_to_read < 4 {
2074                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2075                _next_ordinal_to_read += 1;
2076                next_offset += envelope_size;
2077            }
2078
2079            let next_out_of_line = decoder.next_out_of_line();
2080            let handles_before = decoder.remaining_handles();
2081            if let Some((inlined, num_bytes, num_handles)) =
2082                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2083            {
2084                let member_inline_size =
2085                    <NetworkType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2086                if inlined != (member_inline_size <= 4) {
2087                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2088                }
2089                let inner_offset;
2090                let mut inner_depth = depth.clone();
2091                if inlined {
2092                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2093                    inner_offset = next_offset;
2094                } else {
2095                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2096                    inner_depth.increment()?;
2097                }
2098                let val_ref =
2099                    self.network_type.get_or_insert_with(|| fidl::new_empty!(NetworkType, D));
2100                fidl::decode!(NetworkType, D, val_ref, decoder, inner_offset, inner_depth)?;
2101                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2102                {
2103                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2104                }
2105                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2106                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2107                }
2108            }
2109
2110            next_offset += envelope_size;
2111            _next_ordinal_to_read += 1;
2112            if next_offset >= end_offset {
2113                return Ok(());
2114            }
2115
2116            // Decode unknown envelopes for gaps in ordinals.
2117            while _next_ordinal_to_read < 5 {
2118                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2119                _next_ordinal_to_read += 1;
2120                next_offset += envelope_size;
2121            }
2122
2123            let next_out_of_line = decoder.next_out_of_line();
2124            let handles_before = decoder.remaining_handles();
2125            if let Some((inlined, num_bytes, num_handles)) =
2126                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2127            {
2128                let member_inline_size = <fidl::encoding::UnboundedVector<NetworkCapability> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2129                if inlined != (member_inline_size <= 4) {
2130                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2131                }
2132                let inner_offset;
2133                let mut inner_depth = depth.clone();
2134                if inlined {
2135                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2136                    inner_offset = next_offset;
2137                } else {
2138                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2139                    inner_depth.increment()?;
2140                }
2141                let val_ref = self.capabilities.get_or_insert_with(|| {
2142                    fidl::new_empty!(fidl::encoding::UnboundedVector<NetworkCapability>, D)
2143                });
2144                fidl::decode!(
2145                    fidl::encoding::UnboundedVector<NetworkCapability>,
2146                    D,
2147                    val_ref,
2148                    decoder,
2149                    inner_offset,
2150                    inner_depth
2151                )?;
2152                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2153                {
2154                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2155                }
2156                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2157                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2158                }
2159            }
2160
2161            next_offset += envelope_size;
2162            _next_ordinal_to_read += 1;
2163            if next_offset >= end_offset {
2164                return Ok(());
2165            }
2166
2167            // Decode unknown envelopes for gaps in ordinals.
2168            while _next_ordinal_to_read < 6 {
2169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2170                _next_ordinal_to_read += 1;
2171                next_offset += envelope_size;
2172            }
2173
2174            let next_out_of_line = decoder.next_out_of_line();
2175            let handles_before = decoder.remaining_handles();
2176            if let Some((inlined, num_bytes, num_handles)) =
2177                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2178            {
2179                let member_inline_size =
2180                    <ConnectivityState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2181                if inlined != (member_inline_size <= 4) {
2182                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2183                }
2184                let inner_offset;
2185                let mut inner_depth = depth.clone();
2186                if inlined {
2187                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2188                    inner_offset = next_offset;
2189                } else {
2190                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2191                    inner_depth.increment()?;
2192                }
2193                let val_ref =
2194                    self.connectivity.get_or_insert_with(|| fidl::new_empty!(ConnectivityState, D));
2195                fidl::decode!(ConnectivityState, D, val_ref, decoder, inner_offset, inner_depth)?;
2196                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2197                {
2198                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2199                }
2200                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2201                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2202                }
2203            }
2204
2205            next_offset += envelope_size;
2206            _next_ordinal_to_read += 1;
2207            if next_offset >= end_offset {
2208                return Ok(());
2209            }
2210
2211            // Decode unknown envelopes for gaps in ordinals.
2212            while _next_ordinal_to_read < 7 {
2213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2214                _next_ordinal_to_read += 1;
2215                next_offset += envelope_size;
2216            }
2217
2218            let next_out_of_line = decoder.next_out_of_line();
2219            let handles_before = decoder.remaining_handles();
2220            if let Some((inlined, num_bytes, num_handles)) =
2221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2222            {
2223                let member_inline_size =
2224                    <fidl::encoding::BoundedString<15> as fidl::encoding::TypeMarker>::inline_size(
2225                        decoder.context,
2226                    );
2227                if inlined != (member_inline_size <= 4) {
2228                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2229                }
2230                let inner_offset;
2231                let mut inner_depth = depth.clone();
2232                if inlined {
2233                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2234                    inner_offset = next_offset;
2235                } else {
2236                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2237                    inner_depth.increment()?;
2238                }
2239                let val_ref = self
2240                    .name
2241                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<15>, D));
2242                fidl::decode!(
2243                    fidl::encoding::BoundedString<15>,
2244                    D,
2245                    val_ref,
2246                    decoder,
2247                    inner_offset,
2248                    inner_depth
2249                )?;
2250                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2251                {
2252                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2253                }
2254                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2255                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2256                }
2257            }
2258
2259            next_offset += envelope_size;
2260            _next_ordinal_to_read += 1;
2261            if next_offset >= end_offset {
2262                return Ok(());
2263            }
2264
2265            // Decode unknown envelopes for gaps in ordinals.
2266            while _next_ordinal_to_read < 8 {
2267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2268                _next_ordinal_to_read += 1;
2269                next_offset += envelope_size;
2270            }
2271
2272            let next_out_of_line = decoder.next_out_of_line();
2273            let handles_before = decoder.remaining_handles();
2274            if let Some((inlined, num_bytes, num_handles)) =
2275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2276            {
2277                let member_inline_size =
2278                    <ProtoProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2279                if inlined != (member_inline_size <= 4) {
2280                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2281                }
2282                let inner_offset;
2283                let mut inner_depth = depth.clone();
2284                if inlined {
2285                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2286                    inner_offset = next_offset;
2287                } else {
2288                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2289                    inner_depth.increment()?;
2290                }
2291                let val_ref =
2292                    self.has_address.get_or_insert_with(|| fidl::new_empty!(ProtoProperties, D));
2293                fidl::decode!(ProtoProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
2294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2295                {
2296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2297                }
2298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2300                }
2301            }
2302
2303            next_offset += envelope_size;
2304            _next_ordinal_to_read += 1;
2305            if next_offset >= end_offset {
2306                return Ok(());
2307            }
2308
2309            // Decode unknown envelopes for gaps in ordinals.
2310            while _next_ordinal_to_read < 9 {
2311                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2312                _next_ordinal_to_read += 1;
2313                next_offset += envelope_size;
2314            }
2315
2316            let next_out_of_line = decoder.next_out_of_line();
2317            let handles_before = decoder.remaining_handles();
2318            if let Some((inlined, num_bytes, num_handles)) =
2319                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2320            {
2321                let member_inline_size =
2322                    <ProtoProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2323                if inlined != (member_inline_size <= 4) {
2324                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2325                }
2326                let inner_offset;
2327                let mut inner_depth = depth.clone();
2328                if inlined {
2329                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2330                    inner_offset = next_offset;
2331                } else {
2332                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2333                    inner_depth.increment()?;
2334                }
2335                let val_ref = self
2336                    .has_default_route
2337                    .get_or_insert_with(|| fidl::new_empty!(ProtoProperties, D));
2338                fidl::decode!(ProtoProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
2339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2340                {
2341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2342                }
2343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2345                }
2346            }
2347
2348            next_offset += envelope_size;
2349
2350            // Decode the remaining unknown envelopes.
2351            while next_offset < end_offset {
2352                _next_ordinal_to_read += 1;
2353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2354                next_offset += envelope_size;
2355            }
2356
2357            Ok(())
2358        }
2359    }
2360
2361    impl NetworkDnsServers {
2362        #[inline(always)]
2363        fn max_ordinal_present(&self) -> u64 {
2364            if let Some(_) = self.v6 {
2365                return 2;
2366            }
2367            if let Some(_) = self.v4 {
2368                return 1;
2369            }
2370            0
2371        }
2372    }
2373
2374    impl fidl::encoding::ValueTypeMarker for NetworkDnsServers {
2375        type Borrowed<'a> = &'a Self;
2376        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2377            value
2378        }
2379    }
2380
2381    unsafe impl fidl::encoding::TypeMarker for NetworkDnsServers {
2382        type Owned = Self;
2383
2384        #[inline(always)]
2385        fn inline_align(_context: fidl::encoding::Context) -> usize {
2386            8
2387        }
2388
2389        #[inline(always)]
2390        fn inline_size(_context: fidl::encoding::Context) -> usize {
2391            16
2392        }
2393    }
2394
2395    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkDnsServers, D>
2396        for &NetworkDnsServers
2397    {
2398        unsafe fn encode(
2399            self,
2400            encoder: &mut fidl::encoding::Encoder<'_, D>,
2401            offset: usize,
2402            mut depth: fidl::encoding::Depth,
2403        ) -> fidl::Result<()> {
2404            encoder.debug_check_bounds::<NetworkDnsServers>(offset);
2405            // Vector header
2406            let max_ordinal: u64 = self.max_ordinal_present();
2407            encoder.write_num(max_ordinal, offset);
2408            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2409            // Calling encoder.out_of_line_offset(0) is not allowed.
2410            if max_ordinal == 0 {
2411                return Ok(());
2412            }
2413            depth.increment()?;
2414            let envelope_size = 8;
2415            let bytes_len = max_ordinal as usize * envelope_size;
2416            #[allow(unused_variables)]
2417            let offset = encoder.out_of_line_offset(bytes_len);
2418            let mut _prev_end_offset: usize = 0;
2419            if 1 > max_ordinal {
2420                return Ok(());
2421            }
2422
2423            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2424            // are envelope_size bytes.
2425            let cur_offset: usize = (1 - 1) * envelope_size;
2426
2427            // Zero reserved fields.
2428            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2429
2430            // Safety:
2431            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2432            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2433            //   envelope_size bytes, there is always sufficient room.
2434            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>, D>(
2435            self.v4.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address> as fidl::encoding::ValueTypeMarker>::borrow),
2436            encoder, offset + cur_offset, depth
2437        )?;
2438
2439            _prev_end_offset = cur_offset + envelope_size;
2440            if 2 > max_ordinal {
2441                return Ok(());
2442            }
2443
2444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2445            // are envelope_size bytes.
2446            let cur_offset: usize = (2 - 1) * envelope_size;
2447
2448            // Zero reserved fields.
2449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2450
2451            // Safety:
2452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2454            //   envelope_size bytes, there is always sufficient room.
2455            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>, D>(
2456            self.v6.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address> as fidl::encoding::ValueTypeMarker>::borrow),
2457            encoder, offset + cur_offset, depth
2458        )?;
2459
2460            _prev_end_offset = cur_offset + envelope_size;
2461
2462            Ok(())
2463        }
2464    }
2465
2466    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkDnsServers {
2467        #[inline(always)]
2468        fn new_empty() -> Self {
2469            Self::default()
2470        }
2471
2472        unsafe fn decode(
2473            &mut self,
2474            decoder: &mut fidl::encoding::Decoder<'_, D>,
2475            offset: usize,
2476            mut depth: fidl::encoding::Depth,
2477        ) -> fidl::Result<()> {
2478            decoder.debug_check_bounds::<Self>(offset);
2479            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2480                None => return Err(fidl::Error::NotNullable),
2481                Some(len) => len,
2482            };
2483            // Calling decoder.out_of_line_offset(0) is not allowed.
2484            if len == 0 {
2485                return Ok(());
2486            };
2487            depth.increment()?;
2488            let envelope_size = 8;
2489            let bytes_len = len * envelope_size;
2490            let offset = decoder.out_of_line_offset(bytes_len)?;
2491            // Decode the envelope for each type.
2492            let mut _next_ordinal_to_read = 0;
2493            let mut next_offset = offset;
2494            let end_offset = offset + bytes_len;
2495            _next_ordinal_to_read += 1;
2496            if next_offset >= end_offset {
2497                return Ok(());
2498            }
2499
2500            // Decode unknown envelopes for gaps in ordinals.
2501            while _next_ordinal_to_read < 1 {
2502                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2503                _next_ordinal_to_read += 1;
2504                next_offset += envelope_size;
2505            }
2506
2507            let next_out_of_line = decoder.next_out_of_line();
2508            let handles_before = decoder.remaining_handles();
2509            if let Some((inlined, num_bytes, num_handles)) =
2510                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2511            {
2512                let member_inline_size = <fidl::encoding::UnboundedVector<
2513                    fidl_fuchsia_net_common::Ipv4Address,
2514                > as fidl::encoding::TypeMarker>::inline_size(
2515                    decoder.context
2516                );
2517                if inlined != (member_inline_size <= 4) {
2518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2519                }
2520                let inner_offset;
2521                let mut inner_depth = depth.clone();
2522                if inlined {
2523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2524                    inner_offset = next_offset;
2525                } else {
2526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2527                    inner_depth.increment()?;
2528                }
2529                let val_ref = self.v4.get_or_insert_with(|| {
2530                    fidl::new_empty!(
2531                        fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>,
2532                        D
2533                    )
2534                });
2535                fidl::decode!(
2536                    fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv4Address>,
2537                    D,
2538                    val_ref,
2539                    decoder,
2540                    inner_offset,
2541                    inner_depth
2542                )?;
2543                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2544                {
2545                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2546                }
2547                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2548                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2549                }
2550            }
2551
2552            next_offset += envelope_size;
2553            _next_ordinal_to_read += 1;
2554            if next_offset >= end_offset {
2555                return Ok(());
2556            }
2557
2558            // Decode unknown envelopes for gaps in ordinals.
2559            while _next_ordinal_to_read < 2 {
2560                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2561                _next_ordinal_to_read += 1;
2562                next_offset += envelope_size;
2563            }
2564
2565            let next_out_of_line = decoder.next_out_of_line();
2566            let handles_before = decoder.remaining_handles();
2567            if let Some((inlined, num_bytes, num_handles)) =
2568                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2569            {
2570                let member_inline_size = <fidl::encoding::UnboundedVector<
2571                    fidl_fuchsia_net_common::Ipv6Address,
2572                > as fidl::encoding::TypeMarker>::inline_size(
2573                    decoder.context
2574                );
2575                if inlined != (member_inline_size <= 4) {
2576                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2577                }
2578                let inner_offset;
2579                let mut inner_depth = depth.clone();
2580                if inlined {
2581                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2582                    inner_offset = next_offset;
2583                } else {
2584                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2585                    inner_depth.increment()?;
2586                }
2587                let val_ref = self.v6.get_or_insert_with(|| {
2588                    fidl::new_empty!(
2589                        fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>,
2590                        D
2591                    )
2592                });
2593                fidl::decode!(
2594                    fidl::encoding::UnboundedVector<fidl_fuchsia_net_common::Ipv6Address>,
2595                    D,
2596                    val_ref,
2597                    decoder,
2598                    inner_offset,
2599                    inner_depth
2600                )?;
2601                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2602                {
2603                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2604                }
2605                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2606                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2607                }
2608            }
2609
2610            next_offset += envelope_size;
2611
2612            // Decode the remaining unknown envelopes.
2613            while next_offset < end_offset {
2614                _next_ordinal_to_read += 1;
2615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2616                next_offset += envelope_size;
2617            }
2618
2619            Ok(())
2620        }
2621    }
2622
2623    impl StarnixNetworkInfo {
2624        #[inline(always)]
2625        fn max_ordinal_present(&self) -> u64 {
2626            if let Some(_) = self.handle {
2627                return 2;
2628            }
2629            if let Some(_) = self.mark {
2630                return 1;
2631            }
2632            0
2633        }
2634    }
2635
2636    impl fidl::encoding::ValueTypeMarker for StarnixNetworkInfo {
2637        type Borrowed<'a> = &'a Self;
2638        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2639            value
2640        }
2641    }
2642
2643    unsafe impl fidl::encoding::TypeMarker for StarnixNetworkInfo {
2644        type Owned = Self;
2645
2646        #[inline(always)]
2647        fn inline_align(_context: fidl::encoding::Context) -> usize {
2648            8
2649        }
2650
2651        #[inline(always)]
2652        fn inline_size(_context: fidl::encoding::Context) -> usize {
2653            16
2654        }
2655    }
2656
2657    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StarnixNetworkInfo, D>
2658        for &StarnixNetworkInfo
2659    {
2660        unsafe fn encode(
2661            self,
2662            encoder: &mut fidl::encoding::Encoder<'_, D>,
2663            offset: usize,
2664            mut depth: fidl::encoding::Depth,
2665        ) -> fidl::Result<()> {
2666            encoder.debug_check_bounds::<StarnixNetworkInfo>(offset);
2667            // Vector header
2668            let max_ordinal: u64 = self.max_ordinal_present();
2669            encoder.write_num(max_ordinal, offset);
2670            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2671            // Calling encoder.out_of_line_offset(0) is not allowed.
2672            if max_ordinal == 0 {
2673                return Ok(());
2674            }
2675            depth.increment()?;
2676            let envelope_size = 8;
2677            let bytes_len = max_ordinal as usize * envelope_size;
2678            #[allow(unused_variables)]
2679            let offset = encoder.out_of_line_offset(bytes_len);
2680            let mut _prev_end_offset: usize = 0;
2681            if 1 > max_ordinal {
2682                return Ok(());
2683            }
2684
2685            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2686            // are envelope_size bytes.
2687            let cur_offset: usize = (1 - 1) * envelope_size;
2688
2689            // Zero reserved fields.
2690            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2691
2692            // Safety:
2693            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2694            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2695            //   envelope_size bytes, there is always sufficient room.
2696            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2697                self.mark.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2698                encoder,
2699                offset + cur_offset,
2700                depth,
2701            )?;
2702
2703            _prev_end_offset = cur_offset + envelope_size;
2704            if 2 > max_ordinal {
2705                return Ok(());
2706            }
2707
2708            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2709            // are envelope_size bytes.
2710            let cur_offset: usize = (2 - 1) * envelope_size;
2711
2712            // Zero reserved fields.
2713            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2714
2715            // Safety:
2716            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2717            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2718            //   envelope_size bytes, there is always sufficient room.
2719            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2720                self.handle.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2721                encoder,
2722                offset + cur_offset,
2723                depth,
2724            )?;
2725
2726            _prev_end_offset = cur_offset + envelope_size;
2727
2728            Ok(())
2729        }
2730    }
2731
2732    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StarnixNetworkInfo {
2733        #[inline(always)]
2734        fn new_empty() -> Self {
2735            Self::default()
2736        }
2737
2738        unsafe fn decode(
2739            &mut self,
2740            decoder: &mut fidl::encoding::Decoder<'_, D>,
2741            offset: usize,
2742            mut depth: fidl::encoding::Depth,
2743        ) -> fidl::Result<()> {
2744            decoder.debug_check_bounds::<Self>(offset);
2745            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2746                None => return Err(fidl::Error::NotNullable),
2747                Some(len) => len,
2748            };
2749            // Calling decoder.out_of_line_offset(0) is not allowed.
2750            if len == 0 {
2751                return Ok(());
2752            };
2753            depth.increment()?;
2754            let envelope_size = 8;
2755            let bytes_len = len * envelope_size;
2756            let offset = decoder.out_of_line_offset(bytes_len)?;
2757            // Decode the envelope for each type.
2758            let mut _next_ordinal_to_read = 0;
2759            let mut next_offset = offset;
2760            let end_offset = offset + bytes_len;
2761            _next_ordinal_to_read += 1;
2762            if next_offset >= end_offset {
2763                return Ok(());
2764            }
2765
2766            // Decode unknown envelopes for gaps in ordinals.
2767            while _next_ordinal_to_read < 1 {
2768                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2769                _next_ordinal_to_read += 1;
2770                next_offset += envelope_size;
2771            }
2772
2773            let next_out_of_line = decoder.next_out_of_line();
2774            let handles_before = decoder.remaining_handles();
2775            if let Some((inlined, num_bytes, num_handles)) =
2776                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2777            {
2778                let member_inline_size =
2779                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2780                if inlined != (member_inline_size <= 4) {
2781                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2782                }
2783                let inner_offset;
2784                let mut inner_depth = depth.clone();
2785                if inlined {
2786                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2787                    inner_offset = next_offset;
2788                } else {
2789                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2790                    inner_depth.increment()?;
2791                }
2792                let val_ref = self.mark.get_or_insert_with(|| fidl::new_empty!(u32, D));
2793                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2795                {
2796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2797                }
2798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2800                }
2801            }
2802
2803            next_offset += envelope_size;
2804            _next_ordinal_to_read += 1;
2805            if next_offset >= end_offset {
2806                return Ok(());
2807            }
2808
2809            // Decode unknown envelopes for gaps in ordinals.
2810            while _next_ordinal_to_read < 2 {
2811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2812                _next_ordinal_to_read += 1;
2813                next_offset += envelope_size;
2814            }
2815
2816            let next_out_of_line = decoder.next_out_of_line();
2817            let handles_before = decoder.remaining_handles();
2818            if let Some((inlined, num_bytes, num_handles)) =
2819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2820            {
2821                let member_inline_size =
2822                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2823                if inlined != (member_inline_size <= 4) {
2824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2825                }
2826                let inner_offset;
2827                let mut inner_depth = depth.clone();
2828                if inlined {
2829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2830                    inner_offset = next_offset;
2831                } else {
2832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2833                    inner_depth.increment()?;
2834                }
2835                let val_ref = self.handle.get_or_insert_with(|| fidl::new_empty!(u64, D));
2836                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2838                {
2839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2840                }
2841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2843                }
2844            }
2845
2846            next_offset += envelope_size;
2847
2848            // Decode the remaining unknown envelopes.
2849            while next_offset < end_offset {
2850                _next_ordinal_to_read += 1;
2851                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2852                next_offset += envelope_size;
2853            }
2854
2855            Ok(())
2856        }
2857    }
2858
2859    impl fidl::encoding::ValueTypeMarker for NetworkInfo {
2860        type Borrowed<'a> = &'a Self;
2861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2862            value
2863        }
2864    }
2865
2866    unsafe impl fidl::encoding::TypeMarker for NetworkInfo {
2867        type Owned = Self;
2868
2869        #[inline(always)]
2870        fn inline_align(_context: fidl::encoding::Context) -> usize {
2871            8
2872        }
2873
2874        #[inline(always)]
2875        fn inline_size(_context: fidl::encoding::Context) -> usize {
2876            16
2877        }
2878    }
2879
2880    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetworkInfo, D>
2881        for &NetworkInfo
2882    {
2883        #[inline]
2884        unsafe fn encode(
2885            self,
2886            encoder: &mut fidl::encoding::Encoder<'_, D>,
2887            offset: usize,
2888            _depth: fidl::encoding::Depth,
2889        ) -> fidl::Result<()> {
2890            encoder.debug_check_bounds::<NetworkInfo>(offset);
2891            encoder.write_num::<u64>(self.ordinal(), offset);
2892            match self {
2893                NetworkInfo::Starnix(ref val) => {
2894                    fidl::encoding::encode_in_envelope::<StarnixNetworkInfo, D>(
2895                        <StarnixNetworkInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
2896                        encoder,
2897                        offset + 8,
2898                        _depth,
2899                    )
2900                }
2901                NetworkInfo::Fuchsia(ref val) => {
2902                    fidl::encoding::encode_in_envelope::<FuchsiaNetworkInfo, D>(
2903                        <FuchsiaNetworkInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
2904                        encoder,
2905                        offset + 8,
2906                        _depth,
2907                    )
2908                }
2909                NetworkInfo::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2910            }
2911        }
2912    }
2913
2914    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetworkInfo {
2915        #[inline(always)]
2916        fn new_empty() -> Self {
2917            Self::__SourceBreaking { unknown_ordinal: 0 }
2918        }
2919
2920        #[inline]
2921        unsafe fn decode(
2922            &mut self,
2923            decoder: &mut fidl::encoding::Decoder<'_, D>,
2924            offset: usize,
2925            mut depth: fidl::encoding::Depth,
2926        ) -> fidl::Result<()> {
2927            decoder.debug_check_bounds::<Self>(offset);
2928            #[allow(unused_variables)]
2929            let next_out_of_line = decoder.next_out_of_line();
2930            let handles_before = decoder.remaining_handles();
2931            let (ordinal, inlined, num_bytes, num_handles) =
2932                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2933
2934            let member_inline_size = match ordinal {
2935                1 => {
2936                    <StarnixNetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context)
2937                }
2938                2 => {
2939                    <FuchsiaNetworkInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context)
2940                }
2941                0 => return Err(fidl::Error::UnknownUnionTag),
2942                _ => num_bytes as usize,
2943            };
2944
2945            if inlined != (member_inline_size <= 4) {
2946                return Err(fidl::Error::InvalidInlineBitInEnvelope);
2947            }
2948            let _inner_offset;
2949            if inlined {
2950                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2951                _inner_offset = offset + 8;
2952            } else {
2953                depth.increment()?;
2954                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2955            }
2956            match ordinal {
2957                1 => {
2958                    #[allow(irrefutable_let_patterns)]
2959                    if let NetworkInfo::Starnix(_) = self {
2960                        // Do nothing, read the value into the object
2961                    } else {
2962                        // Initialize `self` to the right variant
2963                        *self = NetworkInfo::Starnix(fidl::new_empty!(StarnixNetworkInfo, D));
2964                    }
2965                    #[allow(irrefutable_let_patterns)]
2966                    if let NetworkInfo::Starnix(ref mut val) = self {
2967                        fidl::decode!(StarnixNetworkInfo, D, val, decoder, _inner_offset, depth)?;
2968                    } else {
2969                        unreachable!()
2970                    }
2971                }
2972                2 => {
2973                    #[allow(irrefutable_let_patterns)]
2974                    if let NetworkInfo::Fuchsia(_) = self {
2975                        // Do nothing, read the value into the object
2976                    } else {
2977                        // Initialize `self` to the right variant
2978                        *self = NetworkInfo::Fuchsia(fidl::new_empty!(FuchsiaNetworkInfo, D));
2979                    }
2980                    #[allow(irrefutable_let_patterns)]
2981                    if let NetworkInfo::Fuchsia(ref mut val) = self {
2982                        fidl::decode!(FuchsiaNetworkInfo, D, val, decoder, _inner_offset, depth)?;
2983                    } else {
2984                        unreachable!()
2985                    }
2986                }
2987                #[allow(deprecated)]
2988                ordinal => {
2989                    for _ in 0..num_handles {
2990                        decoder.drop_next_handle()?;
2991                    }
2992                    *self = NetworkInfo::__SourceBreaking { unknown_ordinal: ordinal };
2993                }
2994            }
2995            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2996                return Err(fidl::Error::InvalidNumBytesInEnvelope);
2997            }
2998            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2999                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3000            }
3001            Ok(())
3002        }
3003    }
3004}