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