fidl_fuchsia_starnix_container__common/
fidl_fuchsia_starnix_container__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#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12pub enum SignalError {
13    /// Invalid target process.
14    InvalidTarget,
15    /// Invalid signal.
16    InvalidSignal,
17    #[doc(hidden)]
18    __SourceBreaking { unknown_ordinal: u32 },
19}
20
21/// Pattern that matches an unknown `SignalError` member.
22#[macro_export]
23macro_rules! SignalErrorUnknown {
24    () => {
25        _
26    };
27}
28
29impl SignalError {
30    #[inline]
31    pub fn from_primitive(prim: u32) -> Option<Self> {
32        match prim {
33            1 => Some(Self::InvalidTarget),
34            2 => Some(Self::InvalidSignal),
35            _ => None,
36        }
37    }
38
39    #[inline]
40    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
41        match prim {
42            1 => Self::InvalidTarget,
43            2 => Self::InvalidSignal,
44            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
45        }
46    }
47
48    #[inline]
49    pub fn unknown() -> Self {
50        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
51    }
52
53    #[inline]
54    pub const fn into_primitive(self) -> u32 {
55        match self {
56            Self::InvalidTarget => 1,
57            Self::InvalidSignal => 2,
58            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
59        }
60    }
61
62    #[inline]
63    pub fn is_unknown(&self) -> bool {
64        match self {
65            Self::__SourceBreaking { unknown_ordinal: _ } => true,
66            _ => false,
67        }
68    }
69}
70
71#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
72pub enum SpawnConsoleError {
73    /// A required table field was missing or otherwise invalid.
74    InvalidArgs,
75    /// The console process exited without a normal return code.
76    Canceled,
77    #[doc(hidden)]
78    __SourceBreaking { unknown_ordinal: u32 },
79}
80
81/// Pattern that matches an unknown `SpawnConsoleError` member.
82#[macro_export]
83macro_rules! SpawnConsoleErrorUnknown {
84    () => {
85        _
86    };
87}
88
89impl SpawnConsoleError {
90    #[inline]
91    pub fn from_primitive(prim: u32) -> Option<Self> {
92        match prim {
93            1 => Some(Self::InvalidArgs),
94            2 => Some(Self::Canceled),
95            _ => None,
96        }
97    }
98
99    #[inline]
100    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
101        match prim {
102            1 => Self::InvalidArgs,
103            2 => Self::Canceled,
104            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
105        }
106    }
107
108    #[inline]
109    pub fn unknown() -> Self {
110        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
111    }
112
113    #[inline]
114    pub const fn into_primitive(self) -> u32 {
115        match self {
116            Self::InvalidArgs => 1,
117            Self::Canceled => 2,
118            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
119        }
120    }
121
122    #[inline]
123    pub fn is_unknown(&self) -> bool {
124        match self {
125            Self::__SourceBreaking { unknown_ordinal: _ } => true,
126            _ => false,
127        }
128    }
129}
130
131#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
132#[repr(C)]
133pub struct ConsoleWindowSize {
134    pub rows: u16,
135    pub cols: u16,
136    pub x_pixels: u16,
137    pub y_pixels: u16,
138}
139
140impl fidl::Persistable for ConsoleWindowSize {}
141
142#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
143#[repr(C)]
144pub struct ControllerSpawnConsoleResponse {
145    pub exit_code: u8,
146}
147
148impl fidl::Persistable for ControllerSpawnConsoleResponse {}
149
150#[derive(Clone, Debug, Default, PartialEq)]
151pub struct ControllerGetVmoReferencesRequest {
152    pub koid: Option<u64>,
153    #[doc(hidden)]
154    pub __source_breaking: fidl::marker::SourceBreaking,
155}
156
157impl fidl::Persistable for ControllerGetVmoReferencesRequest {}
158
159#[derive(Clone, Debug, Default, PartialEq)]
160pub struct ControllerSendSignalRequest {
161    pub pid: Option<i32>,
162    pub signal: Option<u64>,
163    #[doc(hidden)]
164    pub __source_breaking: fidl::marker::SourceBreaking,
165}
166
167impl fidl::Persistable for ControllerSendSignalRequest {}
168
169#[derive(Clone, Debug, Default, PartialEq)]
170pub struct ControllerGetVmoReferencesResponse {
171    pub references: Option<Vec<VmoReference>>,
172    #[doc(hidden)]
173    pub __source_breaking: fidl::marker::SourceBreaking,
174}
175
176impl fidl::Persistable for ControllerGetVmoReferencesResponse {}
177
178#[derive(Clone, Debug, Default, PartialEq)]
179pub struct VmoReference {
180    /// The name of the process containing a file backed by the vmo.
181    pub process_name: Option<String>,
182    /// The Starnix pid of the process containing a file backed by the vmo.
183    pub pid: Option<u64>,
184    /// The file descriptor number in the process that refers to the vmo.
185    pub fd: Option<i32>,
186    /// The koid of the vmo.
187    pub koid: Option<u64>,
188    #[doc(hidden)]
189    pub __source_breaking: fidl::marker::SourceBreaking,
190}
191
192impl fidl::Persistable for VmoReference {}
193
194pub mod controller_ordinals {
195    pub const VSOCK_CONNECT: u64 = 0x494a469a8943213b;
196    pub const SPAWN_CONSOLE: u64 = 0x76eb46fdc63aa8b8;
197    pub const GET_VMO_REFERENCES: u64 = 0x47a7f039bb97f173;
198    pub const GET_JOB_HANDLE: u64 = 0x60a31a248576ffea;
199    pub const SEND_SIGNAL: u64 = 0x253b1a0d3b9639e3;
200}
201
202mod internal {
203    use super::*;
204    unsafe impl fidl::encoding::TypeMarker for SignalError {
205        type Owned = Self;
206
207        #[inline(always)]
208        fn inline_align(_context: fidl::encoding::Context) -> usize {
209            std::mem::align_of::<u32>()
210        }
211
212        #[inline(always)]
213        fn inline_size(_context: fidl::encoding::Context) -> usize {
214            std::mem::size_of::<u32>()
215        }
216
217        #[inline(always)]
218        fn encode_is_copy() -> bool {
219            false
220        }
221
222        #[inline(always)]
223        fn decode_is_copy() -> bool {
224            false
225        }
226    }
227
228    impl fidl::encoding::ValueTypeMarker for SignalError {
229        type Borrowed<'a> = Self;
230        #[inline(always)]
231        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
232            *value
233        }
234    }
235
236    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SignalError {
237        #[inline]
238        unsafe fn encode(
239            self,
240            encoder: &mut fidl::encoding::Encoder<'_, D>,
241            offset: usize,
242            _depth: fidl::encoding::Depth,
243        ) -> fidl::Result<()> {
244            encoder.debug_check_bounds::<Self>(offset);
245            encoder.write_num(self.into_primitive(), offset);
246            Ok(())
247        }
248    }
249
250    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SignalError {
251        #[inline(always)]
252        fn new_empty() -> Self {
253            Self::unknown()
254        }
255
256        #[inline]
257        unsafe fn decode(
258            &mut self,
259            decoder: &mut fidl::encoding::Decoder<'_, D>,
260            offset: usize,
261            _depth: fidl::encoding::Depth,
262        ) -> fidl::Result<()> {
263            decoder.debug_check_bounds::<Self>(offset);
264            let prim = decoder.read_num::<u32>(offset);
265
266            *self = Self::from_primitive_allow_unknown(prim);
267            Ok(())
268        }
269    }
270    unsafe impl fidl::encoding::TypeMarker for SpawnConsoleError {
271        type Owned = Self;
272
273        #[inline(always)]
274        fn inline_align(_context: fidl::encoding::Context) -> usize {
275            std::mem::align_of::<u32>()
276        }
277
278        #[inline(always)]
279        fn inline_size(_context: fidl::encoding::Context) -> usize {
280            std::mem::size_of::<u32>()
281        }
282
283        #[inline(always)]
284        fn encode_is_copy() -> bool {
285            false
286        }
287
288        #[inline(always)]
289        fn decode_is_copy() -> bool {
290            false
291        }
292    }
293
294    impl fidl::encoding::ValueTypeMarker for SpawnConsoleError {
295        type Borrowed<'a> = Self;
296        #[inline(always)]
297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
298            *value
299        }
300    }
301
302    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
303        for SpawnConsoleError
304    {
305        #[inline]
306        unsafe fn encode(
307            self,
308            encoder: &mut fidl::encoding::Encoder<'_, D>,
309            offset: usize,
310            _depth: fidl::encoding::Depth,
311        ) -> fidl::Result<()> {
312            encoder.debug_check_bounds::<Self>(offset);
313            encoder.write_num(self.into_primitive(), offset);
314            Ok(())
315        }
316    }
317
318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SpawnConsoleError {
319        #[inline(always)]
320        fn new_empty() -> Self {
321            Self::unknown()
322        }
323
324        #[inline]
325        unsafe fn decode(
326            &mut self,
327            decoder: &mut fidl::encoding::Decoder<'_, D>,
328            offset: usize,
329            _depth: fidl::encoding::Depth,
330        ) -> fidl::Result<()> {
331            decoder.debug_check_bounds::<Self>(offset);
332            let prim = decoder.read_num::<u32>(offset);
333
334            *self = Self::from_primitive_allow_unknown(prim);
335            Ok(())
336        }
337    }
338
339    impl fidl::encoding::ValueTypeMarker for ConsoleWindowSize {
340        type Borrowed<'a> = &'a Self;
341        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
342            value
343        }
344    }
345
346    unsafe impl fidl::encoding::TypeMarker for ConsoleWindowSize {
347        type Owned = Self;
348
349        #[inline(always)]
350        fn inline_align(_context: fidl::encoding::Context) -> usize {
351            2
352        }
353
354        #[inline(always)]
355        fn inline_size(_context: fidl::encoding::Context) -> usize {
356            8
357        }
358        #[inline(always)]
359        fn encode_is_copy() -> bool {
360            true
361        }
362
363        #[inline(always)]
364        fn decode_is_copy() -> bool {
365            true
366        }
367    }
368
369    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConsoleWindowSize, D>
370        for &ConsoleWindowSize
371    {
372        #[inline]
373        unsafe fn encode(
374            self,
375            encoder: &mut fidl::encoding::Encoder<'_, D>,
376            offset: usize,
377            _depth: fidl::encoding::Depth,
378        ) -> fidl::Result<()> {
379            encoder.debug_check_bounds::<ConsoleWindowSize>(offset);
380            unsafe {
381                // Copy the object into the buffer.
382                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
383                (buf_ptr as *mut ConsoleWindowSize)
384                    .write_unaligned((self as *const ConsoleWindowSize).read());
385                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
386                // done second because the memcpy will write garbage to these bytes.
387            }
388            Ok(())
389        }
390    }
391    unsafe impl<
392        D: fidl::encoding::ResourceDialect,
393        T0: fidl::encoding::Encode<u16, D>,
394        T1: fidl::encoding::Encode<u16, D>,
395        T2: fidl::encoding::Encode<u16, D>,
396        T3: fidl::encoding::Encode<u16, D>,
397    > fidl::encoding::Encode<ConsoleWindowSize, D> for (T0, T1, T2, T3)
398    {
399        #[inline]
400        unsafe fn encode(
401            self,
402            encoder: &mut fidl::encoding::Encoder<'_, D>,
403            offset: usize,
404            depth: fidl::encoding::Depth,
405        ) -> fidl::Result<()> {
406            encoder.debug_check_bounds::<ConsoleWindowSize>(offset);
407            // Zero out padding regions. There's no need to apply masks
408            // because the unmasked parts will be overwritten by fields.
409            // Write the fields.
410            self.0.encode(encoder, offset + 0, depth)?;
411            self.1.encode(encoder, offset + 2, depth)?;
412            self.2.encode(encoder, offset + 4, depth)?;
413            self.3.encode(encoder, offset + 6, depth)?;
414            Ok(())
415        }
416    }
417
418    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConsoleWindowSize {
419        #[inline(always)]
420        fn new_empty() -> Self {
421            Self {
422                rows: fidl::new_empty!(u16, D),
423                cols: fidl::new_empty!(u16, D),
424                x_pixels: fidl::new_empty!(u16, D),
425                y_pixels: fidl::new_empty!(u16, D),
426            }
427        }
428
429        #[inline]
430        unsafe fn decode(
431            &mut self,
432            decoder: &mut fidl::encoding::Decoder<'_, D>,
433            offset: usize,
434            _depth: fidl::encoding::Depth,
435        ) -> fidl::Result<()> {
436            decoder.debug_check_bounds::<Self>(offset);
437            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
438            // Verify that padding bytes are zero.
439            // Copy from the buffer into the object.
440            unsafe {
441                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
442            }
443            Ok(())
444        }
445    }
446
447    impl fidl::encoding::ValueTypeMarker for ControllerSpawnConsoleResponse {
448        type Borrowed<'a> = &'a Self;
449        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
450            value
451        }
452    }
453
454    unsafe impl fidl::encoding::TypeMarker for ControllerSpawnConsoleResponse {
455        type Owned = Self;
456
457        #[inline(always)]
458        fn inline_align(_context: fidl::encoding::Context) -> usize {
459            1
460        }
461
462        #[inline(always)]
463        fn inline_size(_context: fidl::encoding::Context) -> usize {
464            1
465        }
466        #[inline(always)]
467        fn encode_is_copy() -> bool {
468            true
469        }
470
471        #[inline(always)]
472        fn decode_is_copy() -> bool {
473            true
474        }
475    }
476
477    unsafe impl<D: fidl::encoding::ResourceDialect>
478        fidl::encoding::Encode<ControllerSpawnConsoleResponse, D>
479        for &ControllerSpawnConsoleResponse
480    {
481        #[inline]
482        unsafe fn encode(
483            self,
484            encoder: &mut fidl::encoding::Encoder<'_, D>,
485            offset: usize,
486            _depth: fidl::encoding::Depth,
487        ) -> fidl::Result<()> {
488            encoder.debug_check_bounds::<ControllerSpawnConsoleResponse>(offset);
489            unsafe {
490                // Copy the object into the buffer.
491                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
492                (buf_ptr as *mut ControllerSpawnConsoleResponse)
493                    .write_unaligned((self as *const ControllerSpawnConsoleResponse).read());
494                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
495                // done second because the memcpy will write garbage to these bytes.
496            }
497            Ok(())
498        }
499    }
500    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u8, D>>
501        fidl::encoding::Encode<ControllerSpawnConsoleResponse, D> for (T0,)
502    {
503        #[inline]
504        unsafe fn encode(
505            self,
506            encoder: &mut fidl::encoding::Encoder<'_, D>,
507            offset: usize,
508            depth: fidl::encoding::Depth,
509        ) -> fidl::Result<()> {
510            encoder.debug_check_bounds::<ControllerSpawnConsoleResponse>(offset);
511            // Zero out padding regions. There's no need to apply masks
512            // because the unmasked parts will be overwritten by fields.
513            // Write the fields.
514            self.0.encode(encoder, offset + 0, depth)?;
515            Ok(())
516        }
517    }
518
519    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
520        for ControllerSpawnConsoleResponse
521    {
522        #[inline(always)]
523        fn new_empty() -> Self {
524            Self { exit_code: fidl::new_empty!(u8, D) }
525        }
526
527        #[inline]
528        unsafe fn decode(
529            &mut self,
530            decoder: &mut fidl::encoding::Decoder<'_, D>,
531            offset: usize,
532            _depth: fidl::encoding::Depth,
533        ) -> fidl::Result<()> {
534            decoder.debug_check_bounds::<Self>(offset);
535            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
536            // Verify that padding bytes are zero.
537            // Copy from the buffer into the object.
538            unsafe {
539                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
540            }
541            Ok(())
542        }
543    }
544
545    impl ControllerGetVmoReferencesRequest {
546        #[inline(always)]
547        fn max_ordinal_present(&self) -> u64 {
548            if let Some(_) = self.koid {
549                return 1;
550            }
551            0
552        }
553    }
554
555    impl fidl::encoding::ValueTypeMarker for ControllerGetVmoReferencesRequest {
556        type Borrowed<'a> = &'a Self;
557        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
558            value
559        }
560    }
561
562    unsafe impl fidl::encoding::TypeMarker for ControllerGetVmoReferencesRequest {
563        type Owned = Self;
564
565        #[inline(always)]
566        fn inline_align(_context: fidl::encoding::Context) -> usize {
567            8
568        }
569
570        #[inline(always)]
571        fn inline_size(_context: fidl::encoding::Context) -> usize {
572            16
573        }
574    }
575
576    unsafe impl<D: fidl::encoding::ResourceDialect>
577        fidl::encoding::Encode<ControllerGetVmoReferencesRequest, D>
578        for &ControllerGetVmoReferencesRequest
579    {
580        unsafe fn encode(
581            self,
582            encoder: &mut fidl::encoding::Encoder<'_, D>,
583            offset: usize,
584            mut depth: fidl::encoding::Depth,
585        ) -> fidl::Result<()> {
586            encoder.debug_check_bounds::<ControllerGetVmoReferencesRequest>(offset);
587            // Vector header
588            let max_ordinal: u64 = self.max_ordinal_present();
589            encoder.write_num(max_ordinal, offset);
590            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
591            // Calling encoder.out_of_line_offset(0) is not allowed.
592            if max_ordinal == 0 {
593                return Ok(());
594            }
595            depth.increment()?;
596            let envelope_size = 8;
597            let bytes_len = max_ordinal as usize * envelope_size;
598            #[allow(unused_variables)]
599            let offset = encoder.out_of_line_offset(bytes_len);
600            let mut _prev_end_offset: usize = 0;
601            if 1 > max_ordinal {
602                return Ok(());
603            }
604
605            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
606            // are envelope_size bytes.
607            let cur_offset: usize = (1 - 1) * envelope_size;
608
609            // Zero reserved fields.
610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
611
612            // Safety:
613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
615            //   envelope_size bytes, there is always sufficient room.
616            fidl::encoding::encode_in_envelope_optional::<u64, D>(
617                self.koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
618                encoder,
619                offset + cur_offset,
620                depth,
621            )?;
622
623            _prev_end_offset = cur_offset + envelope_size;
624
625            Ok(())
626        }
627    }
628
629    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
630        for ControllerGetVmoReferencesRequest
631    {
632        #[inline(always)]
633        fn new_empty() -> Self {
634            Self::default()
635        }
636
637        unsafe fn decode(
638            &mut self,
639            decoder: &mut fidl::encoding::Decoder<'_, D>,
640            offset: usize,
641            mut depth: fidl::encoding::Depth,
642        ) -> fidl::Result<()> {
643            decoder.debug_check_bounds::<Self>(offset);
644            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
645                None => return Err(fidl::Error::NotNullable),
646                Some(len) => len,
647            };
648            // Calling decoder.out_of_line_offset(0) is not allowed.
649            if len == 0 {
650                return Ok(());
651            };
652            depth.increment()?;
653            let envelope_size = 8;
654            let bytes_len = len * envelope_size;
655            let offset = decoder.out_of_line_offset(bytes_len)?;
656            // Decode the envelope for each type.
657            let mut _next_ordinal_to_read = 0;
658            let mut next_offset = offset;
659            let end_offset = offset + bytes_len;
660            _next_ordinal_to_read += 1;
661            if next_offset >= end_offset {
662                return Ok(());
663            }
664
665            // Decode unknown envelopes for gaps in ordinals.
666            while _next_ordinal_to_read < 1 {
667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
668                _next_ordinal_to_read += 1;
669                next_offset += envelope_size;
670            }
671
672            let next_out_of_line = decoder.next_out_of_line();
673            let handles_before = decoder.remaining_handles();
674            if let Some((inlined, num_bytes, num_handles)) =
675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
676            {
677                let member_inline_size =
678                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
679                if inlined != (member_inline_size <= 4) {
680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
681                }
682                let inner_offset;
683                let mut inner_depth = depth.clone();
684                if inlined {
685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
686                    inner_offset = next_offset;
687                } else {
688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
689                    inner_depth.increment()?;
690                }
691                let val_ref = self.koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
692                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
694                {
695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
696                }
697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
699                }
700            }
701
702            next_offset += envelope_size;
703
704            // Decode the remaining unknown envelopes.
705            while next_offset < end_offset {
706                _next_ordinal_to_read += 1;
707                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
708                next_offset += envelope_size;
709            }
710
711            Ok(())
712        }
713    }
714
715    impl ControllerSendSignalRequest {
716        #[inline(always)]
717        fn max_ordinal_present(&self) -> u64 {
718            if let Some(_) = self.signal {
719                return 2;
720            }
721            if let Some(_) = self.pid {
722                return 1;
723            }
724            0
725        }
726    }
727
728    impl fidl::encoding::ValueTypeMarker for ControllerSendSignalRequest {
729        type Borrowed<'a> = &'a Self;
730        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
731            value
732        }
733    }
734
735    unsafe impl fidl::encoding::TypeMarker for ControllerSendSignalRequest {
736        type Owned = Self;
737
738        #[inline(always)]
739        fn inline_align(_context: fidl::encoding::Context) -> usize {
740            8
741        }
742
743        #[inline(always)]
744        fn inline_size(_context: fidl::encoding::Context) -> usize {
745            16
746        }
747    }
748
749    unsafe impl<D: fidl::encoding::ResourceDialect>
750        fidl::encoding::Encode<ControllerSendSignalRequest, D> for &ControllerSendSignalRequest
751    {
752        unsafe fn encode(
753            self,
754            encoder: &mut fidl::encoding::Encoder<'_, D>,
755            offset: usize,
756            mut depth: fidl::encoding::Depth,
757        ) -> fidl::Result<()> {
758            encoder.debug_check_bounds::<ControllerSendSignalRequest>(offset);
759            // Vector header
760            let max_ordinal: u64 = self.max_ordinal_present();
761            encoder.write_num(max_ordinal, offset);
762            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
763            // Calling encoder.out_of_line_offset(0) is not allowed.
764            if max_ordinal == 0 {
765                return Ok(());
766            }
767            depth.increment()?;
768            let envelope_size = 8;
769            let bytes_len = max_ordinal as usize * envelope_size;
770            #[allow(unused_variables)]
771            let offset = encoder.out_of_line_offset(bytes_len);
772            let mut _prev_end_offset: usize = 0;
773            if 1 > max_ordinal {
774                return Ok(());
775            }
776
777            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
778            // are envelope_size bytes.
779            let cur_offset: usize = (1 - 1) * envelope_size;
780
781            // Zero reserved fields.
782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
783
784            // Safety:
785            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
786            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
787            //   envelope_size bytes, there is always sufficient room.
788            fidl::encoding::encode_in_envelope_optional::<i32, D>(
789                self.pid.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
790                encoder,
791                offset + cur_offset,
792                depth,
793            )?;
794
795            _prev_end_offset = cur_offset + envelope_size;
796            if 2 > max_ordinal {
797                return Ok(());
798            }
799
800            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
801            // are envelope_size bytes.
802            let cur_offset: usize = (2 - 1) * envelope_size;
803
804            // Zero reserved fields.
805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
806
807            // Safety:
808            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
809            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
810            //   envelope_size bytes, there is always sufficient room.
811            fidl::encoding::encode_in_envelope_optional::<u64, D>(
812                self.signal.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
813                encoder,
814                offset + cur_offset,
815                depth,
816            )?;
817
818            _prev_end_offset = cur_offset + envelope_size;
819
820            Ok(())
821        }
822    }
823
824    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
825        for ControllerSendSignalRequest
826    {
827        #[inline(always)]
828        fn new_empty() -> Self {
829            Self::default()
830        }
831
832        unsafe fn decode(
833            &mut self,
834            decoder: &mut fidl::encoding::Decoder<'_, D>,
835            offset: usize,
836            mut depth: fidl::encoding::Depth,
837        ) -> fidl::Result<()> {
838            decoder.debug_check_bounds::<Self>(offset);
839            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
840                None => return Err(fidl::Error::NotNullable),
841                Some(len) => len,
842            };
843            // Calling decoder.out_of_line_offset(0) is not allowed.
844            if len == 0 {
845                return Ok(());
846            };
847            depth.increment()?;
848            let envelope_size = 8;
849            let bytes_len = len * envelope_size;
850            let offset = decoder.out_of_line_offset(bytes_len)?;
851            // Decode the envelope for each type.
852            let mut _next_ordinal_to_read = 0;
853            let mut next_offset = offset;
854            let end_offset = offset + bytes_len;
855            _next_ordinal_to_read += 1;
856            if next_offset >= end_offset {
857                return Ok(());
858            }
859
860            // Decode unknown envelopes for gaps in ordinals.
861            while _next_ordinal_to_read < 1 {
862                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
863                _next_ordinal_to_read += 1;
864                next_offset += envelope_size;
865            }
866
867            let next_out_of_line = decoder.next_out_of_line();
868            let handles_before = decoder.remaining_handles();
869            if let Some((inlined, num_bytes, num_handles)) =
870                fidl::encoding::decode_envelope_header(decoder, next_offset)?
871            {
872                let member_inline_size =
873                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
874                if inlined != (member_inline_size <= 4) {
875                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
876                }
877                let inner_offset;
878                let mut inner_depth = depth.clone();
879                if inlined {
880                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
881                    inner_offset = next_offset;
882                } else {
883                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
884                    inner_depth.increment()?;
885                }
886                let val_ref = self.pid.get_or_insert_with(|| fidl::new_empty!(i32, D));
887                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
889                {
890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
891                }
892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
894                }
895            }
896
897            next_offset += envelope_size;
898            _next_ordinal_to_read += 1;
899            if next_offset >= end_offset {
900                return Ok(());
901            }
902
903            // Decode unknown envelopes for gaps in ordinals.
904            while _next_ordinal_to_read < 2 {
905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
906                _next_ordinal_to_read += 1;
907                next_offset += envelope_size;
908            }
909
910            let next_out_of_line = decoder.next_out_of_line();
911            let handles_before = decoder.remaining_handles();
912            if let Some((inlined, num_bytes, num_handles)) =
913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
914            {
915                let member_inline_size =
916                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
917                if inlined != (member_inline_size <= 4) {
918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
919                }
920                let inner_offset;
921                let mut inner_depth = depth.clone();
922                if inlined {
923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
924                    inner_offset = next_offset;
925                } else {
926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
927                    inner_depth.increment()?;
928                }
929                let val_ref = self.signal.get_or_insert_with(|| fidl::new_empty!(u64, D));
930                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
931                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
932                {
933                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
934                }
935                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
936                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
937                }
938            }
939
940            next_offset += envelope_size;
941
942            // Decode the remaining unknown envelopes.
943            while next_offset < end_offset {
944                _next_ordinal_to_read += 1;
945                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
946                next_offset += envelope_size;
947            }
948
949            Ok(())
950        }
951    }
952
953    impl ControllerGetVmoReferencesResponse {
954        #[inline(always)]
955        fn max_ordinal_present(&self) -> u64 {
956            if let Some(_) = self.references {
957                return 1;
958            }
959            0
960        }
961    }
962
963    impl fidl::encoding::ValueTypeMarker for ControllerGetVmoReferencesResponse {
964        type Borrowed<'a> = &'a Self;
965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
966            value
967        }
968    }
969
970    unsafe impl fidl::encoding::TypeMarker for ControllerGetVmoReferencesResponse {
971        type Owned = Self;
972
973        #[inline(always)]
974        fn inline_align(_context: fidl::encoding::Context) -> usize {
975            8
976        }
977
978        #[inline(always)]
979        fn inline_size(_context: fidl::encoding::Context) -> usize {
980            16
981        }
982    }
983
984    unsafe impl<D: fidl::encoding::ResourceDialect>
985        fidl::encoding::Encode<ControllerGetVmoReferencesResponse, D>
986        for &ControllerGetVmoReferencesResponse
987    {
988        unsafe fn encode(
989            self,
990            encoder: &mut fidl::encoding::Encoder<'_, D>,
991            offset: usize,
992            mut depth: fidl::encoding::Depth,
993        ) -> fidl::Result<()> {
994            encoder.debug_check_bounds::<ControllerGetVmoReferencesResponse>(offset);
995            // Vector header
996            let max_ordinal: u64 = self.max_ordinal_present();
997            encoder.write_num(max_ordinal, offset);
998            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
999            // Calling encoder.out_of_line_offset(0) is not allowed.
1000            if max_ordinal == 0 {
1001                return Ok(());
1002            }
1003            depth.increment()?;
1004            let envelope_size = 8;
1005            let bytes_len = max_ordinal as usize * envelope_size;
1006            #[allow(unused_variables)]
1007            let offset = encoder.out_of_line_offset(bytes_len);
1008            let mut _prev_end_offset: usize = 0;
1009            if 1 > max_ordinal {
1010                return Ok(());
1011            }
1012
1013            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1014            // are envelope_size bytes.
1015            let cur_offset: usize = (1 - 1) * envelope_size;
1016
1017            // Zero reserved fields.
1018            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1019
1020            // Safety:
1021            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1022            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1023            //   envelope_size bytes, there is always sufficient room.
1024            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<VmoReference>, D>(
1025            self.references.as_ref().map(<fidl::encoding::UnboundedVector<VmoReference> as fidl::encoding::ValueTypeMarker>::borrow),
1026            encoder, offset + cur_offset, depth
1027        )?;
1028
1029            _prev_end_offset = cur_offset + envelope_size;
1030
1031            Ok(())
1032        }
1033    }
1034
1035    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1036        for ControllerGetVmoReferencesResponse
1037    {
1038        #[inline(always)]
1039        fn new_empty() -> Self {
1040            Self::default()
1041        }
1042
1043        unsafe fn decode(
1044            &mut self,
1045            decoder: &mut fidl::encoding::Decoder<'_, D>,
1046            offset: usize,
1047            mut depth: fidl::encoding::Depth,
1048        ) -> fidl::Result<()> {
1049            decoder.debug_check_bounds::<Self>(offset);
1050            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1051                None => return Err(fidl::Error::NotNullable),
1052                Some(len) => len,
1053            };
1054            // Calling decoder.out_of_line_offset(0) is not allowed.
1055            if len == 0 {
1056                return Ok(());
1057            };
1058            depth.increment()?;
1059            let envelope_size = 8;
1060            let bytes_len = len * envelope_size;
1061            let offset = decoder.out_of_line_offset(bytes_len)?;
1062            // Decode the envelope for each type.
1063            let mut _next_ordinal_to_read = 0;
1064            let mut next_offset = offset;
1065            let end_offset = offset + bytes_len;
1066            _next_ordinal_to_read += 1;
1067            if next_offset >= end_offset {
1068                return Ok(());
1069            }
1070
1071            // Decode unknown envelopes for gaps in ordinals.
1072            while _next_ordinal_to_read < 1 {
1073                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1074                _next_ordinal_to_read += 1;
1075                next_offset += envelope_size;
1076            }
1077
1078            let next_out_of_line = decoder.next_out_of_line();
1079            let handles_before = decoder.remaining_handles();
1080            if let Some((inlined, num_bytes, num_handles)) =
1081                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1082            {
1083                let member_inline_size = <fidl::encoding::UnboundedVector<VmoReference> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1084                if inlined != (member_inline_size <= 4) {
1085                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1086                }
1087                let inner_offset;
1088                let mut inner_depth = depth.clone();
1089                if inlined {
1090                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1091                    inner_offset = next_offset;
1092                } else {
1093                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1094                    inner_depth.increment()?;
1095                }
1096                let val_ref = self.references.get_or_insert_with(|| {
1097                    fidl::new_empty!(fidl::encoding::UnboundedVector<VmoReference>, D)
1098                });
1099                fidl::decode!(
1100                    fidl::encoding::UnboundedVector<VmoReference>,
1101                    D,
1102                    val_ref,
1103                    decoder,
1104                    inner_offset,
1105                    inner_depth
1106                )?;
1107                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1108                {
1109                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1110                }
1111                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1112                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1113                }
1114            }
1115
1116            next_offset += envelope_size;
1117
1118            // Decode the remaining unknown envelopes.
1119            while next_offset < end_offset {
1120                _next_ordinal_to_read += 1;
1121                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1122                next_offset += envelope_size;
1123            }
1124
1125            Ok(())
1126        }
1127    }
1128
1129    impl VmoReference {
1130        #[inline(always)]
1131        fn max_ordinal_present(&self) -> u64 {
1132            if let Some(_) = self.koid {
1133                return 4;
1134            }
1135            if let Some(_) = self.fd {
1136                return 3;
1137            }
1138            if let Some(_) = self.pid {
1139                return 2;
1140            }
1141            if let Some(_) = self.process_name {
1142                return 1;
1143            }
1144            0
1145        }
1146    }
1147
1148    impl fidl::encoding::ValueTypeMarker for VmoReference {
1149        type Borrowed<'a> = &'a Self;
1150        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1151            value
1152        }
1153    }
1154
1155    unsafe impl fidl::encoding::TypeMarker for VmoReference {
1156        type Owned = Self;
1157
1158        #[inline(always)]
1159        fn inline_align(_context: fidl::encoding::Context) -> usize {
1160            8
1161        }
1162
1163        #[inline(always)]
1164        fn inline_size(_context: fidl::encoding::Context) -> usize {
1165            16
1166        }
1167    }
1168
1169    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VmoReference, D>
1170        for &VmoReference
1171    {
1172        unsafe fn encode(
1173            self,
1174            encoder: &mut fidl::encoding::Encoder<'_, D>,
1175            offset: usize,
1176            mut depth: fidl::encoding::Depth,
1177        ) -> fidl::Result<()> {
1178            encoder.debug_check_bounds::<VmoReference>(offset);
1179            // Vector header
1180            let max_ordinal: u64 = self.max_ordinal_present();
1181            encoder.write_num(max_ordinal, offset);
1182            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1183            // Calling encoder.out_of_line_offset(0) is not allowed.
1184            if max_ordinal == 0 {
1185                return Ok(());
1186            }
1187            depth.increment()?;
1188            let envelope_size = 8;
1189            let bytes_len = max_ordinal as usize * envelope_size;
1190            #[allow(unused_variables)]
1191            let offset = encoder.out_of_line_offset(bytes_len);
1192            let mut _prev_end_offset: usize = 0;
1193            if 1 > max_ordinal {
1194                return Ok(());
1195            }
1196
1197            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1198            // are envelope_size bytes.
1199            let cur_offset: usize = (1 - 1) * envelope_size;
1200
1201            // Zero reserved fields.
1202            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1203
1204            // Safety:
1205            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1206            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1207            //   envelope_size bytes, there is always sufficient room.
1208            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1209                self.process_name.as_ref().map(
1210                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1211                ),
1212                encoder,
1213                offset + cur_offset,
1214                depth,
1215            )?;
1216
1217            _prev_end_offset = cur_offset + envelope_size;
1218            if 2 > max_ordinal {
1219                return Ok(());
1220            }
1221
1222            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1223            // are envelope_size bytes.
1224            let cur_offset: usize = (2 - 1) * envelope_size;
1225
1226            // Zero reserved fields.
1227            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1228
1229            // Safety:
1230            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1231            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1232            //   envelope_size bytes, there is always sufficient room.
1233            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1234                self.pid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1235                encoder,
1236                offset + cur_offset,
1237                depth,
1238            )?;
1239
1240            _prev_end_offset = cur_offset + envelope_size;
1241            if 3 > max_ordinal {
1242                return Ok(());
1243            }
1244
1245            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1246            // are envelope_size bytes.
1247            let cur_offset: usize = (3 - 1) * envelope_size;
1248
1249            // Zero reserved fields.
1250            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1251
1252            // Safety:
1253            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1254            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1255            //   envelope_size bytes, there is always sufficient room.
1256            fidl::encoding::encode_in_envelope_optional::<i32, D>(
1257                self.fd.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1258                encoder,
1259                offset + cur_offset,
1260                depth,
1261            )?;
1262
1263            _prev_end_offset = cur_offset + envelope_size;
1264            if 4 > max_ordinal {
1265                return Ok(());
1266            }
1267
1268            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1269            // are envelope_size bytes.
1270            let cur_offset: usize = (4 - 1) * envelope_size;
1271
1272            // Zero reserved fields.
1273            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1274
1275            // Safety:
1276            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1277            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1278            //   envelope_size bytes, there is always sufficient room.
1279            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1280                self.koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1281                encoder,
1282                offset + cur_offset,
1283                depth,
1284            )?;
1285
1286            _prev_end_offset = cur_offset + envelope_size;
1287
1288            Ok(())
1289        }
1290    }
1291
1292    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VmoReference {
1293        #[inline(always)]
1294        fn new_empty() -> Self {
1295            Self::default()
1296        }
1297
1298        unsafe fn decode(
1299            &mut self,
1300            decoder: &mut fidl::encoding::Decoder<'_, D>,
1301            offset: usize,
1302            mut depth: fidl::encoding::Depth,
1303        ) -> fidl::Result<()> {
1304            decoder.debug_check_bounds::<Self>(offset);
1305            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1306                None => return Err(fidl::Error::NotNullable),
1307                Some(len) => len,
1308            };
1309            // Calling decoder.out_of_line_offset(0) is not allowed.
1310            if len == 0 {
1311                return Ok(());
1312            };
1313            depth.increment()?;
1314            let envelope_size = 8;
1315            let bytes_len = len * envelope_size;
1316            let offset = decoder.out_of_line_offset(bytes_len)?;
1317            // Decode the envelope for each type.
1318            let mut _next_ordinal_to_read = 0;
1319            let mut next_offset = offset;
1320            let end_offset = offset + bytes_len;
1321            _next_ordinal_to_read += 1;
1322            if next_offset >= end_offset {
1323                return Ok(());
1324            }
1325
1326            // Decode unknown envelopes for gaps in ordinals.
1327            while _next_ordinal_to_read < 1 {
1328                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1329                _next_ordinal_to_read += 1;
1330                next_offset += envelope_size;
1331            }
1332
1333            let next_out_of_line = decoder.next_out_of_line();
1334            let handles_before = decoder.remaining_handles();
1335            if let Some((inlined, num_bytes, num_handles)) =
1336                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1337            {
1338                let member_inline_size =
1339                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1340                        decoder.context,
1341                    );
1342                if inlined != (member_inline_size <= 4) {
1343                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1344                }
1345                let inner_offset;
1346                let mut inner_depth = depth.clone();
1347                if inlined {
1348                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1349                    inner_offset = next_offset;
1350                } else {
1351                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1352                    inner_depth.increment()?;
1353                }
1354                let val_ref = self
1355                    .process_name
1356                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1357                fidl::decode!(
1358                    fidl::encoding::UnboundedString,
1359                    D,
1360                    val_ref,
1361                    decoder,
1362                    inner_offset,
1363                    inner_depth
1364                )?;
1365                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1366                {
1367                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1368                }
1369                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1370                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1371                }
1372            }
1373
1374            next_offset += envelope_size;
1375            _next_ordinal_to_read += 1;
1376            if next_offset >= end_offset {
1377                return Ok(());
1378            }
1379
1380            // Decode unknown envelopes for gaps in ordinals.
1381            while _next_ordinal_to_read < 2 {
1382                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1383                _next_ordinal_to_read += 1;
1384                next_offset += envelope_size;
1385            }
1386
1387            let next_out_of_line = decoder.next_out_of_line();
1388            let handles_before = decoder.remaining_handles();
1389            if let Some((inlined, num_bytes, num_handles)) =
1390                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1391            {
1392                let member_inline_size =
1393                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1394                if inlined != (member_inline_size <= 4) {
1395                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1396                }
1397                let inner_offset;
1398                let mut inner_depth = depth.clone();
1399                if inlined {
1400                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1401                    inner_offset = next_offset;
1402                } else {
1403                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1404                    inner_depth.increment()?;
1405                }
1406                let val_ref = self.pid.get_or_insert_with(|| fidl::new_empty!(u64, D));
1407                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1408                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1409                {
1410                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1411                }
1412                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1413                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1414                }
1415            }
1416
1417            next_offset += envelope_size;
1418            _next_ordinal_to_read += 1;
1419            if next_offset >= end_offset {
1420                return Ok(());
1421            }
1422
1423            // Decode unknown envelopes for gaps in ordinals.
1424            while _next_ordinal_to_read < 3 {
1425                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1426                _next_ordinal_to_read += 1;
1427                next_offset += envelope_size;
1428            }
1429
1430            let next_out_of_line = decoder.next_out_of_line();
1431            let handles_before = decoder.remaining_handles();
1432            if let Some((inlined, num_bytes, num_handles)) =
1433                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1434            {
1435                let member_inline_size =
1436                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1437                if inlined != (member_inline_size <= 4) {
1438                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1439                }
1440                let inner_offset;
1441                let mut inner_depth = depth.clone();
1442                if inlined {
1443                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1444                    inner_offset = next_offset;
1445                } else {
1446                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1447                    inner_depth.increment()?;
1448                }
1449                let val_ref = self.fd.get_or_insert_with(|| fidl::new_empty!(i32, D));
1450                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1451                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1452                {
1453                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1454                }
1455                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1456                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1457                }
1458            }
1459
1460            next_offset += envelope_size;
1461            _next_ordinal_to_read += 1;
1462            if next_offset >= end_offset {
1463                return Ok(());
1464            }
1465
1466            // Decode unknown envelopes for gaps in ordinals.
1467            while _next_ordinal_to_read < 4 {
1468                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1469                _next_ordinal_to_read += 1;
1470                next_offset += envelope_size;
1471            }
1472
1473            let next_out_of_line = decoder.next_out_of_line();
1474            let handles_before = decoder.remaining_handles();
1475            if let Some((inlined, num_bytes, num_handles)) =
1476                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1477            {
1478                let member_inline_size =
1479                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1480                if inlined != (member_inline_size <= 4) {
1481                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1482                }
1483                let inner_offset;
1484                let mut inner_depth = depth.clone();
1485                if inlined {
1486                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1487                    inner_offset = next_offset;
1488                } else {
1489                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1490                    inner_depth.increment()?;
1491                }
1492                let val_ref = self.koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
1493                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1495                {
1496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1497                }
1498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1500                }
1501            }
1502
1503            next_offset += envelope_size;
1504
1505            // Decode the remaining unknown envelopes.
1506            while next_offset < end_offset {
1507                _next_ordinal_to_read += 1;
1508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1509                next_offset += envelope_size;
1510            }
1511
1512            Ok(())
1513        }
1514    }
1515}