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