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