fidl_fuchsia_net_tcp__common/
fidl_fuchsia_net_tcp__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
11/// TCP congestion control state machine state.
12#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum CongestionControlState {
15    /// No indication of duplicate ACKs or loss. Everything is fine.
16    Open = 0,
17    /// Received SACK blocks duplicate ACKs, assumed to be due to packet loss
18    /// or reordering.
19    Disorder = 1,
20    /// Sending rate reduced due to congestion signal. This is either an ECN or
21    /// local queue overrun.
22    CongestionWindowReduced = 2,
23    /// Sender has entered either fast recovery (after seeing enough duplicate
24    /// ACKs) or SACK-based recovery
25    Recovery = 3,
26    /// Sender hit RTO and entered slow start. Exits when all retransmitted
27    /// packets have been ACKed.
28    Loss = 4,
29}
30
31impl CongestionControlState {
32    #[inline]
33    pub fn from_primitive(prim: u32) -> Option<Self> {
34        match prim {
35            0 => Some(Self::Open),
36            1 => Some(Self::Disorder),
37            2 => Some(Self::CongestionWindowReduced),
38            3 => Some(Self::Recovery),
39            4 => Some(Self::Loss),
40            _ => None,
41        }
42    }
43
44    #[inline]
45    pub const fn into_primitive(self) -> u32 {
46        self as u32
47    }
48}
49
50/// TCP state machine state.
51#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
52#[repr(u32)]
53pub enum State {
54    Established = 1,
55    SynSent = 2,
56    SynRecv = 3,
57    FinWait1 = 4,
58    FinWait2 = 5,
59    TimeWait = 6,
60    Close = 7,
61    CloseWait = 8,
62    LastAck = 9,
63    Listen = 10,
64    Closing = 11,
65}
66
67impl State {
68    #[inline]
69    pub fn from_primitive(prim: u32) -> Option<Self> {
70        match prim {
71            1 => Some(Self::Established),
72            2 => Some(Self::SynSent),
73            3 => Some(Self::SynRecv),
74            4 => Some(Self::FinWait1),
75            5 => Some(Self::FinWait2),
76            6 => Some(Self::TimeWait),
77            7 => Some(Self::Close),
78            8 => Some(Self::CloseWait),
79            9 => Some(Self::LastAck),
80            10 => Some(Self::Listen),
81            11 => Some(Self::Closing),
82            _ => None,
83        }
84    }
85
86    #[inline]
87    pub const fn into_primitive(self) -> u32 {
88        self as u32
89    }
90}
91
92/// TCP protocol state.
93#[derive(Clone, Debug, Default, PartialEq)]
94pub struct Info {
95    /// The current state of the TCP state machine.
96    pub state: Option<State>,
97    /// The current state of the TCP congention avoidance state machine.
98    pub ca_state: Option<CongestionControlState>,
99    /// The current RTO value in microseconds.
100    pub rto_usec: Option<u32>,
101    /// Time since data was last sent on the connection in milliseconds.
102    pub tcpi_last_data_sent_msec: Option<u32>,
103    /// Time since the most recent ACK was received in milliseconds.
104    pub tcpi_last_ack_recv_msec: Option<u32>,
105    /// The estimated smoothed roundtrip time in microseconds.
106    pub rtt_usec: Option<u32>,
107    /// The smoothed mean deviation of the roundtrip time in microseconds.
108    pub rtt_var_usec: Option<u32>,
109    /// The sending slow start threshold in segments.
110    pub snd_ssthresh: Option<u32>,
111    /// The current sending congestion window in segments.
112    pub snd_cwnd: Option<u32>,
113    /// The total number of retransmission events.
114    pub tcpi_total_retrans: Option<u32>,
115    /// The total number of segments transmitted.
116    pub tcpi_segs_out: Option<u64>,
117    /// The total number of segments received.
118    pub tcpi_segs_in: Option<u64>,
119    /// Whether the connection thinks it has ever seen reordering.
120    pub reorder_seen: Option<bool>,
121    #[doc(hidden)]
122    pub __source_breaking: fidl::marker::SourceBreaking,
123}
124
125impl fidl::Persistable for Info {}
126
127mod internal {
128    use super::*;
129    unsafe impl fidl::encoding::TypeMarker for CongestionControlState {
130        type Owned = Self;
131
132        #[inline(always)]
133        fn inline_align(_context: fidl::encoding::Context) -> usize {
134            std::mem::align_of::<u32>()
135        }
136
137        #[inline(always)]
138        fn inline_size(_context: fidl::encoding::Context) -> usize {
139            std::mem::size_of::<u32>()
140        }
141
142        #[inline(always)]
143        fn encode_is_copy() -> bool {
144            true
145        }
146
147        #[inline(always)]
148        fn decode_is_copy() -> bool {
149            false
150        }
151    }
152
153    impl fidl::encoding::ValueTypeMarker for CongestionControlState {
154        type Borrowed<'a> = Self;
155        #[inline(always)]
156        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
157            *value
158        }
159    }
160
161    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
162        for CongestionControlState
163    {
164        #[inline]
165        unsafe fn encode(
166            self,
167            encoder: &mut fidl::encoding::Encoder<'_, D>,
168            offset: usize,
169            _depth: fidl::encoding::Depth,
170        ) -> fidl::Result<()> {
171            encoder.debug_check_bounds::<Self>(offset);
172            encoder.write_num(self.into_primitive(), offset);
173            Ok(())
174        }
175    }
176
177    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
178        for CongestionControlState
179    {
180        #[inline(always)]
181        fn new_empty() -> Self {
182            Self::Open
183        }
184
185        #[inline]
186        unsafe fn decode(
187            &mut self,
188            decoder: &mut fidl::encoding::Decoder<'_, D>,
189            offset: usize,
190            _depth: fidl::encoding::Depth,
191        ) -> fidl::Result<()> {
192            decoder.debug_check_bounds::<Self>(offset);
193            let prim = decoder.read_num::<u32>(offset);
194
195            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
196            Ok(())
197        }
198    }
199    unsafe impl fidl::encoding::TypeMarker for State {
200        type Owned = Self;
201
202        #[inline(always)]
203        fn inline_align(_context: fidl::encoding::Context) -> usize {
204            std::mem::align_of::<u32>()
205        }
206
207        #[inline(always)]
208        fn inline_size(_context: fidl::encoding::Context) -> usize {
209            std::mem::size_of::<u32>()
210        }
211
212        #[inline(always)]
213        fn encode_is_copy() -> bool {
214            true
215        }
216
217        #[inline(always)]
218        fn decode_is_copy() -> bool {
219            false
220        }
221    }
222
223    impl fidl::encoding::ValueTypeMarker for State {
224        type Borrowed<'a> = Self;
225        #[inline(always)]
226        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
227            *value
228        }
229    }
230
231    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for State {
232        #[inline]
233        unsafe fn encode(
234            self,
235            encoder: &mut fidl::encoding::Encoder<'_, D>,
236            offset: usize,
237            _depth: fidl::encoding::Depth,
238        ) -> fidl::Result<()> {
239            encoder.debug_check_bounds::<Self>(offset);
240            encoder.write_num(self.into_primitive(), offset);
241            Ok(())
242        }
243    }
244
245    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for State {
246        #[inline(always)]
247        fn new_empty() -> Self {
248            Self::Established
249        }
250
251        #[inline]
252        unsafe fn decode(
253            &mut self,
254            decoder: &mut fidl::encoding::Decoder<'_, D>,
255            offset: usize,
256            _depth: fidl::encoding::Depth,
257        ) -> fidl::Result<()> {
258            decoder.debug_check_bounds::<Self>(offset);
259            let prim = decoder.read_num::<u32>(offset);
260
261            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
262            Ok(())
263        }
264    }
265
266    impl Info {
267        #[inline(always)]
268        fn max_ordinal_present(&self) -> u64 {
269            if let Some(_) = self.reorder_seen {
270                return 54;
271            }
272            if let Some(_) = self.tcpi_segs_in {
273                return 40;
274            }
275            if let Some(_) = self.tcpi_segs_out {
276                return 39;
277            }
278            if let Some(_) = self.tcpi_total_retrans {
279                return 34;
280            }
281            if let Some(_) = self.snd_cwnd {
282                return 29;
283            }
284            if let Some(_) = self.snd_ssthresh {
285                return 28;
286            }
287            if let Some(_) = self.rtt_var_usec {
288                return 27;
289            }
290            if let Some(_) = self.rtt_usec {
291                return 26;
292            }
293            if let Some(_) = self.tcpi_last_ack_recv_msec {
294                return 23;
295            }
296            if let Some(_) = self.tcpi_last_data_sent_msec {
297                return 20;
298            }
299            if let Some(_) = self.rto_usec {
300                return 11;
301            }
302            if let Some(_) = self.ca_state {
303                return 2;
304            }
305            if let Some(_) = self.state {
306                return 1;
307            }
308            0
309        }
310    }
311
312    impl fidl::encoding::ValueTypeMarker for Info {
313        type Borrowed<'a> = &'a Self;
314        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
315            value
316        }
317    }
318
319    unsafe impl fidl::encoding::TypeMarker for Info {
320        type Owned = Self;
321
322        #[inline(always)]
323        fn inline_align(_context: fidl::encoding::Context) -> usize {
324            8
325        }
326
327        #[inline(always)]
328        fn inline_size(_context: fidl::encoding::Context) -> usize {
329            16
330        }
331    }
332
333    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Info, D> for &Info {
334        unsafe fn encode(
335            self,
336            encoder: &mut fidl::encoding::Encoder<'_, D>,
337            offset: usize,
338            mut depth: fidl::encoding::Depth,
339        ) -> fidl::Result<()> {
340            encoder.debug_check_bounds::<Info>(offset);
341            // Vector header
342            let max_ordinal: u64 = self.max_ordinal_present();
343            encoder.write_num(max_ordinal, offset);
344            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
345            // Calling encoder.out_of_line_offset(0) is not allowed.
346            if max_ordinal == 0 {
347                return Ok(());
348            }
349            depth.increment()?;
350            let envelope_size = 8;
351            let bytes_len = max_ordinal as usize * envelope_size;
352            #[allow(unused_variables)]
353            let offset = encoder.out_of_line_offset(bytes_len);
354            let mut _prev_end_offset: usize = 0;
355            if 1 > max_ordinal {
356                return Ok(());
357            }
358
359            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
360            // are envelope_size bytes.
361            let cur_offset: usize = (1 - 1) * envelope_size;
362
363            // Zero reserved fields.
364            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
365
366            // Safety:
367            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
368            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
369            //   envelope_size bytes, there is always sufficient room.
370            fidl::encoding::encode_in_envelope_optional::<State, D>(
371                self.state.as_ref().map(<State as fidl::encoding::ValueTypeMarker>::borrow),
372                encoder,
373                offset + cur_offset,
374                depth,
375            )?;
376
377            _prev_end_offset = cur_offset + envelope_size;
378            if 2 > max_ordinal {
379                return Ok(());
380            }
381
382            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
383            // are envelope_size bytes.
384            let cur_offset: usize = (2 - 1) * envelope_size;
385
386            // Zero reserved fields.
387            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
388
389            // Safety:
390            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
391            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
392            //   envelope_size bytes, there is always sufficient room.
393            fidl::encoding::encode_in_envelope_optional::<CongestionControlState, D>(
394                self.ca_state
395                    .as_ref()
396                    .map(<CongestionControlState as fidl::encoding::ValueTypeMarker>::borrow),
397                encoder,
398                offset + cur_offset,
399                depth,
400            )?;
401
402            _prev_end_offset = cur_offset + envelope_size;
403            if 11 > max_ordinal {
404                return Ok(());
405            }
406
407            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
408            // are envelope_size bytes.
409            let cur_offset: usize = (11 - 1) * envelope_size;
410
411            // Zero reserved fields.
412            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
413
414            // Safety:
415            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
416            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
417            //   envelope_size bytes, there is always sufficient room.
418            fidl::encoding::encode_in_envelope_optional::<u32, D>(
419                self.rto_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
420                encoder,
421                offset + cur_offset,
422                depth,
423            )?;
424
425            _prev_end_offset = cur_offset + envelope_size;
426            if 20 > max_ordinal {
427                return Ok(());
428            }
429
430            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
431            // are envelope_size bytes.
432            let cur_offset: usize = (20 - 1) * envelope_size;
433
434            // Zero reserved fields.
435            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
436
437            // Safety:
438            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
439            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
440            //   envelope_size bytes, there is always sufficient room.
441            fidl::encoding::encode_in_envelope_optional::<u32, D>(
442                self.tcpi_last_data_sent_msec
443                    .as_ref()
444                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
445                encoder,
446                offset + cur_offset,
447                depth,
448            )?;
449
450            _prev_end_offset = cur_offset + envelope_size;
451            if 23 > max_ordinal {
452                return Ok(());
453            }
454
455            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
456            // are envelope_size bytes.
457            let cur_offset: usize = (23 - 1) * envelope_size;
458
459            // Zero reserved fields.
460            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
461
462            // Safety:
463            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
464            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
465            //   envelope_size bytes, there is always sufficient room.
466            fidl::encoding::encode_in_envelope_optional::<u32, D>(
467                self.tcpi_last_ack_recv_msec
468                    .as_ref()
469                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
470                encoder,
471                offset + cur_offset,
472                depth,
473            )?;
474
475            _prev_end_offset = cur_offset + envelope_size;
476            if 26 > max_ordinal {
477                return Ok(());
478            }
479
480            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
481            // are envelope_size bytes.
482            let cur_offset: usize = (26 - 1) * envelope_size;
483
484            // Zero reserved fields.
485            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
486
487            // Safety:
488            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
489            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
490            //   envelope_size bytes, there is always sufficient room.
491            fidl::encoding::encode_in_envelope_optional::<u32, D>(
492                self.rtt_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
493                encoder,
494                offset + cur_offset,
495                depth,
496            )?;
497
498            _prev_end_offset = cur_offset + envelope_size;
499            if 27 > max_ordinal {
500                return Ok(());
501            }
502
503            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
504            // are envelope_size bytes.
505            let cur_offset: usize = (27 - 1) * envelope_size;
506
507            // Zero reserved fields.
508            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
509
510            // Safety:
511            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
512            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
513            //   envelope_size bytes, there is always sufficient room.
514            fidl::encoding::encode_in_envelope_optional::<u32, D>(
515                self.rtt_var_usec.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
516                encoder,
517                offset + cur_offset,
518                depth,
519            )?;
520
521            _prev_end_offset = cur_offset + envelope_size;
522            if 28 > max_ordinal {
523                return Ok(());
524            }
525
526            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
527            // are envelope_size bytes.
528            let cur_offset: usize = (28 - 1) * envelope_size;
529
530            // Zero reserved fields.
531            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
532
533            // Safety:
534            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
535            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
536            //   envelope_size bytes, there is always sufficient room.
537            fidl::encoding::encode_in_envelope_optional::<u32, D>(
538                self.snd_ssthresh.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
539                encoder,
540                offset + cur_offset,
541                depth,
542            )?;
543
544            _prev_end_offset = cur_offset + envelope_size;
545            if 29 > max_ordinal {
546                return Ok(());
547            }
548
549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
550            // are envelope_size bytes.
551            let cur_offset: usize = (29 - 1) * envelope_size;
552
553            // Zero reserved fields.
554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
555
556            // Safety:
557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
559            //   envelope_size bytes, there is always sufficient room.
560            fidl::encoding::encode_in_envelope_optional::<u32, D>(
561                self.snd_cwnd.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
562                encoder,
563                offset + cur_offset,
564                depth,
565            )?;
566
567            _prev_end_offset = cur_offset + envelope_size;
568            if 34 > max_ordinal {
569                return Ok(());
570            }
571
572            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
573            // are envelope_size bytes.
574            let cur_offset: usize = (34 - 1) * envelope_size;
575
576            // Zero reserved fields.
577            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
578
579            // Safety:
580            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
581            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
582            //   envelope_size bytes, there is always sufficient room.
583            fidl::encoding::encode_in_envelope_optional::<u32, D>(
584                self.tcpi_total_retrans
585                    .as_ref()
586                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
587                encoder,
588                offset + cur_offset,
589                depth,
590            )?;
591
592            _prev_end_offset = cur_offset + envelope_size;
593            if 39 > max_ordinal {
594                return Ok(());
595            }
596
597            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
598            // are envelope_size bytes.
599            let cur_offset: usize = (39 - 1) * envelope_size;
600
601            // Zero reserved fields.
602            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
603
604            // Safety:
605            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
606            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
607            //   envelope_size bytes, there is always sufficient room.
608            fidl::encoding::encode_in_envelope_optional::<u64, D>(
609                self.tcpi_segs_out.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
610                encoder,
611                offset + cur_offset,
612                depth,
613            )?;
614
615            _prev_end_offset = cur_offset + envelope_size;
616            if 40 > max_ordinal {
617                return Ok(());
618            }
619
620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
621            // are envelope_size bytes.
622            let cur_offset: usize = (40 - 1) * envelope_size;
623
624            // Zero reserved fields.
625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
626
627            // Safety:
628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
630            //   envelope_size bytes, there is always sufficient room.
631            fidl::encoding::encode_in_envelope_optional::<u64, D>(
632                self.tcpi_segs_in.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
633                encoder,
634                offset + cur_offset,
635                depth,
636            )?;
637
638            _prev_end_offset = cur_offset + envelope_size;
639            if 54 > max_ordinal {
640                return Ok(());
641            }
642
643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
644            // are envelope_size bytes.
645            let cur_offset: usize = (54 - 1) * envelope_size;
646
647            // Zero reserved fields.
648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
649
650            // Safety:
651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
653            //   envelope_size bytes, there is always sufficient room.
654            fidl::encoding::encode_in_envelope_optional::<bool, D>(
655                self.reorder_seen.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
656                encoder,
657                offset + cur_offset,
658                depth,
659            )?;
660
661            _prev_end_offset = cur_offset + envelope_size;
662
663            Ok(())
664        }
665    }
666
667    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Info {
668        #[inline(always)]
669        fn new_empty() -> Self {
670            Self::default()
671        }
672
673        unsafe fn decode(
674            &mut self,
675            decoder: &mut fidl::encoding::Decoder<'_, D>,
676            offset: usize,
677            mut depth: fidl::encoding::Depth,
678        ) -> fidl::Result<()> {
679            decoder.debug_check_bounds::<Self>(offset);
680            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
681                None => return Err(fidl::Error::NotNullable),
682                Some(len) => len,
683            };
684            // Calling decoder.out_of_line_offset(0) is not allowed.
685            if len == 0 {
686                return Ok(());
687            };
688            depth.increment()?;
689            let envelope_size = 8;
690            let bytes_len = len * envelope_size;
691            let offset = decoder.out_of_line_offset(bytes_len)?;
692            // Decode the envelope for each type.
693            let mut _next_ordinal_to_read = 0;
694            let mut next_offset = offset;
695            let end_offset = offset + bytes_len;
696            _next_ordinal_to_read += 1;
697            if next_offset >= end_offset {
698                return Ok(());
699            }
700
701            // Decode unknown envelopes for gaps in ordinals.
702            while _next_ordinal_to_read < 1 {
703                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
704                _next_ordinal_to_read += 1;
705                next_offset += envelope_size;
706            }
707
708            let next_out_of_line = decoder.next_out_of_line();
709            let handles_before = decoder.remaining_handles();
710            if let Some((inlined, num_bytes, num_handles)) =
711                fidl::encoding::decode_envelope_header(decoder, next_offset)?
712            {
713                let member_inline_size =
714                    <State as fidl::encoding::TypeMarker>::inline_size(decoder.context);
715                if inlined != (member_inline_size <= 4) {
716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
717                }
718                let inner_offset;
719                let mut inner_depth = depth.clone();
720                if inlined {
721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
722                    inner_offset = next_offset;
723                } else {
724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
725                    inner_depth.increment()?;
726                }
727                let val_ref = self.state.get_or_insert_with(|| fidl::new_empty!(State, D));
728                fidl::decode!(State, D, val_ref, decoder, inner_offset, inner_depth)?;
729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
730                {
731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
732                }
733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
735                }
736            }
737
738            next_offset += envelope_size;
739            _next_ordinal_to_read += 1;
740            if next_offset >= end_offset {
741                return Ok(());
742            }
743
744            // Decode unknown envelopes for gaps in ordinals.
745            while _next_ordinal_to_read < 2 {
746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
747                _next_ordinal_to_read += 1;
748                next_offset += envelope_size;
749            }
750
751            let next_out_of_line = decoder.next_out_of_line();
752            let handles_before = decoder.remaining_handles();
753            if let Some((inlined, num_bytes, num_handles)) =
754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
755            {
756                let member_inline_size =
757                    <CongestionControlState as fidl::encoding::TypeMarker>::inline_size(
758                        decoder.context,
759                    );
760                if inlined != (member_inline_size <= 4) {
761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
762                }
763                let inner_offset;
764                let mut inner_depth = depth.clone();
765                if inlined {
766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
767                    inner_offset = next_offset;
768                } else {
769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
770                    inner_depth.increment()?;
771                }
772                let val_ref = self
773                    .ca_state
774                    .get_or_insert_with(|| fidl::new_empty!(CongestionControlState, D));
775                fidl::decode!(
776                    CongestionControlState,
777                    D,
778                    val_ref,
779                    decoder,
780                    inner_offset,
781                    inner_depth
782                )?;
783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
784                {
785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
786                }
787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
789                }
790            }
791
792            next_offset += envelope_size;
793            _next_ordinal_to_read += 1;
794            if next_offset >= end_offset {
795                return Ok(());
796            }
797
798            // Decode unknown envelopes for gaps in ordinals.
799            while _next_ordinal_to_read < 11 {
800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
801                _next_ordinal_to_read += 1;
802                next_offset += envelope_size;
803            }
804
805            let next_out_of_line = decoder.next_out_of_line();
806            let handles_before = decoder.remaining_handles();
807            if let Some((inlined, num_bytes, num_handles)) =
808                fidl::encoding::decode_envelope_header(decoder, next_offset)?
809            {
810                let member_inline_size =
811                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
812                if inlined != (member_inline_size <= 4) {
813                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
814                }
815                let inner_offset;
816                let mut inner_depth = depth.clone();
817                if inlined {
818                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
819                    inner_offset = next_offset;
820                } else {
821                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
822                    inner_depth.increment()?;
823                }
824                let val_ref = self.rto_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
825                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
826                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
827                {
828                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
829                }
830                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
831                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
832                }
833            }
834
835            next_offset += envelope_size;
836            _next_ordinal_to_read += 1;
837            if next_offset >= end_offset {
838                return Ok(());
839            }
840
841            // Decode unknown envelopes for gaps in ordinals.
842            while _next_ordinal_to_read < 20 {
843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
844                _next_ordinal_to_read += 1;
845                next_offset += envelope_size;
846            }
847
848            let next_out_of_line = decoder.next_out_of_line();
849            let handles_before = decoder.remaining_handles();
850            if let Some((inlined, num_bytes, num_handles)) =
851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
852            {
853                let member_inline_size =
854                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
855                if inlined != (member_inline_size <= 4) {
856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
857                }
858                let inner_offset;
859                let mut inner_depth = depth.clone();
860                if inlined {
861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
862                    inner_offset = next_offset;
863                } else {
864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
865                    inner_depth.increment()?;
866                }
867                let val_ref =
868                    self.tcpi_last_data_sent_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
869                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
871                {
872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
873                }
874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
876                }
877            }
878
879            next_offset += envelope_size;
880            _next_ordinal_to_read += 1;
881            if next_offset >= end_offset {
882                return Ok(());
883            }
884
885            // Decode unknown envelopes for gaps in ordinals.
886            while _next_ordinal_to_read < 23 {
887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
888                _next_ordinal_to_read += 1;
889                next_offset += envelope_size;
890            }
891
892            let next_out_of_line = decoder.next_out_of_line();
893            let handles_before = decoder.remaining_handles();
894            if let Some((inlined, num_bytes, num_handles)) =
895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
896            {
897                let member_inline_size =
898                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
899                if inlined != (member_inline_size <= 4) {
900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
901                }
902                let inner_offset;
903                let mut inner_depth = depth.clone();
904                if inlined {
905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
906                    inner_offset = next_offset;
907                } else {
908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
909                    inner_depth.increment()?;
910                }
911                let val_ref =
912                    self.tcpi_last_ack_recv_msec.get_or_insert_with(|| fidl::new_empty!(u32, D));
913                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
915                {
916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
917                }
918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
920                }
921            }
922
923            next_offset += envelope_size;
924            _next_ordinal_to_read += 1;
925            if next_offset >= end_offset {
926                return Ok(());
927            }
928
929            // Decode unknown envelopes for gaps in ordinals.
930            while _next_ordinal_to_read < 26 {
931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
932                _next_ordinal_to_read += 1;
933                next_offset += envelope_size;
934            }
935
936            let next_out_of_line = decoder.next_out_of_line();
937            let handles_before = decoder.remaining_handles();
938            if let Some((inlined, num_bytes, num_handles)) =
939                fidl::encoding::decode_envelope_header(decoder, next_offset)?
940            {
941                let member_inline_size =
942                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
943                if inlined != (member_inline_size <= 4) {
944                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
945                }
946                let inner_offset;
947                let mut inner_depth = depth.clone();
948                if inlined {
949                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
950                    inner_offset = next_offset;
951                } else {
952                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
953                    inner_depth.increment()?;
954                }
955                let val_ref = self.rtt_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
956                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
957                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
958                {
959                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
960                }
961                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
962                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
963                }
964            }
965
966            next_offset += envelope_size;
967            _next_ordinal_to_read += 1;
968            if next_offset >= end_offset {
969                return Ok(());
970            }
971
972            // Decode unknown envelopes for gaps in ordinals.
973            while _next_ordinal_to_read < 27 {
974                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
975                _next_ordinal_to_read += 1;
976                next_offset += envelope_size;
977            }
978
979            let next_out_of_line = decoder.next_out_of_line();
980            let handles_before = decoder.remaining_handles();
981            if let Some((inlined, num_bytes, num_handles)) =
982                fidl::encoding::decode_envelope_header(decoder, next_offset)?
983            {
984                let member_inline_size =
985                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
986                if inlined != (member_inline_size <= 4) {
987                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
988                }
989                let inner_offset;
990                let mut inner_depth = depth.clone();
991                if inlined {
992                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
993                    inner_offset = next_offset;
994                } else {
995                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
996                    inner_depth.increment()?;
997                }
998                let val_ref = self.rtt_var_usec.get_or_insert_with(|| fidl::new_empty!(u32, D));
999                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1000                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1001                {
1002                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1003                }
1004                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1005                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1006                }
1007            }
1008
1009            next_offset += envelope_size;
1010            _next_ordinal_to_read += 1;
1011            if next_offset >= end_offset {
1012                return Ok(());
1013            }
1014
1015            // Decode unknown envelopes for gaps in ordinals.
1016            while _next_ordinal_to_read < 28 {
1017                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1018                _next_ordinal_to_read += 1;
1019                next_offset += envelope_size;
1020            }
1021
1022            let next_out_of_line = decoder.next_out_of_line();
1023            let handles_before = decoder.remaining_handles();
1024            if let Some((inlined, num_bytes, num_handles)) =
1025                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1026            {
1027                let member_inline_size =
1028                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1029                if inlined != (member_inline_size <= 4) {
1030                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1031                }
1032                let inner_offset;
1033                let mut inner_depth = depth.clone();
1034                if inlined {
1035                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1036                    inner_offset = next_offset;
1037                } else {
1038                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1039                    inner_depth.increment()?;
1040                }
1041                let val_ref = self.snd_ssthresh.get_or_insert_with(|| fidl::new_empty!(u32, D));
1042                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1044                {
1045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1046                }
1047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1049                }
1050            }
1051
1052            next_offset += envelope_size;
1053            _next_ordinal_to_read += 1;
1054            if next_offset >= end_offset {
1055                return Ok(());
1056            }
1057
1058            // Decode unknown envelopes for gaps in ordinals.
1059            while _next_ordinal_to_read < 29 {
1060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1061                _next_ordinal_to_read += 1;
1062                next_offset += envelope_size;
1063            }
1064
1065            let next_out_of_line = decoder.next_out_of_line();
1066            let handles_before = decoder.remaining_handles();
1067            if let Some((inlined, num_bytes, num_handles)) =
1068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1069            {
1070                let member_inline_size =
1071                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1072                if inlined != (member_inline_size <= 4) {
1073                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1074                }
1075                let inner_offset;
1076                let mut inner_depth = depth.clone();
1077                if inlined {
1078                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1079                    inner_offset = next_offset;
1080                } else {
1081                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1082                    inner_depth.increment()?;
1083                }
1084                let val_ref = self.snd_cwnd.get_or_insert_with(|| fidl::new_empty!(u32, D));
1085                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1086                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1087                {
1088                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1089                }
1090                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1091                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1092                }
1093            }
1094
1095            next_offset += envelope_size;
1096            _next_ordinal_to_read += 1;
1097            if next_offset >= end_offset {
1098                return Ok(());
1099            }
1100
1101            // Decode unknown envelopes for gaps in ordinals.
1102            while _next_ordinal_to_read < 34 {
1103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1104                _next_ordinal_to_read += 1;
1105                next_offset += envelope_size;
1106            }
1107
1108            let next_out_of_line = decoder.next_out_of_line();
1109            let handles_before = decoder.remaining_handles();
1110            if let Some((inlined, num_bytes, num_handles)) =
1111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1112            {
1113                let member_inline_size =
1114                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1115                if inlined != (member_inline_size <= 4) {
1116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1117                }
1118                let inner_offset;
1119                let mut inner_depth = depth.clone();
1120                if inlined {
1121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1122                    inner_offset = next_offset;
1123                } else {
1124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1125                    inner_depth.increment()?;
1126                }
1127                let val_ref =
1128                    self.tcpi_total_retrans.get_or_insert_with(|| fidl::new_empty!(u32, D));
1129                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1130                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1131                {
1132                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1133                }
1134                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1135                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1136                }
1137            }
1138
1139            next_offset += envelope_size;
1140            _next_ordinal_to_read += 1;
1141            if next_offset >= end_offset {
1142                return Ok(());
1143            }
1144
1145            // Decode unknown envelopes for gaps in ordinals.
1146            while _next_ordinal_to_read < 39 {
1147                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1148                _next_ordinal_to_read += 1;
1149                next_offset += envelope_size;
1150            }
1151
1152            let next_out_of_line = decoder.next_out_of_line();
1153            let handles_before = decoder.remaining_handles();
1154            if let Some((inlined, num_bytes, num_handles)) =
1155                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1156            {
1157                let member_inline_size =
1158                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1159                if inlined != (member_inline_size <= 4) {
1160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1161                }
1162                let inner_offset;
1163                let mut inner_depth = depth.clone();
1164                if inlined {
1165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1166                    inner_offset = next_offset;
1167                } else {
1168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1169                    inner_depth.increment()?;
1170                }
1171                let val_ref = self.tcpi_segs_out.get_or_insert_with(|| fidl::new_empty!(u64, D));
1172                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1173                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1174                {
1175                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1176                }
1177                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1178                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1179                }
1180            }
1181
1182            next_offset += envelope_size;
1183            _next_ordinal_to_read += 1;
1184            if next_offset >= end_offset {
1185                return Ok(());
1186            }
1187
1188            // Decode unknown envelopes for gaps in ordinals.
1189            while _next_ordinal_to_read < 40 {
1190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1191                _next_ordinal_to_read += 1;
1192                next_offset += envelope_size;
1193            }
1194
1195            let next_out_of_line = decoder.next_out_of_line();
1196            let handles_before = decoder.remaining_handles();
1197            if let Some((inlined, num_bytes, num_handles)) =
1198                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1199            {
1200                let member_inline_size =
1201                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1202                if inlined != (member_inline_size <= 4) {
1203                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1204                }
1205                let inner_offset;
1206                let mut inner_depth = depth.clone();
1207                if inlined {
1208                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1209                    inner_offset = next_offset;
1210                } else {
1211                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1212                    inner_depth.increment()?;
1213                }
1214                let val_ref = self.tcpi_segs_in.get_or_insert_with(|| fidl::new_empty!(u64, D));
1215                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1217                {
1218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1219                }
1220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1222                }
1223            }
1224
1225            next_offset += envelope_size;
1226            _next_ordinal_to_read += 1;
1227            if next_offset >= end_offset {
1228                return Ok(());
1229            }
1230
1231            // Decode unknown envelopes for gaps in ordinals.
1232            while _next_ordinal_to_read < 54 {
1233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1234                _next_ordinal_to_read += 1;
1235                next_offset += envelope_size;
1236            }
1237
1238            let next_out_of_line = decoder.next_out_of_line();
1239            let handles_before = decoder.remaining_handles();
1240            if let Some((inlined, num_bytes, num_handles)) =
1241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1242            {
1243                let member_inline_size =
1244                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1245                if inlined != (member_inline_size <= 4) {
1246                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1247                }
1248                let inner_offset;
1249                let mut inner_depth = depth.clone();
1250                if inlined {
1251                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1252                    inner_offset = next_offset;
1253                } else {
1254                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1255                    inner_depth.increment()?;
1256                }
1257                let val_ref = self.reorder_seen.get_or_insert_with(|| fidl::new_empty!(bool, D));
1258                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1259                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1260                {
1261                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1262                }
1263                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1264                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1265                }
1266            }
1267
1268            next_offset += envelope_size;
1269
1270            // Decode the remaining unknown envelopes.
1271            while next_offset < end_offset {
1272                _next_ordinal_to_read += 1;
1273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1274                next_offset += envelope_size;
1275            }
1276
1277            Ok(())
1278        }
1279    }
1280}