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