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