fidl_fuchsia_net_settings__common/
fidl_fuchsia_net_settings__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
11pub type Interface = fidl_fuchsia_net_interfaces_admin__common::Configuration;
12
13/// Errors exposed when changing settings via [`Control`].
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub enum UpdateError {
16    /// Indicates that a zero value was provided for a field that must be
17    /// nonzero.
18    IllegalZeroValue,
19    /// Indicates that a negative value was provided for a field that must
20    /// be non-negative.
21    IllegalNegativeValue,
22    /// Indicates that a configured value is out of the allowed range.
23    OutOfRange,
24    /// Requested setting is not supported.
25    NotSupported,
26    #[doc(hidden)]
27    __SourceBreaking { unknown_ordinal: u32 },
28}
29
30/// Pattern that matches an unknown `UpdateError` member.
31#[macro_export]
32macro_rules! UpdateErrorUnknown {
33    () => {
34        _
35    };
36}
37
38impl UpdateError {
39    #[inline]
40    pub fn from_primitive(prim: u32) -> Option<Self> {
41        match prim {
42            1 => Some(Self::IllegalZeroValue),
43            2 => Some(Self::IllegalNegativeValue),
44            3 => Some(Self::OutOfRange),
45            4 => Some(Self::NotSupported),
46            _ => None,
47        }
48    }
49
50    #[inline]
51    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
52        match prim {
53            1 => Self::IllegalZeroValue,
54            2 => Self::IllegalNegativeValue,
55            3 => Self::OutOfRange,
56            4 => Self::NotSupported,
57            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
58        }
59    }
60
61    #[inline]
62    pub fn unknown() -> Self {
63        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
64    }
65
66    #[inline]
67    pub const fn into_primitive(self) -> u32 {
68        match self {
69            Self::IllegalZeroValue => 1,
70            Self::IllegalNegativeValue => 2,
71            Self::OutOfRange => 3,
72            Self::NotSupported => 4,
73            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
74        }
75    }
76
77    #[inline]
78    pub fn is_unknown(&self) -> bool {
79        match self {
80            Self::__SourceBreaking { unknown_ordinal: _ } => true,
81            _ => false,
82        }
83    }
84}
85
86/// Device layer settings.
87#[derive(Clone, Debug, Default, PartialEq)]
88pub struct Device {
89    /// Controls the buffer sizes for packet (a.k.a device) sockets.
90    pub packet_buffer_sizes: Option<SocketBufferSizes>,
91    #[doc(hidden)]
92    pub __source_breaking: fidl::marker::SourceBreaking,
93}
94
95impl fidl::Persistable for Device {}
96
97/// ICMP protocol settings.
98#[derive(Clone, Debug, Default, PartialEq)]
99pub struct Icmp {
100    /// Controls the ICMP echo socket buffer sizes.
101    pub echo_buffer_sizes: Option<SocketBufferSizes>,
102    /// ICMPv4 configs.
103    pub icmpv4: Option<Icmpv4>,
104    /// ICMPv6 configs.
105    pub icmpv6: Option<Icmpv6>,
106    #[doc(hidden)]
107    pub __source_breaking: fidl::marker::SourceBreaking,
108}
109
110impl fidl::Persistable for Icmp {}
111
112/// ICMPv4 protocol settings.
113#[derive(Clone, Debug, Default, PartialEq)]
114pub struct Icmpv4 {
115    #[doc(hidden)]
116    pub __source_breaking: fidl::marker::SourceBreaking,
117}
118
119impl fidl::Persistable for Icmpv4 {}
120
121/// ICMPv6 protocol settings.
122#[derive(Clone, Debug, Default, PartialEq)]
123pub struct Icmpv6 {
124    #[doc(hidden)]
125    pub __source_breaking: fidl::marker::SourceBreaking,
126}
127
128impl fidl::Persistable for Icmpv6 {}
129
130/// IP protocol settings.
131#[derive(Clone, Debug, Default, PartialEq)]
132pub struct Ip {
133    /// Controls raw IP socket buffer sizes.
134    pub raw_buffer_sizes: Option<SocketBufferSizes>,
135    /// IPv4 configs.
136    pub ipv4: Option<Ipv4>,
137    /// IPv6 configs.
138    pub ipv6: Option<Ipv6>,
139    #[doc(hidden)]
140    pub __source_breaking: fidl::marker::SourceBreaking,
141}
142
143impl fidl::Persistable for Ip {}
144
145/// IPv4 protocol settings.
146#[derive(Clone, Debug, Default, PartialEq)]
147pub struct Ipv4 {
148    #[doc(hidden)]
149    pub __source_breaking: fidl::marker::SourceBreaking,
150}
151
152impl fidl::Persistable for Ipv4 {}
153
154/// IPv6 protocol settings.
155#[derive(Clone, Debug, Default, PartialEq)]
156pub struct Ipv6 {
157    #[doc(hidden)]
158    pub __source_breaking: fidl::marker::SourceBreaking,
159}
160
161impl fidl::Persistable for Ipv6 {}
162
163/// Socket buffer size range settings.
164#[derive(Clone, Debug, Default, PartialEq)]
165pub struct SocketBufferSizeRange {
166    /// The maximum allowed buffer size.
167    ///
168    /// Must be nonzero and greater than or equal to `min`.
169    pub max: Option<u32>,
170    /// The default buffer size for newly created sockets.
171    ///
172    /// When updating, must be between `min` and `max`.
173    ///
174    /// Must be nonzero.
175    pub default: Option<u32>,
176    /// The minimum allowed buffer size.
177    ///
178    /// Must be nonzero and less than or equal to `max`.
179    pub min: Option<u32>,
180    #[doc(hidden)]
181    pub __source_breaking: fidl::marker::SourceBreaking,
182}
183
184impl fidl::Persistable for SocketBufferSizeRange {}
185
186/// Settings for socket buffer sizes.
187#[derive(Clone, Debug, Default, PartialEq)]
188pub struct SocketBufferSizes {
189    /// Send buffer sizes settings.
190    pub send: Option<SocketBufferSizeRange>,
191    /// Receive buffer sizes settings.
192    pub receive: Option<SocketBufferSizeRange>,
193    #[doc(hidden)]
194    pub __source_breaking: fidl::marker::SourceBreaking,
195}
196
197impl fidl::Persistable for SocketBufferSizes {}
198
199/// TCP protocol settings.
200#[derive(Clone, Debug, Default, PartialEq)]
201pub struct Tcp {
202    /// Controls TCP socket buffer sizes.
203    pub buffer_sizes: Option<SocketBufferSizes>,
204    #[doc(hidden)]
205    pub __source_breaking: fidl::marker::SourceBreaking,
206}
207
208impl fidl::Persistable for Tcp {}
209
210/// UDP protocol settings.
211#[derive(Clone, Debug, Default, PartialEq)]
212pub struct Udp {
213    /// Controls UDP socket buffer sizes.
214    pub buffer_sizes: Option<SocketBufferSizes>,
215    #[doc(hidden)]
216    pub __source_breaking: fidl::marker::SourceBreaking,
217}
218
219impl fidl::Persistable for Udp {}
220
221pub mod control_ordinals {
222    pub const UPDATE_INTERFACE_DEFAULTS: u64 = 0x46ea2036390abecc;
223    pub const UPDATE_TCP: u64 = 0x4e768d74ec55450f;
224    pub const UPDATE_UDP: u64 = 0x6fb82be32e7338b4;
225    pub const UPDATE_ICMP: u64 = 0x42f130ff9cc3a8d5;
226    pub const UPDATE_IP: u64 = 0x75d1074407e4d1c4;
227    pub const UPDATE_DEVICE: u64 = 0x6080a91e617e9430;
228}
229
230pub mod state_ordinals {
231    pub const GET_INTERFACE_DEFAULTS: u64 = 0x4c4824a322a705e3;
232    pub const GET_TCP: u64 = 0x4e818d8a89985b70;
233    pub const GET_UDP: u64 = 0x1af3bc1507b7a196;
234    pub const GET_ICMP: u64 = 0x4079fd71ca65e33f;
235    pub const GET_IP: u64 = 0x2c1cc13f4874956;
236    pub const GET_DEVICE: u64 = 0x5713a85352e43887;
237}
238
239mod internal {
240    use super::*;
241    unsafe impl fidl::encoding::TypeMarker for UpdateError {
242        type Owned = Self;
243
244        #[inline(always)]
245        fn inline_align(_context: fidl::encoding::Context) -> usize {
246            std::mem::align_of::<u32>()
247        }
248
249        #[inline(always)]
250        fn inline_size(_context: fidl::encoding::Context) -> usize {
251            std::mem::size_of::<u32>()
252        }
253
254        #[inline(always)]
255        fn encode_is_copy() -> bool {
256            false
257        }
258
259        #[inline(always)]
260        fn decode_is_copy() -> bool {
261            false
262        }
263    }
264
265    impl fidl::encoding::ValueTypeMarker for UpdateError {
266        type Borrowed<'a> = Self;
267        #[inline(always)]
268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
269            *value
270        }
271    }
272
273    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for UpdateError {
274        #[inline]
275        unsafe fn encode(
276            self,
277            encoder: &mut fidl::encoding::Encoder<'_, D>,
278            offset: usize,
279            _depth: fidl::encoding::Depth,
280        ) -> fidl::Result<()> {
281            encoder.debug_check_bounds::<Self>(offset);
282            encoder.write_num(self.into_primitive(), offset);
283            Ok(())
284        }
285    }
286
287    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpdateError {
288        #[inline(always)]
289        fn new_empty() -> Self {
290            Self::unknown()
291        }
292
293        #[inline]
294        unsafe fn decode(
295            &mut self,
296            decoder: &mut fidl::encoding::Decoder<'_, D>,
297            offset: usize,
298            _depth: fidl::encoding::Depth,
299        ) -> fidl::Result<()> {
300            decoder.debug_check_bounds::<Self>(offset);
301            let prim = decoder.read_num::<u32>(offset);
302
303            *self = Self::from_primitive_allow_unknown(prim);
304            Ok(())
305        }
306    }
307
308    impl Device {
309        #[inline(always)]
310        fn max_ordinal_present(&self) -> u64 {
311            if let Some(_) = self.packet_buffer_sizes {
312                return 1;
313            }
314            0
315        }
316    }
317
318    impl fidl::encoding::ValueTypeMarker for Device {
319        type Borrowed<'a> = &'a Self;
320        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
321            value
322        }
323    }
324
325    unsafe impl fidl::encoding::TypeMarker for Device {
326        type Owned = Self;
327
328        #[inline(always)]
329        fn inline_align(_context: fidl::encoding::Context) -> usize {
330            8
331        }
332
333        #[inline(always)]
334        fn inline_size(_context: fidl::encoding::Context) -> usize {
335            16
336        }
337    }
338
339    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Device, D> for &Device {
340        unsafe fn encode(
341            self,
342            encoder: &mut fidl::encoding::Encoder<'_, D>,
343            offset: usize,
344            mut depth: fidl::encoding::Depth,
345        ) -> fidl::Result<()> {
346            encoder.debug_check_bounds::<Device>(offset);
347            // Vector header
348            let max_ordinal: u64 = self.max_ordinal_present();
349            encoder.write_num(max_ordinal, offset);
350            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
351            // Calling encoder.out_of_line_offset(0) is not allowed.
352            if max_ordinal == 0 {
353                return Ok(());
354            }
355            depth.increment()?;
356            let envelope_size = 8;
357            let bytes_len = max_ordinal as usize * envelope_size;
358            #[allow(unused_variables)]
359            let offset = encoder.out_of_line_offset(bytes_len);
360            let mut _prev_end_offset: usize = 0;
361            if 1 > max_ordinal {
362                return Ok(());
363            }
364
365            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
366            // are envelope_size bytes.
367            let cur_offset: usize = (1 - 1) * envelope_size;
368
369            // Zero reserved fields.
370            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
371
372            // Safety:
373            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
374            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
375            //   envelope_size bytes, there is always sufficient room.
376            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizes, D>(
377                self.packet_buffer_sizes
378                    .as_ref()
379                    .map(<SocketBufferSizes as fidl::encoding::ValueTypeMarker>::borrow),
380                encoder,
381                offset + cur_offset,
382                depth,
383            )?;
384
385            _prev_end_offset = cur_offset + envelope_size;
386
387            Ok(())
388        }
389    }
390
391    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Device {
392        #[inline(always)]
393        fn new_empty() -> Self {
394            Self::default()
395        }
396
397        unsafe fn decode(
398            &mut self,
399            decoder: &mut fidl::encoding::Decoder<'_, D>,
400            offset: usize,
401            mut depth: fidl::encoding::Depth,
402        ) -> fidl::Result<()> {
403            decoder.debug_check_bounds::<Self>(offset);
404            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
405                None => return Err(fidl::Error::NotNullable),
406                Some(len) => len,
407            };
408            // Calling decoder.out_of_line_offset(0) is not allowed.
409            if len == 0 {
410                return Ok(());
411            };
412            depth.increment()?;
413            let envelope_size = 8;
414            let bytes_len = len * envelope_size;
415            let offset = decoder.out_of_line_offset(bytes_len)?;
416            // Decode the envelope for each type.
417            let mut _next_ordinal_to_read = 0;
418            let mut next_offset = offset;
419            let end_offset = offset + bytes_len;
420            _next_ordinal_to_read += 1;
421            if next_offset >= end_offset {
422                return Ok(());
423            }
424
425            // Decode unknown envelopes for gaps in ordinals.
426            while _next_ordinal_to_read < 1 {
427                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
428                _next_ordinal_to_read += 1;
429                next_offset += envelope_size;
430            }
431
432            let next_out_of_line = decoder.next_out_of_line();
433            let handles_before = decoder.remaining_handles();
434            if let Some((inlined, num_bytes, num_handles)) =
435                fidl::encoding::decode_envelope_header(decoder, next_offset)?
436            {
437                let member_inline_size =
438                    <SocketBufferSizes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
439                if inlined != (member_inline_size <= 4) {
440                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
441                }
442                let inner_offset;
443                let mut inner_depth = depth.clone();
444                if inlined {
445                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
446                    inner_offset = next_offset;
447                } else {
448                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
449                    inner_depth.increment()?;
450                }
451                let val_ref = self
452                    .packet_buffer_sizes
453                    .get_or_insert_with(|| fidl::new_empty!(SocketBufferSizes, D));
454                fidl::decode!(SocketBufferSizes, D, val_ref, decoder, inner_offset, inner_depth)?;
455                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
456                {
457                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
458                }
459                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
460                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
461                }
462            }
463
464            next_offset += envelope_size;
465
466            // Decode the remaining unknown envelopes.
467            while next_offset < end_offset {
468                _next_ordinal_to_read += 1;
469                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
470                next_offset += envelope_size;
471            }
472
473            Ok(())
474        }
475    }
476
477    impl Icmp {
478        #[inline(always)]
479        fn max_ordinal_present(&self) -> u64 {
480            if let Some(_) = self.icmpv6 {
481                return 3;
482            }
483            if let Some(_) = self.icmpv4 {
484                return 2;
485            }
486            if let Some(_) = self.echo_buffer_sizes {
487                return 1;
488            }
489            0
490        }
491    }
492
493    impl fidl::encoding::ValueTypeMarker for Icmp {
494        type Borrowed<'a> = &'a Self;
495        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
496            value
497        }
498    }
499
500    unsafe impl fidl::encoding::TypeMarker for Icmp {
501        type Owned = Self;
502
503        #[inline(always)]
504        fn inline_align(_context: fidl::encoding::Context) -> usize {
505            8
506        }
507
508        #[inline(always)]
509        fn inline_size(_context: fidl::encoding::Context) -> usize {
510            16
511        }
512    }
513
514    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Icmp, D> for &Icmp {
515        unsafe fn encode(
516            self,
517            encoder: &mut fidl::encoding::Encoder<'_, D>,
518            offset: usize,
519            mut depth: fidl::encoding::Depth,
520        ) -> fidl::Result<()> {
521            encoder.debug_check_bounds::<Icmp>(offset);
522            // Vector header
523            let max_ordinal: u64 = self.max_ordinal_present();
524            encoder.write_num(max_ordinal, offset);
525            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
526            // Calling encoder.out_of_line_offset(0) is not allowed.
527            if max_ordinal == 0 {
528                return Ok(());
529            }
530            depth.increment()?;
531            let envelope_size = 8;
532            let bytes_len = max_ordinal as usize * envelope_size;
533            #[allow(unused_variables)]
534            let offset = encoder.out_of_line_offset(bytes_len);
535            let mut _prev_end_offset: usize = 0;
536            if 1 > max_ordinal {
537                return Ok(());
538            }
539
540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
541            // are envelope_size bytes.
542            let cur_offset: usize = (1 - 1) * envelope_size;
543
544            // Zero reserved fields.
545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
546
547            // Safety:
548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
550            //   envelope_size bytes, there is always sufficient room.
551            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizes, D>(
552                self.echo_buffer_sizes
553                    .as_ref()
554                    .map(<SocketBufferSizes as fidl::encoding::ValueTypeMarker>::borrow),
555                encoder,
556                offset + cur_offset,
557                depth,
558            )?;
559
560            _prev_end_offset = cur_offset + envelope_size;
561            if 2 > max_ordinal {
562                return Ok(());
563            }
564
565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
566            // are envelope_size bytes.
567            let cur_offset: usize = (2 - 1) * envelope_size;
568
569            // Zero reserved fields.
570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
571
572            // Safety:
573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
575            //   envelope_size bytes, there is always sufficient room.
576            fidl::encoding::encode_in_envelope_optional::<Icmpv4, D>(
577                self.icmpv4.as_ref().map(<Icmpv4 as fidl::encoding::ValueTypeMarker>::borrow),
578                encoder,
579                offset + cur_offset,
580                depth,
581            )?;
582
583            _prev_end_offset = cur_offset + envelope_size;
584            if 3 > max_ordinal {
585                return Ok(());
586            }
587
588            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
589            // are envelope_size bytes.
590            let cur_offset: usize = (3 - 1) * envelope_size;
591
592            // Zero reserved fields.
593            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
594
595            // Safety:
596            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
597            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
598            //   envelope_size bytes, there is always sufficient room.
599            fidl::encoding::encode_in_envelope_optional::<Icmpv6, D>(
600                self.icmpv6.as_ref().map(<Icmpv6 as fidl::encoding::ValueTypeMarker>::borrow),
601                encoder,
602                offset + cur_offset,
603                depth,
604            )?;
605
606            _prev_end_offset = cur_offset + envelope_size;
607
608            Ok(())
609        }
610    }
611
612    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Icmp {
613        #[inline(always)]
614        fn new_empty() -> Self {
615            Self::default()
616        }
617
618        unsafe fn decode(
619            &mut self,
620            decoder: &mut fidl::encoding::Decoder<'_, D>,
621            offset: usize,
622            mut depth: fidl::encoding::Depth,
623        ) -> fidl::Result<()> {
624            decoder.debug_check_bounds::<Self>(offset);
625            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
626                None => return Err(fidl::Error::NotNullable),
627                Some(len) => len,
628            };
629            // Calling decoder.out_of_line_offset(0) is not allowed.
630            if len == 0 {
631                return Ok(());
632            };
633            depth.increment()?;
634            let envelope_size = 8;
635            let bytes_len = len * envelope_size;
636            let offset = decoder.out_of_line_offset(bytes_len)?;
637            // Decode the envelope for each type.
638            let mut _next_ordinal_to_read = 0;
639            let mut next_offset = offset;
640            let end_offset = offset + bytes_len;
641            _next_ordinal_to_read += 1;
642            if next_offset >= end_offset {
643                return Ok(());
644            }
645
646            // Decode unknown envelopes for gaps in ordinals.
647            while _next_ordinal_to_read < 1 {
648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
649                _next_ordinal_to_read += 1;
650                next_offset += envelope_size;
651            }
652
653            let next_out_of_line = decoder.next_out_of_line();
654            let handles_before = decoder.remaining_handles();
655            if let Some((inlined, num_bytes, num_handles)) =
656                fidl::encoding::decode_envelope_header(decoder, next_offset)?
657            {
658                let member_inline_size =
659                    <SocketBufferSizes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
660                if inlined != (member_inline_size <= 4) {
661                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
662                }
663                let inner_offset;
664                let mut inner_depth = depth.clone();
665                if inlined {
666                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
667                    inner_offset = next_offset;
668                } else {
669                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
670                    inner_depth.increment()?;
671                }
672                let val_ref = self
673                    .echo_buffer_sizes
674                    .get_or_insert_with(|| fidl::new_empty!(SocketBufferSizes, D));
675                fidl::decode!(SocketBufferSizes, D, val_ref, decoder, inner_offset, inner_depth)?;
676                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
677                {
678                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
679                }
680                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
681                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
682                }
683            }
684
685            next_offset += envelope_size;
686            _next_ordinal_to_read += 1;
687            if next_offset >= end_offset {
688                return Ok(());
689            }
690
691            // Decode unknown envelopes for gaps in ordinals.
692            while _next_ordinal_to_read < 2 {
693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
694                _next_ordinal_to_read += 1;
695                next_offset += envelope_size;
696            }
697
698            let next_out_of_line = decoder.next_out_of_line();
699            let handles_before = decoder.remaining_handles();
700            if let Some((inlined, num_bytes, num_handles)) =
701                fidl::encoding::decode_envelope_header(decoder, next_offset)?
702            {
703                let member_inline_size =
704                    <Icmpv4 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
705                if inlined != (member_inline_size <= 4) {
706                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
707                }
708                let inner_offset;
709                let mut inner_depth = depth.clone();
710                if inlined {
711                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
712                    inner_offset = next_offset;
713                } else {
714                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
715                    inner_depth.increment()?;
716                }
717                let val_ref = self.icmpv4.get_or_insert_with(|| fidl::new_empty!(Icmpv4, D));
718                fidl::decode!(Icmpv4, D, val_ref, decoder, inner_offset, inner_depth)?;
719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
720                {
721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
722                }
723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
725                }
726            }
727
728            next_offset += envelope_size;
729            _next_ordinal_to_read += 1;
730            if next_offset >= end_offset {
731                return Ok(());
732            }
733
734            // Decode unknown envelopes for gaps in ordinals.
735            while _next_ordinal_to_read < 3 {
736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
737                _next_ordinal_to_read += 1;
738                next_offset += envelope_size;
739            }
740
741            let next_out_of_line = decoder.next_out_of_line();
742            let handles_before = decoder.remaining_handles();
743            if let Some((inlined, num_bytes, num_handles)) =
744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
745            {
746                let member_inline_size =
747                    <Icmpv6 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
748                if inlined != (member_inline_size <= 4) {
749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
750                }
751                let inner_offset;
752                let mut inner_depth = depth.clone();
753                if inlined {
754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
755                    inner_offset = next_offset;
756                } else {
757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
758                    inner_depth.increment()?;
759                }
760                let val_ref = self.icmpv6.get_or_insert_with(|| fidl::new_empty!(Icmpv6, D));
761                fidl::decode!(Icmpv6, D, val_ref, decoder, inner_offset, inner_depth)?;
762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
763                {
764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
765                }
766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
768                }
769            }
770
771            next_offset += envelope_size;
772
773            // Decode the remaining unknown envelopes.
774            while next_offset < end_offset {
775                _next_ordinal_to_read += 1;
776                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
777                next_offset += envelope_size;
778            }
779
780            Ok(())
781        }
782    }
783
784    impl Icmpv4 {
785        #[inline(always)]
786        fn max_ordinal_present(&self) -> u64 {
787            0
788        }
789    }
790
791    impl fidl::encoding::ValueTypeMarker for Icmpv4 {
792        type Borrowed<'a> = &'a Self;
793        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
794            value
795        }
796    }
797
798    unsafe impl fidl::encoding::TypeMarker for Icmpv4 {
799        type Owned = Self;
800
801        #[inline(always)]
802        fn inline_align(_context: fidl::encoding::Context) -> usize {
803            8
804        }
805
806        #[inline(always)]
807        fn inline_size(_context: fidl::encoding::Context) -> usize {
808            16
809        }
810    }
811
812    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Icmpv4, D> for &Icmpv4 {
813        unsafe fn encode(
814            self,
815            encoder: &mut fidl::encoding::Encoder<'_, D>,
816            offset: usize,
817            mut depth: fidl::encoding::Depth,
818        ) -> fidl::Result<()> {
819            encoder.debug_check_bounds::<Icmpv4>(offset);
820            // Vector header
821            let max_ordinal: u64 = self.max_ordinal_present();
822            encoder.write_num(max_ordinal, offset);
823            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
824            // Calling encoder.out_of_line_offset(0) is not allowed.
825            if max_ordinal == 0 {
826                return Ok(());
827            }
828            depth.increment()?;
829            let envelope_size = 8;
830            let bytes_len = max_ordinal as usize * envelope_size;
831            #[allow(unused_variables)]
832            let offset = encoder.out_of_line_offset(bytes_len);
833            let mut _prev_end_offset: usize = 0;
834
835            Ok(())
836        }
837    }
838
839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Icmpv4 {
840        #[inline(always)]
841        fn new_empty() -> Self {
842            Self::default()
843        }
844
845        unsafe fn decode(
846            &mut self,
847            decoder: &mut fidl::encoding::Decoder<'_, D>,
848            offset: usize,
849            mut depth: fidl::encoding::Depth,
850        ) -> fidl::Result<()> {
851            decoder.debug_check_bounds::<Self>(offset);
852            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
853                None => return Err(fidl::Error::NotNullable),
854                Some(len) => len,
855            };
856            // Calling decoder.out_of_line_offset(0) is not allowed.
857            if len == 0 {
858                return Ok(());
859            };
860            depth.increment()?;
861            let envelope_size = 8;
862            let bytes_len = len * envelope_size;
863            let offset = decoder.out_of_line_offset(bytes_len)?;
864            // Decode the envelope for each type.
865            let mut _next_ordinal_to_read = 0;
866            let mut next_offset = offset;
867            let end_offset = offset + bytes_len;
868
869            // Decode the remaining unknown envelopes.
870            while next_offset < end_offset {
871                _next_ordinal_to_read += 1;
872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
873                next_offset += envelope_size;
874            }
875
876            Ok(())
877        }
878    }
879
880    impl Icmpv6 {
881        #[inline(always)]
882        fn max_ordinal_present(&self) -> u64 {
883            0
884        }
885    }
886
887    impl fidl::encoding::ValueTypeMarker for Icmpv6 {
888        type Borrowed<'a> = &'a Self;
889        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
890            value
891        }
892    }
893
894    unsafe impl fidl::encoding::TypeMarker for Icmpv6 {
895        type Owned = Self;
896
897        #[inline(always)]
898        fn inline_align(_context: fidl::encoding::Context) -> usize {
899            8
900        }
901
902        #[inline(always)]
903        fn inline_size(_context: fidl::encoding::Context) -> usize {
904            16
905        }
906    }
907
908    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Icmpv6, D> for &Icmpv6 {
909        unsafe fn encode(
910            self,
911            encoder: &mut fidl::encoding::Encoder<'_, D>,
912            offset: usize,
913            mut depth: fidl::encoding::Depth,
914        ) -> fidl::Result<()> {
915            encoder.debug_check_bounds::<Icmpv6>(offset);
916            // Vector header
917            let max_ordinal: u64 = self.max_ordinal_present();
918            encoder.write_num(max_ordinal, offset);
919            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
920            // Calling encoder.out_of_line_offset(0) is not allowed.
921            if max_ordinal == 0 {
922                return Ok(());
923            }
924            depth.increment()?;
925            let envelope_size = 8;
926            let bytes_len = max_ordinal as usize * envelope_size;
927            #[allow(unused_variables)]
928            let offset = encoder.out_of_line_offset(bytes_len);
929            let mut _prev_end_offset: usize = 0;
930
931            Ok(())
932        }
933    }
934
935    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Icmpv6 {
936        #[inline(always)]
937        fn new_empty() -> Self {
938            Self::default()
939        }
940
941        unsafe fn decode(
942            &mut self,
943            decoder: &mut fidl::encoding::Decoder<'_, D>,
944            offset: usize,
945            mut depth: fidl::encoding::Depth,
946        ) -> fidl::Result<()> {
947            decoder.debug_check_bounds::<Self>(offset);
948            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
949                None => return Err(fidl::Error::NotNullable),
950                Some(len) => len,
951            };
952            // Calling decoder.out_of_line_offset(0) is not allowed.
953            if len == 0 {
954                return Ok(());
955            };
956            depth.increment()?;
957            let envelope_size = 8;
958            let bytes_len = len * envelope_size;
959            let offset = decoder.out_of_line_offset(bytes_len)?;
960            // Decode the envelope for each type.
961            let mut _next_ordinal_to_read = 0;
962            let mut next_offset = offset;
963            let end_offset = offset + bytes_len;
964
965            // Decode the remaining unknown envelopes.
966            while next_offset < end_offset {
967                _next_ordinal_to_read += 1;
968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
969                next_offset += envelope_size;
970            }
971
972            Ok(())
973        }
974    }
975
976    impl Ip {
977        #[inline(always)]
978        fn max_ordinal_present(&self) -> u64 {
979            if let Some(_) = self.ipv6 {
980                return 3;
981            }
982            if let Some(_) = self.ipv4 {
983                return 2;
984            }
985            if let Some(_) = self.raw_buffer_sizes {
986                return 1;
987            }
988            0
989        }
990    }
991
992    impl fidl::encoding::ValueTypeMarker for Ip {
993        type Borrowed<'a> = &'a Self;
994        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
995            value
996        }
997    }
998
999    unsafe impl fidl::encoding::TypeMarker for Ip {
1000        type Owned = Self;
1001
1002        #[inline(always)]
1003        fn inline_align(_context: fidl::encoding::Context) -> usize {
1004            8
1005        }
1006
1007        #[inline(always)]
1008        fn inline_size(_context: fidl::encoding::Context) -> usize {
1009            16
1010        }
1011    }
1012
1013    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ip, D> for &Ip {
1014        unsafe fn encode(
1015            self,
1016            encoder: &mut fidl::encoding::Encoder<'_, D>,
1017            offset: usize,
1018            mut depth: fidl::encoding::Depth,
1019        ) -> fidl::Result<()> {
1020            encoder.debug_check_bounds::<Ip>(offset);
1021            // Vector header
1022            let max_ordinal: u64 = self.max_ordinal_present();
1023            encoder.write_num(max_ordinal, offset);
1024            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1025            // Calling encoder.out_of_line_offset(0) is not allowed.
1026            if max_ordinal == 0 {
1027                return Ok(());
1028            }
1029            depth.increment()?;
1030            let envelope_size = 8;
1031            let bytes_len = max_ordinal as usize * envelope_size;
1032            #[allow(unused_variables)]
1033            let offset = encoder.out_of_line_offset(bytes_len);
1034            let mut _prev_end_offset: usize = 0;
1035            if 1 > max_ordinal {
1036                return Ok(());
1037            }
1038
1039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1040            // are envelope_size bytes.
1041            let cur_offset: usize = (1 - 1) * envelope_size;
1042
1043            // Zero reserved fields.
1044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1045
1046            // Safety:
1047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1049            //   envelope_size bytes, there is always sufficient room.
1050            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizes, D>(
1051                self.raw_buffer_sizes
1052                    .as_ref()
1053                    .map(<SocketBufferSizes as fidl::encoding::ValueTypeMarker>::borrow),
1054                encoder,
1055                offset + cur_offset,
1056                depth,
1057            )?;
1058
1059            _prev_end_offset = cur_offset + envelope_size;
1060            if 2 > max_ordinal {
1061                return Ok(());
1062            }
1063
1064            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1065            // are envelope_size bytes.
1066            let cur_offset: usize = (2 - 1) * envelope_size;
1067
1068            // Zero reserved fields.
1069            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1070
1071            // Safety:
1072            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1073            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1074            //   envelope_size bytes, there is always sufficient room.
1075            fidl::encoding::encode_in_envelope_optional::<Ipv4, D>(
1076                self.ipv4.as_ref().map(<Ipv4 as fidl::encoding::ValueTypeMarker>::borrow),
1077                encoder,
1078                offset + cur_offset,
1079                depth,
1080            )?;
1081
1082            _prev_end_offset = cur_offset + envelope_size;
1083            if 3 > max_ordinal {
1084                return Ok(());
1085            }
1086
1087            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1088            // are envelope_size bytes.
1089            let cur_offset: usize = (3 - 1) * envelope_size;
1090
1091            // Zero reserved fields.
1092            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1093
1094            // Safety:
1095            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1096            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1097            //   envelope_size bytes, there is always sufficient room.
1098            fidl::encoding::encode_in_envelope_optional::<Ipv6, D>(
1099                self.ipv6.as_ref().map(<Ipv6 as fidl::encoding::ValueTypeMarker>::borrow),
1100                encoder,
1101                offset + cur_offset,
1102                depth,
1103            )?;
1104
1105            _prev_end_offset = cur_offset + envelope_size;
1106
1107            Ok(())
1108        }
1109    }
1110
1111    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ip {
1112        #[inline(always)]
1113        fn new_empty() -> Self {
1114            Self::default()
1115        }
1116
1117        unsafe fn decode(
1118            &mut self,
1119            decoder: &mut fidl::encoding::Decoder<'_, D>,
1120            offset: usize,
1121            mut depth: fidl::encoding::Depth,
1122        ) -> fidl::Result<()> {
1123            decoder.debug_check_bounds::<Self>(offset);
1124            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1125                None => return Err(fidl::Error::NotNullable),
1126                Some(len) => len,
1127            };
1128            // Calling decoder.out_of_line_offset(0) is not allowed.
1129            if len == 0 {
1130                return Ok(());
1131            };
1132            depth.increment()?;
1133            let envelope_size = 8;
1134            let bytes_len = len * envelope_size;
1135            let offset = decoder.out_of_line_offset(bytes_len)?;
1136            // Decode the envelope for each type.
1137            let mut _next_ordinal_to_read = 0;
1138            let mut next_offset = offset;
1139            let end_offset = offset + bytes_len;
1140            _next_ordinal_to_read += 1;
1141            if next_offset >= end_offset {
1142                return Ok(());
1143            }
1144
1145            // Decode unknown envelopes for gaps in ordinals.
1146            while _next_ordinal_to_read < 1 {
1147                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1148                _next_ordinal_to_read += 1;
1149                next_offset += envelope_size;
1150            }
1151
1152            let next_out_of_line = decoder.next_out_of_line();
1153            let handles_before = decoder.remaining_handles();
1154            if let Some((inlined, num_bytes, num_handles)) =
1155                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1156            {
1157                let member_inline_size =
1158                    <SocketBufferSizes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1159                if inlined != (member_inline_size <= 4) {
1160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1161                }
1162                let inner_offset;
1163                let mut inner_depth = depth.clone();
1164                if inlined {
1165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1166                    inner_offset = next_offset;
1167                } else {
1168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1169                    inner_depth.increment()?;
1170                }
1171                let val_ref = self
1172                    .raw_buffer_sizes
1173                    .get_or_insert_with(|| fidl::new_empty!(SocketBufferSizes, D));
1174                fidl::decode!(SocketBufferSizes, D, val_ref, decoder, inner_offset, inner_depth)?;
1175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1176                {
1177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1178                }
1179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1181                }
1182            }
1183
1184            next_offset += envelope_size;
1185            _next_ordinal_to_read += 1;
1186            if next_offset >= end_offset {
1187                return Ok(());
1188            }
1189
1190            // Decode unknown envelopes for gaps in ordinals.
1191            while _next_ordinal_to_read < 2 {
1192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1193                _next_ordinal_to_read += 1;
1194                next_offset += envelope_size;
1195            }
1196
1197            let next_out_of_line = decoder.next_out_of_line();
1198            let handles_before = decoder.remaining_handles();
1199            if let Some((inlined, num_bytes, num_handles)) =
1200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1201            {
1202                let member_inline_size =
1203                    <Ipv4 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1204                if inlined != (member_inline_size <= 4) {
1205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1206                }
1207                let inner_offset;
1208                let mut inner_depth = depth.clone();
1209                if inlined {
1210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1211                    inner_offset = next_offset;
1212                } else {
1213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1214                    inner_depth.increment()?;
1215                }
1216                let val_ref = self.ipv4.get_or_insert_with(|| fidl::new_empty!(Ipv4, D));
1217                fidl::decode!(Ipv4, D, val_ref, decoder, inner_offset, inner_depth)?;
1218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1219                {
1220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1221                }
1222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1224                }
1225            }
1226
1227            next_offset += envelope_size;
1228            _next_ordinal_to_read += 1;
1229            if next_offset >= end_offset {
1230                return Ok(());
1231            }
1232
1233            // Decode unknown envelopes for gaps in ordinals.
1234            while _next_ordinal_to_read < 3 {
1235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1236                _next_ordinal_to_read += 1;
1237                next_offset += envelope_size;
1238            }
1239
1240            let next_out_of_line = decoder.next_out_of_line();
1241            let handles_before = decoder.remaining_handles();
1242            if let Some((inlined, num_bytes, num_handles)) =
1243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1244            {
1245                let member_inline_size =
1246                    <Ipv6 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1247                if inlined != (member_inline_size <= 4) {
1248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1249                }
1250                let inner_offset;
1251                let mut inner_depth = depth.clone();
1252                if inlined {
1253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1254                    inner_offset = next_offset;
1255                } else {
1256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1257                    inner_depth.increment()?;
1258                }
1259                let val_ref = self.ipv6.get_or_insert_with(|| fidl::new_empty!(Ipv6, D));
1260                fidl::decode!(Ipv6, D, val_ref, decoder, inner_offset, inner_depth)?;
1261                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1262                {
1263                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1264                }
1265                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1266                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1267                }
1268            }
1269
1270            next_offset += envelope_size;
1271
1272            // Decode the remaining unknown envelopes.
1273            while next_offset < end_offset {
1274                _next_ordinal_to_read += 1;
1275                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1276                next_offset += envelope_size;
1277            }
1278
1279            Ok(())
1280        }
1281    }
1282
1283    impl Ipv4 {
1284        #[inline(always)]
1285        fn max_ordinal_present(&self) -> u64 {
1286            0
1287        }
1288    }
1289
1290    impl fidl::encoding::ValueTypeMarker for Ipv4 {
1291        type Borrowed<'a> = &'a Self;
1292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1293            value
1294        }
1295    }
1296
1297    unsafe impl fidl::encoding::TypeMarker for Ipv4 {
1298        type Owned = Self;
1299
1300        #[inline(always)]
1301        fn inline_align(_context: fidl::encoding::Context) -> usize {
1302            8
1303        }
1304
1305        #[inline(always)]
1306        fn inline_size(_context: fidl::encoding::Context) -> usize {
1307            16
1308        }
1309    }
1310
1311    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv4, D> for &Ipv4 {
1312        unsafe fn encode(
1313            self,
1314            encoder: &mut fidl::encoding::Encoder<'_, D>,
1315            offset: usize,
1316            mut depth: fidl::encoding::Depth,
1317        ) -> fidl::Result<()> {
1318            encoder.debug_check_bounds::<Ipv4>(offset);
1319            // Vector header
1320            let max_ordinal: u64 = self.max_ordinal_present();
1321            encoder.write_num(max_ordinal, offset);
1322            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1323            // Calling encoder.out_of_line_offset(0) is not allowed.
1324            if max_ordinal == 0 {
1325                return Ok(());
1326            }
1327            depth.increment()?;
1328            let envelope_size = 8;
1329            let bytes_len = max_ordinal as usize * envelope_size;
1330            #[allow(unused_variables)]
1331            let offset = encoder.out_of_line_offset(bytes_len);
1332            let mut _prev_end_offset: usize = 0;
1333
1334            Ok(())
1335        }
1336    }
1337
1338    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv4 {
1339        #[inline(always)]
1340        fn new_empty() -> Self {
1341            Self::default()
1342        }
1343
1344        unsafe fn decode(
1345            &mut self,
1346            decoder: &mut fidl::encoding::Decoder<'_, D>,
1347            offset: usize,
1348            mut depth: fidl::encoding::Depth,
1349        ) -> fidl::Result<()> {
1350            decoder.debug_check_bounds::<Self>(offset);
1351            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1352                None => return Err(fidl::Error::NotNullable),
1353                Some(len) => len,
1354            };
1355            // Calling decoder.out_of_line_offset(0) is not allowed.
1356            if len == 0 {
1357                return Ok(());
1358            };
1359            depth.increment()?;
1360            let envelope_size = 8;
1361            let bytes_len = len * envelope_size;
1362            let offset = decoder.out_of_line_offset(bytes_len)?;
1363            // Decode the envelope for each type.
1364            let mut _next_ordinal_to_read = 0;
1365            let mut next_offset = offset;
1366            let end_offset = offset + bytes_len;
1367
1368            // Decode the remaining unknown envelopes.
1369            while next_offset < end_offset {
1370                _next_ordinal_to_read += 1;
1371                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1372                next_offset += envelope_size;
1373            }
1374
1375            Ok(())
1376        }
1377    }
1378
1379    impl Ipv6 {
1380        #[inline(always)]
1381        fn max_ordinal_present(&self) -> u64 {
1382            0
1383        }
1384    }
1385
1386    impl fidl::encoding::ValueTypeMarker for Ipv6 {
1387        type Borrowed<'a> = &'a Self;
1388        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1389            value
1390        }
1391    }
1392
1393    unsafe impl fidl::encoding::TypeMarker for Ipv6 {
1394        type Owned = Self;
1395
1396        #[inline(always)]
1397        fn inline_align(_context: fidl::encoding::Context) -> usize {
1398            8
1399        }
1400
1401        #[inline(always)]
1402        fn inline_size(_context: fidl::encoding::Context) -> usize {
1403            16
1404        }
1405    }
1406
1407    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Ipv6, D> for &Ipv6 {
1408        unsafe fn encode(
1409            self,
1410            encoder: &mut fidl::encoding::Encoder<'_, D>,
1411            offset: usize,
1412            mut depth: fidl::encoding::Depth,
1413        ) -> fidl::Result<()> {
1414            encoder.debug_check_bounds::<Ipv6>(offset);
1415            // Vector header
1416            let max_ordinal: u64 = self.max_ordinal_present();
1417            encoder.write_num(max_ordinal, offset);
1418            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1419            // Calling encoder.out_of_line_offset(0) is not allowed.
1420            if max_ordinal == 0 {
1421                return Ok(());
1422            }
1423            depth.increment()?;
1424            let envelope_size = 8;
1425            let bytes_len = max_ordinal as usize * envelope_size;
1426            #[allow(unused_variables)]
1427            let offset = encoder.out_of_line_offset(bytes_len);
1428            let mut _prev_end_offset: usize = 0;
1429
1430            Ok(())
1431        }
1432    }
1433
1434    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Ipv6 {
1435        #[inline(always)]
1436        fn new_empty() -> Self {
1437            Self::default()
1438        }
1439
1440        unsafe fn decode(
1441            &mut self,
1442            decoder: &mut fidl::encoding::Decoder<'_, D>,
1443            offset: usize,
1444            mut depth: fidl::encoding::Depth,
1445        ) -> fidl::Result<()> {
1446            decoder.debug_check_bounds::<Self>(offset);
1447            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1448                None => return Err(fidl::Error::NotNullable),
1449                Some(len) => len,
1450            };
1451            // Calling decoder.out_of_line_offset(0) is not allowed.
1452            if len == 0 {
1453                return Ok(());
1454            };
1455            depth.increment()?;
1456            let envelope_size = 8;
1457            let bytes_len = len * envelope_size;
1458            let offset = decoder.out_of_line_offset(bytes_len)?;
1459            // Decode the envelope for each type.
1460            let mut _next_ordinal_to_read = 0;
1461            let mut next_offset = offset;
1462            let end_offset = offset + bytes_len;
1463
1464            // Decode the remaining unknown envelopes.
1465            while next_offset < end_offset {
1466                _next_ordinal_to_read += 1;
1467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1468                next_offset += envelope_size;
1469            }
1470
1471            Ok(())
1472        }
1473    }
1474
1475    impl SocketBufferSizeRange {
1476        #[inline(always)]
1477        fn max_ordinal_present(&self) -> u64 {
1478            if let Some(_) = self.min {
1479                return 3;
1480            }
1481            if let Some(_) = self.default {
1482                return 2;
1483            }
1484            if let Some(_) = self.max {
1485                return 1;
1486            }
1487            0
1488        }
1489    }
1490
1491    impl fidl::encoding::ValueTypeMarker for SocketBufferSizeRange {
1492        type Borrowed<'a> = &'a Self;
1493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1494            value
1495        }
1496    }
1497
1498    unsafe impl fidl::encoding::TypeMarker for SocketBufferSizeRange {
1499        type Owned = Self;
1500
1501        #[inline(always)]
1502        fn inline_align(_context: fidl::encoding::Context) -> usize {
1503            8
1504        }
1505
1506        #[inline(always)]
1507        fn inline_size(_context: fidl::encoding::Context) -> usize {
1508            16
1509        }
1510    }
1511
1512    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SocketBufferSizeRange, D>
1513        for &SocketBufferSizeRange
1514    {
1515        unsafe fn encode(
1516            self,
1517            encoder: &mut fidl::encoding::Encoder<'_, D>,
1518            offset: usize,
1519            mut depth: fidl::encoding::Depth,
1520        ) -> fidl::Result<()> {
1521            encoder.debug_check_bounds::<SocketBufferSizeRange>(offset);
1522            // Vector header
1523            let max_ordinal: u64 = self.max_ordinal_present();
1524            encoder.write_num(max_ordinal, offset);
1525            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1526            // Calling encoder.out_of_line_offset(0) is not allowed.
1527            if max_ordinal == 0 {
1528                return Ok(());
1529            }
1530            depth.increment()?;
1531            let envelope_size = 8;
1532            let bytes_len = max_ordinal as usize * envelope_size;
1533            #[allow(unused_variables)]
1534            let offset = encoder.out_of_line_offset(bytes_len);
1535            let mut _prev_end_offset: usize = 0;
1536            if 1 > max_ordinal {
1537                return Ok(());
1538            }
1539
1540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1541            // are envelope_size bytes.
1542            let cur_offset: usize = (1 - 1) * envelope_size;
1543
1544            // Zero reserved fields.
1545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1546
1547            // Safety:
1548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1550            //   envelope_size bytes, there is always sufficient room.
1551            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1552                self.max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1553                encoder,
1554                offset + cur_offset,
1555                depth,
1556            )?;
1557
1558            _prev_end_offset = cur_offset + envelope_size;
1559            if 2 > max_ordinal {
1560                return Ok(());
1561            }
1562
1563            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1564            // are envelope_size bytes.
1565            let cur_offset: usize = (2 - 1) * envelope_size;
1566
1567            // Zero reserved fields.
1568            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1569
1570            // Safety:
1571            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1572            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1573            //   envelope_size bytes, there is always sufficient room.
1574            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1575                self.default.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1576                encoder,
1577                offset + cur_offset,
1578                depth,
1579            )?;
1580
1581            _prev_end_offset = cur_offset + envelope_size;
1582            if 3 > max_ordinal {
1583                return Ok(());
1584            }
1585
1586            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1587            // are envelope_size bytes.
1588            let cur_offset: usize = (3 - 1) * envelope_size;
1589
1590            // Zero reserved fields.
1591            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1592
1593            // Safety:
1594            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1595            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1596            //   envelope_size bytes, there is always sufficient room.
1597            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1598                self.min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1599                encoder,
1600                offset + cur_offset,
1601                depth,
1602            )?;
1603
1604            _prev_end_offset = cur_offset + envelope_size;
1605
1606            Ok(())
1607        }
1608    }
1609
1610    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketBufferSizeRange {
1611        #[inline(always)]
1612        fn new_empty() -> Self {
1613            Self::default()
1614        }
1615
1616        unsafe fn decode(
1617            &mut self,
1618            decoder: &mut fidl::encoding::Decoder<'_, D>,
1619            offset: usize,
1620            mut depth: fidl::encoding::Depth,
1621        ) -> fidl::Result<()> {
1622            decoder.debug_check_bounds::<Self>(offset);
1623            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1624                None => return Err(fidl::Error::NotNullable),
1625                Some(len) => len,
1626            };
1627            // Calling decoder.out_of_line_offset(0) is not allowed.
1628            if len == 0 {
1629                return Ok(());
1630            };
1631            depth.increment()?;
1632            let envelope_size = 8;
1633            let bytes_len = len * envelope_size;
1634            let offset = decoder.out_of_line_offset(bytes_len)?;
1635            // Decode the envelope for each type.
1636            let mut _next_ordinal_to_read = 0;
1637            let mut next_offset = offset;
1638            let end_offset = offset + bytes_len;
1639            _next_ordinal_to_read += 1;
1640            if next_offset >= end_offset {
1641                return Ok(());
1642            }
1643
1644            // Decode unknown envelopes for gaps in ordinals.
1645            while _next_ordinal_to_read < 1 {
1646                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1647                _next_ordinal_to_read += 1;
1648                next_offset += envelope_size;
1649            }
1650
1651            let next_out_of_line = decoder.next_out_of_line();
1652            let handles_before = decoder.remaining_handles();
1653            if let Some((inlined, num_bytes, num_handles)) =
1654                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1655            {
1656                let member_inline_size =
1657                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1658                if inlined != (member_inline_size <= 4) {
1659                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1660                }
1661                let inner_offset;
1662                let mut inner_depth = depth.clone();
1663                if inlined {
1664                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1665                    inner_offset = next_offset;
1666                } else {
1667                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1668                    inner_depth.increment()?;
1669                }
1670                let val_ref = self.max.get_or_insert_with(|| fidl::new_empty!(u32, D));
1671                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1673                {
1674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1675                }
1676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1678                }
1679            }
1680
1681            next_offset += envelope_size;
1682            _next_ordinal_to_read += 1;
1683            if next_offset >= end_offset {
1684                return Ok(());
1685            }
1686
1687            // Decode unknown envelopes for gaps in ordinals.
1688            while _next_ordinal_to_read < 2 {
1689                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1690                _next_ordinal_to_read += 1;
1691                next_offset += envelope_size;
1692            }
1693
1694            let next_out_of_line = decoder.next_out_of_line();
1695            let handles_before = decoder.remaining_handles();
1696            if let Some((inlined, num_bytes, num_handles)) =
1697                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1698            {
1699                let member_inline_size =
1700                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1701                if inlined != (member_inline_size <= 4) {
1702                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1703                }
1704                let inner_offset;
1705                let mut inner_depth = depth.clone();
1706                if inlined {
1707                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1708                    inner_offset = next_offset;
1709                } else {
1710                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1711                    inner_depth.increment()?;
1712                }
1713                let val_ref = self.default.get_or_insert_with(|| fidl::new_empty!(u32, D));
1714                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1715                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1716                {
1717                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1718                }
1719                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1720                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1721                }
1722            }
1723
1724            next_offset += envelope_size;
1725            _next_ordinal_to_read += 1;
1726            if next_offset >= end_offset {
1727                return Ok(());
1728            }
1729
1730            // Decode unknown envelopes for gaps in ordinals.
1731            while _next_ordinal_to_read < 3 {
1732                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1733                _next_ordinal_to_read += 1;
1734                next_offset += envelope_size;
1735            }
1736
1737            let next_out_of_line = decoder.next_out_of_line();
1738            let handles_before = decoder.remaining_handles();
1739            if let Some((inlined, num_bytes, num_handles)) =
1740                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1741            {
1742                let member_inline_size =
1743                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1744                if inlined != (member_inline_size <= 4) {
1745                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1746                }
1747                let inner_offset;
1748                let mut inner_depth = depth.clone();
1749                if inlined {
1750                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1751                    inner_offset = next_offset;
1752                } else {
1753                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1754                    inner_depth.increment()?;
1755                }
1756                let val_ref = self.min.get_or_insert_with(|| fidl::new_empty!(u32, D));
1757                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1758                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1759                {
1760                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1761                }
1762                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1763                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1764                }
1765            }
1766
1767            next_offset += envelope_size;
1768
1769            // Decode the remaining unknown envelopes.
1770            while next_offset < end_offset {
1771                _next_ordinal_to_read += 1;
1772                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1773                next_offset += envelope_size;
1774            }
1775
1776            Ok(())
1777        }
1778    }
1779
1780    impl SocketBufferSizes {
1781        #[inline(always)]
1782        fn max_ordinal_present(&self) -> u64 {
1783            if let Some(_) = self.receive {
1784                return 2;
1785            }
1786            if let Some(_) = self.send {
1787                return 1;
1788            }
1789            0
1790        }
1791    }
1792
1793    impl fidl::encoding::ValueTypeMarker for SocketBufferSizes {
1794        type Borrowed<'a> = &'a Self;
1795        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1796            value
1797        }
1798    }
1799
1800    unsafe impl fidl::encoding::TypeMarker for SocketBufferSizes {
1801        type Owned = Self;
1802
1803        #[inline(always)]
1804        fn inline_align(_context: fidl::encoding::Context) -> usize {
1805            8
1806        }
1807
1808        #[inline(always)]
1809        fn inline_size(_context: fidl::encoding::Context) -> usize {
1810            16
1811        }
1812    }
1813
1814    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SocketBufferSizes, D>
1815        for &SocketBufferSizes
1816    {
1817        unsafe fn encode(
1818            self,
1819            encoder: &mut fidl::encoding::Encoder<'_, D>,
1820            offset: usize,
1821            mut depth: fidl::encoding::Depth,
1822        ) -> fidl::Result<()> {
1823            encoder.debug_check_bounds::<SocketBufferSizes>(offset);
1824            // Vector header
1825            let max_ordinal: u64 = self.max_ordinal_present();
1826            encoder.write_num(max_ordinal, offset);
1827            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1828            // Calling encoder.out_of_line_offset(0) is not allowed.
1829            if max_ordinal == 0 {
1830                return Ok(());
1831            }
1832            depth.increment()?;
1833            let envelope_size = 8;
1834            let bytes_len = max_ordinal as usize * envelope_size;
1835            #[allow(unused_variables)]
1836            let offset = encoder.out_of_line_offset(bytes_len);
1837            let mut _prev_end_offset: usize = 0;
1838            if 1 > max_ordinal {
1839                return Ok(());
1840            }
1841
1842            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1843            // are envelope_size bytes.
1844            let cur_offset: usize = (1 - 1) * envelope_size;
1845
1846            // Zero reserved fields.
1847            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1848
1849            // Safety:
1850            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1851            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1852            //   envelope_size bytes, there is always sufficient room.
1853            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizeRange, D>(
1854                self.send
1855                    .as_ref()
1856                    .map(<SocketBufferSizeRange as fidl::encoding::ValueTypeMarker>::borrow),
1857                encoder,
1858                offset + cur_offset,
1859                depth,
1860            )?;
1861
1862            _prev_end_offset = cur_offset + envelope_size;
1863            if 2 > max_ordinal {
1864                return Ok(());
1865            }
1866
1867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1868            // are envelope_size bytes.
1869            let cur_offset: usize = (2 - 1) * envelope_size;
1870
1871            // Zero reserved fields.
1872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1873
1874            // Safety:
1875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1877            //   envelope_size bytes, there is always sufficient room.
1878            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizeRange, D>(
1879                self.receive
1880                    .as_ref()
1881                    .map(<SocketBufferSizeRange as fidl::encoding::ValueTypeMarker>::borrow),
1882                encoder,
1883                offset + cur_offset,
1884                depth,
1885            )?;
1886
1887            _prev_end_offset = cur_offset + envelope_size;
1888
1889            Ok(())
1890        }
1891    }
1892
1893    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketBufferSizes {
1894        #[inline(always)]
1895        fn new_empty() -> Self {
1896            Self::default()
1897        }
1898
1899        unsafe fn decode(
1900            &mut self,
1901            decoder: &mut fidl::encoding::Decoder<'_, D>,
1902            offset: usize,
1903            mut depth: fidl::encoding::Depth,
1904        ) -> fidl::Result<()> {
1905            decoder.debug_check_bounds::<Self>(offset);
1906            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1907                None => return Err(fidl::Error::NotNullable),
1908                Some(len) => len,
1909            };
1910            // Calling decoder.out_of_line_offset(0) is not allowed.
1911            if len == 0 {
1912                return Ok(());
1913            };
1914            depth.increment()?;
1915            let envelope_size = 8;
1916            let bytes_len = len * envelope_size;
1917            let offset = decoder.out_of_line_offset(bytes_len)?;
1918            // Decode the envelope for each type.
1919            let mut _next_ordinal_to_read = 0;
1920            let mut next_offset = offset;
1921            let end_offset = offset + bytes_len;
1922            _next_ordinal_to_read += 1;
1923            if next_offset >= end_offset {
1924                return Ok(());
1925            }
1926
1927            // Decode unknown envelopes for gaps in ordinals.
1928            while _next_ordinal_to_read < 1 {
1929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1930                _next_ordinal_to_read += 1;
1931                next_offset += envelope_size;
1932            }
1933
1934            let next_out_of_line = decoder.next_out_of_line();
1935            let handles_before = decoder.remaining_handles();
1936            if let Some((inlined, num_bytes, num_handles)) =
1937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1938            {
1939                let member_inline_size =
1940                    <SocketBufferSizeRange as fidl::encoding::TypeMarker>::inline_size(
1941                        decoder.context,
1942                    );
1943                if inlined != (member_inline_size <= 4) {
1944                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1945                }
1946                let inner_offset;
1947                let mut inner_depth = depth.clone();
1948                if inlined {
1949                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1950                    inner_offset = next_offset;
1951                } else {
1952                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1953                    inner_depth.increment()?;
1954                }
1955                let val_ref =
1956                    self.send.get_or_insert_with(|| fidl::new_empty!(SocketBufferSizeRange, D));
1957                fidl::decode!(
1958                    SocketBufferSizeRange,
1959                    D,
1960                    val_ref,
1961                    decoder,
1962                    inner_offset,
1963                    inner_depth
1964                )?;
1965                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1966                {
1967                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1968                }
1969                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1970                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1971                }
1972            }
1973
1974            next_offset += envelope_size;
1975            _next_ordinal_to_read += 1;
1976            if next_offset >= end_offset {
1977                return Ok(());
1978            }
1979
1980            // Decode unknown envelopes for gaps in ordinals.
1981            while _next_ordinal_to_read < 2 {
1982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1983                _next_ordinal_to_read += 1;
1984                next_offset += envelope_size;
1985            }
1986
1987            let next_out_of_line = decoder.next_out_of_line();
1988            let handles_before = decoder.remaining_handles();
1989            if let Some((inlined, num_bytes, num_handles)) =
1990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1991            {
1992                let member_inline_size =
1993                    <SocketBufferSizeRange as fidl::encoding::TypeMarker>::inline_size(
1994                        decoder.context,
1995                    );
1996                if inlined != (member_inline_size <= 4) {
1997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1998                }
1999                let inner_offset;
2000                let mut inner_depth = depth.clone();
2001                if inlined {
2002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2003                    inner_offset = next_offset;
2004                } else {
2005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2006                    inner_depth.increment()?;
2007                }
2008                let val_ref =
2009                    self.receive.get_or_insert_with(|| fidl::new_empty!(SocketBufferSizeRange, D));
2010                fidl::decode!(
2011                    SocketBufferSizeRange,
2012                    D,
2013                    val_ref,
2014                    decoder,
2015                    inner_offset,
2016                    inner_depth
2017                )?;
2018                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2019                {
2020                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2021                }
2022                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2023                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2024                }
2025            }
2026
2027            next_offset += envelope_size;
2028
2029            // Decode the remaining unknown envelopes.
2030            while next_offset < end_offset {
2031                _next_ordinal_to_read += 1;
2032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2033                next_offset += envelope_size;
2034            }
2035
2036            Ok(())
2037        }
2038    }
2039
2040    impl Tcp {
2041        #[inline(always)]
2042        fn max_ordinal_present(&self) -> u64 {
2043            if let Some(_) = self.buffer_sizes {
2044                return 1;
2045            }
2046            0
2047        }
2048    }
2049
2050    impl fidl::encoding::ValueTypeMarker for Tcp {
2051        type Borrowed<'a> = &'a Self;
2052        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2053            value
2054        }
2055    }
2056
2057    unsafe impl fidl::encoding::TypeMarker for Tcp {
2058        type Owned = Self;
2059
2060        #[inline(always)]
2061        fn inline_align(_context: fidl::encoding::Context) -> usize {
2062            8
2063        }
2064
2065        #[inline(always)]
2066        fn inline_size(_context: fidl::encoding::Context) -> usize {
2067            16
2068        }
2069    }
2070
2071    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Tcp, D> for &Tcp {
2072        unsafe fn encode(
2073            self,
2074            encoder: &mut fidl::encoding::Encoder<'_, D>,
2075            offset: usize,
2076            mut depth: fidl::encoding::Depth,
2077        ) -> fidl::Result<()> {
2078            encoder.debug_check_bounds::<Tcp>(offset);
2079            // Vector header
2080            let max_ordinal: u64 = self.max_ordinal_present();
2081            encoder.write_num(max_ordinal, offset);
2082            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2083            // Calling encoder.out_of_line_offset(0) is not allowed.
2084            if max_ordinal == 0 {
2085                return Ok(());
2086            }
2087            depth.increment()?;
2088            let envelope_size = 8;
2089            let bytes_len = max_ordinal as usize * envelope_size;
2090            #[allow(unused_variables)]
2091            let offset = encoder.out_of_line_offset(bytes_len);
2092            let mut _prev_end_offset: usize = 0;
2093            if 1 > 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 = (1 - 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::<SocketBufferSizes, D>(
2109                self.buffer_sizes
2110                    .as_ref()
2111                    .map(<SocketBufferSizes as fidl::encoding::ValueTypeMarker>::borrow),
2112                encoder,
2113                offset + cur_offset,
2114                depth,
2115            )?;
2116
2117            _prev_end_offset = cur_offset + envelope_size;
2118
2119            Ok(())
2120        }
2121    }
2122
2123    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Tcp {
2124        #[inline(always)]
2125        fn new_empty() -> Self {
2126            Self::default()
2127        }
2128
2129        unsafe fn decode(
2130            &mut self,
2131            decoder: &mut fidl::encoding::Decoder<'_, D>,
2132            offset: usize,
2133            mut depth: fidl::encoding::Depth,
2134        ) -> fidl::Result<()> {
2135            decoder.debug_check_bounds::<Self>(offset);
2136            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2137                None => return Err(fidl::Error::NotNullable),
2138                Some(len) => len,
2139            };
2140            // Calling decoder.out_of_line_offset(0) is not allowed.
2141            if len == 0 {
2142                return Ok(());
2143            };
2144            depth.increment()?;
2145            let envelope_size = 8;
2146            let bytes_len = len * envelope_size;
2147            let offset = decoder.out_of_line_offset(bytes_len)?;
2148            // Decode the envelope for each type.
2149            let mut _next_ordinal_to_read = 0;
2150            let mut next_offset = offset;
2151            let end_offset = offset + bytes_len;
2152            _next_ordinal_to_read += 1;
2153            if next_offset >= end_offset {
2154                return Ok(());
2155            }
2156
2157            // Decode unknown envelopes for gaps in ordinals.
2158            while _next_ordinal_to_read < 1 {
2159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2160                _next_ordinal_to_read += 1;
2161                next_offset += envelope_size;
2162            }
2163
2164            let next_out_of_line = decoder.next_out_of_line();
2165            let handles_before = decoder.remaining_handles();
2166            if let Some((inlined, num_bytes, num_handles)) =
2167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2168            {
2169                let member_inline_size =
2170                    <SocketBufferSizes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2171                if inlined != (member_inline_size <= 4) {
2172                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2173                }
2174                let inner_offset;
2175                let mut inner_depth = depth.clone();
2176                if inlined {
2177                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2178                    inner_offset = next_offset;
2179                } else {
2180                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2181                    inner_depth.increment()?;
2182                }
2183                let val_ref =
2184                    self.buffer_sizes.get_or_insert_with(|| fidl::new_empty!(SocketBufferSizes, D));
2185                fidl::decode!(SocketBufferSizes, D, val_ref, decoder, inner_offset, inner_depth)?;
2186                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2187                {
2188                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2189                }
2190                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2191                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2192                }
2193            }
2194
2195            next_offset += envelope_size;
2196
2197            // Decode the remaining unknown envelopes.
2198            while next_offset < end_offset {
2199                _next_ordinal_to_read += 1;
2200                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2201                next_offset += envelope_size;
2202            }
2203
2204            Ok(())
2205        }
2206    }
2207
2208    impl Udp {
2209        #[inline(always)]
2210        fn max_ordinal_present(&self) -> u64 {
2211            if let Some(_) = self.buffer_sizes {
2212                return 1;
2213            }
2214            0
2215        }
2216    }
2217
2218    impl fidl::encoding::ValueTypeMarker for Udp {
2219        type Borrowed<'a> = &'a Self;
2220        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2221            value
2222        }
2223    }
2224
2225    unsafe impl fidl::encoding::TypeMarker for Udp {
2226        type Owned = Self;
2227
2228        #[inline(always)]
2229        fn inline_align(_context: fidl::encoding::Context) -> usize {
2230            8
2231        }
2232
2233        #[inline(always)]
2234        fn inline_size(_context: fidl::encoding::Context) -> usize {
2235            16
2236        }
2237    }
2238
2239    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Udp, D> for &Udp {
2240        unsafe fn encode(
2241            self,
2242            encoder: &mut fidl::encoding::Encoder<'_, D>,
2243            offset: usize,
2244            mut depth: fidl::encoding::Depth,
2245        ) -> fidl::Result<()> {
2246            encoder.debug_check_bounds::<Udp>(offset);
2247            // Vector header
2248            let max_ordinal: u64 = self.max_ordinal_present();
2249            encoder.write_num(max_ordinal, offset);
2250            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2251            // Calling encoder.out_of_line_offset(0) is not allowed.
2252            if max_ordinal == 0 {
2253                return Ok(());
2254            }
2255            depth.increment()?;
2256            let envelope_size = 8;
2257            let bytes_len = max_ordinal as usize * envelope_size;
2258            #[allow(unused_variables)]
2259            let offset = encoder.out_of_line_offset(bytes_len);
2260            let mut _prev_end_offset: usize = 0;
2261            if 1 > max_ordinal {
2262                return Ok(());
2263            }
2264
2265            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2266            // are envelope_size bytes.
2267            let cur_offset: usize = (1 - 1) * envelope_size;
2268
2269            // Zero reserved fields.
2270            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2271
2272            // Safety:
2273            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2274            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2275            //   envelope_size bytes, there is always sufficient room.
2276            fidl::encoding::encode_in_envelope_optional::<SocketBufferSizes, D>(
2277                self.buffer_sizes
2278                    .as_ref()
2279                    .map(<SocketBufferSizes as fidl::encoding::ValueTypeMarker>::borrow),
2280                encoder,
2281                offset + cur_offset,
2282                depth,
2283            )?;
2284
2285            _prev_end_offset = cur_offset + envelope_size;
2286
2287            Ok(())
2288        }
2289    }
2290
2291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Udp {
2292        #[inline(always)]
2293        fn new_empty() -> Self {
2294            Self::default()
2295        }
2296
2297        unsafe fn decode(
2298            &mut self,
2299            decoder: &mut fidl::encoding::Decoder<'_, D>,
2300            offset: usize,
2301            mut depth: fidl::encoding::Depth,
2302        ) -> fidl::Result<()> {
2303            decoder.debug_check_bounds::<Self>(offset);
2304            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2305                None => return Err(fidl::Error::NotNullable),
2306                Some(len) => len,
2307            };
2308            // Calling decoder.out_of_line_offset(0) is not allowed.
2309            if len == 0 {
2310                return Ok(());
2311            };
2312            depth.increment()?;
2313            let envelope_size = 8;
2314            let bytes_len = len * envelope_size;
2315            let offset = decoder.out_of_line_offset(bytes_len)?;
2316            // Decode the envelope for each type.
2317            let mut _next_ordinal_to_read = 0;
2318            let mut next_offset = offset;
2319            let end_offset = offset + bytes_len;
2320            _next_ordinal_to_read += 1;
2321            if next_offset >= end_offset {
2322                return Ok(());
2323            }
2324
2325            // Decode unknown envelopes for gaps in ordinals.
2326            while _next_ordinal_to_read < 1 {
2327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2328                _next_ordinal_to_read += 1;
2329                next_offset += envelope_size;
2330            }
2331
2332            let next_out_of_line = decoder.next_out_of_line();
2333            let handles_before = decoder.remaining_handles();
2334            if let Some((inlined, num_bytes, num_handles)) =
2335                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2336            {
2337                let member_inline_size =
2338                    <SocketBufferSizes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2339                if inlined != (member_inline_size <= 4) {
2340                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2341                }
2342                let inner_offset;
2343                let mut inner_depth = depth.clone();
2344                if inlined {
2345                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2346                    inner_offset = next_offset;
2347                } else {
2348                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2349                    inner_depth.increment()?;
2350                }
2351                let val_ref =
2352                    self.buffer_sizes.get_or_insert_with(|| fidl::new_empty!(SocketBufferSizes, D));
2353                fidl::decode!(SocketBufferSizes, 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
2365            // Decode the remaining unknown envelopes.
2366            while next_offset < end_offset {
2367                _next_ordinal_to_read += 1;
2368                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2369                next_offset += envelope_size;
2370            }
2371
2372            Ok(())
2373        }
2374    }
2375}