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