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