Skip to main content

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