Skip to main content

fidl_fuchsia_update_installer_common/
fidl_fuchsia_update_installer_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
11pub type AttemptId = String;
12
13/// Why cancel failed.
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
15#[repr(u32)]
16pub enum CancelError {
17    /// There is no update attempt in progress.
18    NoUpdateInProgress = 1,
19    /// The update attempt has past the point that can be canceled.
20    UpdateCannotBeCanceled = 2,
21    /// The given attempt id does not match the current update attempt.
22    AttemptIdMismatch = 3,
23    /// The number of cancel requests has exceeded the limit.
24    CancelLimitExceeded = 4,
25}
26
27impl CancelError {
28    #[inline]
29    pub fn from_primitive(prim: u32) -> Option<Self> {
30        match prim {
31            1 => Some(Self::NoUpdateInProgress),
32            2 => Some(Self::UpdateCannotBeCanceled),
33            3 => Some(Self::AttemptIdMismatch),
34            4 => Some(Self::CancelLimitExceeded),
35            _ => None,
36        }
37    }
38
39    #[inline]
40    pub const fn into_primitive(self) -> u32 {
41        self as u32
42    }
43}
44
45/// The set of values provided when an installation attempt fails on [`State.fetch`].
46#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
47#[repr(u32)]
48pub enum FetchFailureReason {
49    /// The fetch failed because of some other reason.
50    Internal = 0,
51    /// The fetch failed because the system does not have enough space to fetch a package.
52    OutOfSpace = 1,
53}
54
55impl FetchFailureReason {
56    #[inline]
57    pub fn from_primitive(prim: u32) -> Option<Self> {
58        match prim {
59            0 => Some(Self::Internal),
60            1 => Some(Self::OutOfSpace),
61            _ => None,
62        }
63    }
64
65    #[inline]
66    pub const fn into_primitive(self) -> u32 {
67        self as u32
68    }
69}
70
71/// Who or what initiated the update installation.
72#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
73#[repr(u32)]
74pub enum Initiator {
75    /// The install was initiated by an interactive user, or the user is
76    /// otherwise blocked and waiting for the result of this update.
77    User = 0,
78    /// The install was initiated by a service, in the background.
79    Service = 1,
80}
81
82impl Initiator {
83    #[inline]
84    pub fn from_primitive(prim: u32) -> Option<Self> {
85        match prim {
86            0 => Some(Self::User),
87            1 => Some(Self::Service),
88            _ => None,
89        }
90    }
91
92    #[inline]
93    pub const fn into_primitive(self) -> u32 {
94        self as u32
95    }
96}
97
98/// The set of values provided when an installation attempt fails on [`State.prepare`].
99#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
100#[repr(u32)]
101pub enum PrepareFailureReason {
102    /// The prepare failed because of some other reason.
103    Internal = 0,
104    /// The prepare failed because the system does not have enough space to fetch
105    /// the update package.
106    OutOfSpace = 1,
107    /// The prepare failed because the system cannot downgrade across a version boundary. Not all
108    /// unsupported downgrades will fail with this error -- just the ones the system can detect. For
109    /// more context, see [RFC-0071](/docs/contribute/governance/rfcs/0071_ota_backstop.md).
110    UnsupportedDowngrade = 2,
111}
112
113impl PrepareFailureReason {
114    #[inline]
115    pub fn from_primitive(prim: u32) -> Option<Self> {
116        match prim {
117            0 => Some(Self::Internal),
118            1 => Some(Self::OutOfSpace),
119            2 => Some(Self::UnsupportedDowngrade),
120            _ => None,
121        }
122    }
123
124    #[inline]
125    pub const fn into_primitive(self) -> u32 {
126        self as u32
127    }
128}
129
130/// Why resume failed.
131#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
132#[repr(u32)]
133pub enum ResumeError {
134    /// There is no update attempt in progress.
135    NoUpdateInProgress = 1,
136    /// The given attempt id does not match the current update attempt.
137    AttemptIdMismatch = 2,
138}
139
140impl ResumeError {
141    #[inline]
142    pub fn from_primitive(prim: u32) -> Option<Self> {
143        match prim {
144            1 => Some(Self::NoUpdateInProgress),
145            2 => Some(Self::AttemptIdMismatch),
146            _ => None,
147        }
148    }
149
150    #[inline]
151    pub const fn into_primitive(self) -> u32 {
152        self as u32
153    }
154}
155
156/// The set of values provided when an installation attempt fails on [`State.stage`].
157#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
158#[repr(u32)]
159pub enum StageFailureReason {
160    /// The stage failed because of some other reason.
161    Internal = 0,
162    /// The stage failed because the system does not have enough space to fetch a package.
163    OutOfSpace = 1,
164}
165
166impl StageFailureReason {
167    #[inline]
168    pub fn from_primitive(prim: u32) -> Option<Self> {
169        match prim {
170            0 => Some(Self::Internal),
171            1 => Some(Self::OutOfSpace),
172            _ => None,
173        }
174    }
175
176    #[inline]
177    pub const fn into_primitive(self) -> u32 {
178        self as u32
179    }
180}
181
182/// Why suspend failed.
183#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
184#[repr(u32)]
185pub enum SuspendError {
186    /// There is no update attempt in progress.
187    NoUpdateInProgress = 1,
188    /// The current update attempt has reached its suspend limit.
189    SuspendLimitExceeded = 2,
190    /// The given attempt id does not match the current update attempt.
191    AttemptIdMismatch = 3,
192}
193
194impl SuspendError {
195    #[inline]
196    pub fn from_primitive(prim: u32) -> Option<Self> {
197        match prim {
198            1 => Some(Self::NoUpdateInProgress),
199            2 => Some(Self::SuspendLimitExceeded),
200            3 => Some(Self::AttemptIdMismatch),
201            _ => None,
202        }
203    }
204
205    #[inline]
206    pub const fn into_primitive(self) -> u32 {
207        self as u32
208    }
209}
210
211/// The set of values that are returned by an request to start an update.
212#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
213#[repr(u32)]
214pub enum UpdateNotStartedReason {
215    /// There was already another update attempt in progress when this request was
216    /// made.  A new update attempt will not be started.
217    AlreadyInProgress = 1,
218}
219
220impl UpdateNotStartedReason {
221    #[inline]
222    pub fn from_primitive(prim: u32) -> Option<Self> {
223        match prim {
224            1 => Some(Self::AlreadyInProgress),
225            _ => None,
226        }
227    }
228
229    #[inline]
230    pub const fn into_primitive(self) -> u32 {
231        self as u32
232    }
233}
234
235#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
236pub struct InstallerCancelUpdateRequest {
237    pub attempt_id: Option<String>,
238}
239
240impl fidl::Persistable for InstallerCancelUpdateRequest {}
241
242#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
243pub struct InstallerMonitorUpdateResponse {
244    pub attached: bool,
245}
246
247impl fidl::Persistable for InstallerMonitorUpdateResponse {}
248
249#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
250pub struct InstallerResumeUpdateRequest {
251    pub attempt_id: Option<String>,
252}
253
254impl fidl::Persistable for InstallerResumeUpdateRequest {}
255
256#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
257pub struct InstallerSuspendUpdateRequest {
258    pub attempt_id: Option<String>,
259}
260
261impl fidl::Persistable for InstallerSuspendUpdateRequest {}
262
263#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
264pub struct InstallerStartUpdateResponse {
265    pub attempt_id: String,
266}
267
268impl fidl::Persistable for InstallerStartUpdateResponse {}
269
270#[derive(Clone, Debug, PartialEq)]
271pub struct MonitorOnStateRequest {
272    pub state: State,
273}
274
275impl fidl::Persistable for MonitorOnStateRequest {}
276
277/// A byte range.
278#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
279#[repr(C)]
280pub struct Range {
281    /// The start offset of the range in bytes.
282    pub offset: u64,
283    /// The size of the range in bytes.
284    pub size: u64,
285}
286
287impl fidl::Persistable for Range {}
288
289/// Data associated with [`State.canceled`].
290#[derive(Clone, Debug, Default, PartialEq)]
291pub struct CanceledData {
292    #[doc(hidden)]
293    pub __source_breaking: fidl::marker::SourceBreaking,
294}
295
296impl fidl::Persistable for CanceledData {}
297
298/// Data associated with [`State.commit`].
299#[derive(Clone, Debug, Default, PartialEq)]
300pub struct CommitData {
301    pub info: Option<UpdateInfo>,
302    pub progress: Option<InstallationProgress>,
303    #[doc(hidden)]
304    pub __source_breaking: fidl::marker::SourceBreaking,
305}
306
307impl fidl::Persistable for CommitData {}
308
309/// Data associated with [`State.complete`].
310#[derive(Clone, Debug, Default, PartialEq)]
311pub struct CompleteData {
312    pub info: Option<UpdateInfo>,
313    pub progress: Option<InstallationProgress>,
314    #[doc(hidden)]
315    pub __source_breaking: fidl::marker::SourceBreaking,
316}
317
318impl fidl::Persistable for CompleteData {}
319
320/// Data associated with [`State.defer_reboot`].
321#[derive(Clone, Debug, Default, PartialEq)]
322pub struct DeferRebootData {
323    pub info: Option<UpdateInfo>,
324    pub progress: Option<InstallationProgress>,
325    #[doc(hidden)]
326    pub __source_breaking: fidl::marker::SourceBreaking,
327}
328
329impl fidl::Persistable for DeferRebootData {}
330
331/// Data associated with [`State.fail_commit`].
332#[derive(Clone, Debug, Default, PartialEq)]
333pub struct FailCommitData {
334    pub info: Option<UpdateInfo>,
335    pub progress: Option<InstallationProgress>,
336    #[doc(hidden)]
337    pub __source_breaking: fidl::marker::SourceBreaking,
338}
339
340impl fidl::Persistable for FailCommitData {}
341
342/// Data associated with [`State.fail_fetch`].
343#[derive(Clone, Debug, Default, PartialEq)]
344pub struct FailFetchData {
345    pub info: Option<UpdateInfo>,
346    pub progress: Option<InstallationProgress>,
347    pub reason: Option<FetchFailureReason>,
348    #[doc(hidden)]
349    pub __source_breaking: fidl::marker::SourceBreaking,
350}
351
352impl fidl::Persistable for FailFetchData {}
353
354/// Data associated with [`State.fail_prepare`].
355#[derive(Clone, Debug, Default, PartialEq)]
356pub struct FailPrepareData {
357    pub reason: Option<PrepareFailureReason>,
358    #[doc(hidden)]
359    pub __source_breaking: fidl::marker::SourceBreaking,
360}
361
362impl fidl::Persistable for FailPrepareData {}
363
364/// Data associated with [`State.fail_stage`].
365#[derive(Clone, Debug, Default, PartialEq)]
366pub struct FailStageData {
367    pub info: Option<UpdateInfo>,
368    pub progress: Option<InstallationProgress>,
369    pub reason: Option<StageFailureReason>,
370    #[doc(hidden)]
371    pub __source_breaking: fidl::marker::SourceBreaking,
372}
373
374impl fidl::Persistable for FailStageData {}
375
376/// Data associated with [`State.fetch`].
377#[derive(Clone, Debug, Default, PartialEq)]
378pub struct FetchData {
379    pub info: Option<UpdateInfo>,
380    pub progress: Option<InstallationProgress>,
381    #[doc(hidden)]
382    pub __source_breaking: fidl::marker::SourceBreaking,
383}
384
385impl fidl::Persistable for FetchData {}
386
387/// Current progress for an installation attempt.
388#[derive(Clone, Debug, Default, PartialEq)]
389pub struct InstallationProgress {
390    /// The fraction [0-1.0f] of the installation that has been completed.
391    pub fraction_completed: Option<f32>,
392    /// The number of bytes downloaded during this installation attempt. Less
393    /// than or equal to [`UpdateInfo.download_size`] and only present if that
394    /// field is also present.
395    pub bytes_downloaded: Option<u64>,
396    #[doc(hidden)]
397    pub __source_breaking: fidl::marker::SourceBreaking,
398}
399
400impl fidl::Persistable for InstallationProgress {}
401
402/// Configuration options for an update attempt.
403#[derive(Clone, Debug, Default, PartialEq)]
404pub struct Options {
405    /// What initiated this update attempt. Required.
406    pub initiator: Option<Initiator>,
407    /// If an update is already in progress, it's acceptable to instead attach a
408    /// Monitor to that in-progress update instead of failing this request to
409    /// install the update.  Setting this option to true may convert situations
410    /// that would have resulted in the ALREADY_IN_PROGRESS to be treated as
411    /// non-error cases. A controller, if provided, will be ignored if the
412    /// running update attempt already has a controller.
413    pub allow_attach_to_existing_attempt: Option<bool>,
414    /// Determines if the installer should update the recovery partition if an
415    /// update is available.  Defaults to true.
416    pub should_write_recovery: Option<bool>,
417    /// The range of the resource indicated by the [`Installer.StartUpdate`] url that corresponds to
418    /// the manifest. Can only be set when the [`Installer.StartUpdate`] url has scheme "http[s]",
419    /// i.e. when using the blob-based update manifest. Defaults to the entire resource.
420    pub manifest_range: Option<Range>,
421    #[doc(hidden)]
422    pub __source_breaking: fidl::marker::SourceBreaking,
423}
424
425impl fidl::Persistable for Options {}
426
427/// Data associated with [`State.prepare`].
428#[derive(Clone, Debug, Default, PartialEq)]
429pub struct PrepareData {
430    #[doc(hidden)]
431    pub __source_breaking: fidl::marker::SourceBreaking,
432}
433
434impl fidl::Persistable for PrepareData {}
435
436/// Data associated with [`State.reboot`].
437#[derive(Clone, Debug, Default, PartialEq)]
438pub struct RebootData {
439    pub info: Option<UpdateInfo>,
440    pub progress: Option<InstallationProgress>,
441    #[doc(hidden)]
442    pub __source_breaking: fidl::marker::SourceBreaking,
443}
444
445impl fidl::Persistable for RebootData {}
446
447/// Data associated with [`State.stage`].
448#[derive(Clone, Debug, Default, PartialEq)]
449pub struct StageData {
450    pub info: Option<UpdateInfo>,
451    pub progress: Option<InstallationProgress>,
452    #[doc(hidden)]
453    pub __source_breaking: fidl::marker::SourceBreaking,
454}
455
456impl fidl::Persistable for StageData {}
457
458/// Metadata for an update.  Once a field is populated during an installation
459/// attempt, the value will not change.
460#[derive(Clone, Debug, Default, PartialEq)]
461pub struct UpdateInfo {
462    /// The total number of bytes that may be downloaded to apply this update.
463    /// Optional, the installer may not be able to provide this value.
464    pub download_size: Option<u64>,
465    #[doc(hidden)]
466    pub __source_breaking: fidl::marker::SourceBreaking,
467}
468
469impl fidl::Persistable for UpdateInfo {}
470
471/// Data associated with [`State.wait_to_reboot`].
472#[derive(Clone, Debug, Default, PartialEq)]
473pub struct WaitToRebootData {
474    pub info: Option<UpdateInfo>,
475    pub progress: Option<InstallationProgress>,
476    #[doc(hidden)]
477    pub __source_breaking: fidl::marker::SourceBreaking,
478}
479
480impl fidl::Persistable for WaitToRebootData {}
481
482/// The set of states that a [`Monitor`] can receive during an update
483/// installation attempt.
484///
485/// An installation attempt ends when it enters a terminal state, denoted below
486/// as the states on the right-hand side of the diagram with no arrows leading
487/// out of them.
488///
489/// # State Machine Diagram
490///
491/// ```
492///                       +----------------+     +----------------+
493///            +----------|    prepare     |---->|  fail_prepare  |
494///            |          +----------------+     +----------------+
495///            |                  |
496///            |                  v
497///            |          +----------------+     +----------------+
498///            +----------|     stage      |---->|   fail_stage   |
499///            |          +----------------+     +----------------+
500///            |                  |
501///            |                  v
502///            |          +----------------+     +----------------+
503///            +----------|     fetch      |---->|   fail_fetch   |
504///            |          +----------------+     +----------------+
505///            |                  |
506///            |                  v
507///            |          +----------------+     +----------------+
508///            +----------|     commit     |---->|   fail_commit  |
509///            |          +----------------+     +----------------+
510///            v                  |
511///    +----------------+         |              +----------------+
512///    |    canceled    |         +------------> |    complete    |
513///    +----------------+         |              +----------------+
514///                               v
515///                       +----------------+     +----------------+
516///                       | wait_to_reboot |---->|  defer_reboot  |
517///                       +----------------+     +----------------+
518///                               |
519///                               |              +----------------+
520///                               +------------->|     reboot     |
521///                                              +----------------+
522/// ```
523#[derive(Clone, Debug, PartialEq)]
524pub enum State {
525    /// Fetching required metadata to begin the update and verifying system
526    /// state.
527    ///
528    /// Next States:
529    /// * `stage` system is ready to install the update.
530    /// * `fail_prepare` on error.
531    /// * `canceled` on cancel.
532    Prepare(PrepareData),
533    /// Fetching and writing kernel and firmware images.
534    ///
535    /// Next States:
536    /// * `fetch`  required kernel and firmware images are written.
537    /// * `fail_stage`  on error.
538    /// * `canceled` on cancel.
539    Stage(StageData),
540    /// Fetching packages.
541    ///
542    /// Next States:
543    /// * `commit` packages were fetched successfully.
544    /// * `fail_fetch` on error.
545    /// * `canceled` on cancel.
546    Fetch(FetchData),
547    /// Prepare to switch over to the new system by writing the packages
548    /// and switching the active partition.
549    ///
550    /// Next States:
551    /// * `wait_to_reboot` if a reboot is necessary to complete the update.
552    /// * `complete` if no reboot is necessary to complete the update.
553    /// * `fail_commit` on error.
554    /// * `canceled` on cancel.
555    Commit(CommitData),
556    /// The system is configured to boot the updated OS on next boot, and the
557    /// installer is waiting for the trigger to reboot the system.
558    ///
559    /// Next States:
560    /// * `reboot` when the installer decides it is time to initiate the reboot.
561    /// * `defer_reboot` if the initiator specifically requests to not reboot.
562    WaitToReboot(WaitToRebootData),
563    /// The installer has initiated a system reboot into the updated OS.
564    ///
565    /// **This is a terminal state**
566    Reboot(RebootData),
567    /// The initiator specifically requested to skip the reboot, but a reboot is
568    /// still required to complete the update.
569    ///
570    /// **This is a terminal state**
571    DeferReboot(DeferRebootData),
572    /// The update is complete and no reboot was required.
573    ///
574    /// **This is a terminal state**
575    Complete(CompleteData),
576    /// An error occurred while preparing the install.
577    ///
578    /// **This is a terminal state**
579    FailPrepare(FailPrepareData),
580    /// An error occurred while staging the images for the OS.
581    ///
582    /// **This is a terminal state**
583    FailStage(FailStageData),
584    /// An error occurred while fetching the required artifacts.
585    ///
586    /// **This is a terminal state**
587    FailFetch(FailFetchData),
588    /// An error occured while switching partitions.
589    ///
590    /// **This is a terminal state**
591    FailCommit(FailCommitData),
592    /// The update is canceled.
593    ///
594    /// **This is a terminal state**
595    Canceled(CanceledData),
596}
597
598impl State {
599    #[inline]
600    pub fn ordinal(&self) -> u64 {
601        match *self {
602            Self::Prepare(_) => 1,
603            Self::Stage(_) => 2,
604            Self::Fetch(_) => 3,
605            Self::Commit(_) => 4,
606            Self::WaitToReboot(_) => 5,
607            Self::Reboot(_) => 6,
608            Self::DeferReboot(_) => 7,
609            Self::Complete(_) => 8,
610            Self::FailPrepare(_) => 9,
611            Self::FailStage(_) => 10,
612            Self::FailFetch(_) => 11,
613            Self::FailCommit(_) => 12,
614            Self::Canceled(_) => 13,
615        }
616    }
617}
618
619impl fidl::Persistable for State {}
620
621pub mod installer_ordinals {
622    pub const START_UPDATE: u64 = 0x2b1c5ba9167c320b;
623    pub const MONITOR_UPDATE: u64 = 0x21d54aa1fd825a32;
624    pub const SUSPEND_UPDATE: u64 = 0x788de328461f9950;
625    pub const RESUME_UPDATE: u64 = 0x7479e805fec33dd3;
626    pub const CANCEL_UPDATE: u64 = 0x472dec9160a1d0f;
627}
628
629pub mod monitor_ordinals {
630    pub const ON_STATE: u64 = 0x574105820d16cf26;
631}
632
633pub mod reboot_controller_ordinals {
634    pub const UNBLOCK: u64 = 0x5705625395e3d520;
635    pub const DETACH: u64 = 0x1daa560411955f16;
636}
637
638mod internal {
639    use super::*;
640    unsafe impl fidl::encoding::TypeMarker for CancelError {
641        type Owned = Self;
642
643        #[inline(always)]
644        fn inline_align(_context: fidl::encoding::Context) -> usize {
645            std::mem::align_of::<u32>()
646        }
647
648        #[inline(always)]
649        fn inline_size(_context: fidl::encoding::Context) -> usize {
650            std::mem::size_of::<u32>()
651        }
652
653        #[inline(always)]
654        fn encode_is_copy() -> bool {
655            true
656        }
657
658        #[inline(always)]
659        fn decode_is_copy() -> bool {
660            false
661        }
662    }
663
664    impl fidl::encoding::ValueTypeMarker for CancelError {
665        type Borrowed<'a> = Self;
666        #[inline(always)]
667        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
668            *value
669        }
670    }
671
672    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CancelError {
673        #[inline]
674        unsafe fn encode(
675            self,
676            encoder: &mut fidl::encoding::Encoder<'_, D>,
677            offset: usize,
678            _depth: fidl::encoding::Depth,
679        ) -> fidl::Result<()> {
680            encoder.debug_check_bounds::<Self>(offset);
681            encoder.write_num(self.into_primitive(), offset);
682            Ok(())
683        }
684    }
685
686    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CancelError {
687        #[inline(always)]
688        fn new_empty() -> Self {
689            Self::NoUpdateInProgress
690        }
691
692        #[inline]
693        unsafe fn decode(
694            &mut self,
695            decoder: &mut fidl::encoding::Decoder<'_, D>,
696            offset: usize,
697            _depth: fidl::encoding::Depth,
698        ) -> fidl::Result<()> {
699            decoder.debug_check_bounds::<Self>(offset);
700            let prim = decoder.read_num::<u32>(offset);
701
702            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
703            Ok(())
704        }
705    }
706    unsafe impl fidl::encoding::TypeMarker for FetchFailureReason {
707        type Owned = Self;
708
709        #[inline(always)]
710        fn inline_align(_context: fidl::encoding::Context) -> usize {
711            std::mem::align_of::<u32>()
712        }
713
714        #[inline(always)]
715        fn inline_size(_context: fidl::encoding::Context) -> usize {
716            std::mem::size_of::<u32>()
717        }
718
719        #[inline(always)]
720        fn encode_is_copy() -> bool {
721            true
722        }
723
724        #[inline(always)]
725        fn decode_is_copy() -> bool {
726            false
727        }
728    }
729
730    impl fidl::encoding::ValueTypeMarker for FetchFailureReason {
731        type Borrowed<'a> = Self;
732        #[inline(always)]
733        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
734            *value
735        }
736    }
737
738    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
739        for FetchFailureReason
740    {
741        #[inline]
742        unsafe fn encode(
743            self,
744            encoder: &mut fidl::encoding::Encoder<'_, D>,
745            offset: usize,
746            _depth: fidl::encoding::Depth,
747        ) -> fidl::Result<()> {
748            encoder.debug_check_bounds::<Self>(offset);
749            encoder.write_num(self.into_primitive(), offset);
750            Ok(())
751        }
752    }
753
754    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FetchFailureReason {
755        #[inline(always)]
756        fn new_empty() -> Self {
757            Self::Internal
758        }
759
760        #[inline]
761        unsafe fn decode(
762            &mut self,
763            decoder: &mut fidl::encoding::Decoder<'_, D>,
764            offset: usize,
765            _depth: fidl::encoding::Depth,
766        ) -> fidl::Result<()> {
767            decoder.debug_check_bounds::<Self>(offset);
768            let prim = decoder.read_num::<u32>(offset);
769
770            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
771            Ok(())
772        }
773    }
774    unsafe impl fidl::encoding::TypeMarker for Initiator {
775        type Owned = Self;
776
777        #[inline(always)]
778        fn inline_align(_context: fidl::encoding::Context) -> usize {
779            std::mem::align_of::<u32>()
780        }
781
782        #[inline(always)]
783        fn inline_size(_context: fidl::encoding::Context) -> usize {
784            std::mem::size_of::<u32>()
785        }
786
787        #[inline(always)]
788        fn encode_is_copy() -> bool {
789            true
790        }
791
792        #[inline(always)]
793        fn decode_is_copy() -> bool {
794            false
795        }
796    }
797
798    impl fidl::encoding::ValueTypeMarker for Initiator {
799        type Borrowed<'a> = Self;
800        #[inline(always)]
801        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
802            *value
803        }
804    }
805
806    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Initiator {
807        #[inline]
808        unsafe fn encode(
809            self,
810            encoder: &mut fidl::encoding::Encoder<'_, D>,
811            offset: usize,
812            _depth: fidl::encoding::Depth,
813        ) -> fidl::Result<()> {
814            encoder.debug_check_bounds::<Self>(offset);
815            encoder.write_num(self.into_primitive(), offset);
816            Ok(())
817        }
818    }
819
820    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Initiator {
821        #[inline(always)]
822        fn new_empty() -> Self {
823            Self::User
824        }
825
826        #[inline]
827        unsafe fn decode(
828            &mut self,
829            decoder: &mut fidl::encoding::Decoder<'_, D>,
830            offset: usize,
831            _depth: fidl::encoding::Depth,
832        ) -> fidl::Result<()> {
833            decoder.debug_check_bounds::<Self>(offset);
834            let prim = decoder.read_num::<u32>(offset);
835
836            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
837            Ok(())
838        }
839    }
840    unsafe impl fidl::encoding::TypeMarker for PrepareFailureReason {
841        type Owned = Self;
842
843        #[inline(always)]
844        fn inline_align(_context: fidl::encoding::Context) -> usize {
845            std::mem::align_of::<u32>()
846        }
847
848        #[inline(always)]
849        fn inline_size(_context: fidl::encoding::Context) -> usize {
850            std::mem::size_of::<u32>()
851        }
852
853        #[inline(always)]
854        fn encode_is_copy() -> bool {
855            true
856        }
857
858        #[inline(always)]
859        fn decode_is_copy() -> bool {
860            false
861        }
862    }
863
864    impl fidl::encoding::ValueTypeMarker for PrepareFailureReason {
865        type Borrowed<'a> = Self;
866        #[inline(always)]
867        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
868            *value
869        }
870    }
871
872    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
873        for PrepareFailureReason
874    {
875        #[inline]
876        unsafe fn encode(
877            self,
878            encoder: &mut fidl::encoding::Encoder<'_, D>,
879            offset: usize,
880            _depth: fidl::encoding::Depth,
881        ) -> fidl::Result<()> {
882            encoder.debug_check_bounds::<Self>(offset);
883            encoder.write_num(self.into_primitive(), offset);
884            Ok(())
885        }
886    }
887
888    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PrepareFailureReason {
889        #[inline(always)]
890        fn new_empty() -> Self {
891            Self::Internal
892        }
893
894        #[inline]
895        unsafe fn decode(
896            &mut self,
897            decoder: &mut fidl::encoding::Decoder<'_, D>,
898            offset: usize,
899            _depth: fidl::encoding::Depth,
900        ) -> fidl::Result<()> {
901            decoder.debug_check_bounds::<Self>(offset);
902            let prim = decoder.read_num::<u32>(offset);
903
904            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
905            Ok(())
906        }
907    }
908    unsafe impl fidl::encoding::TypeMarker for ResumeError {
909        type Owned = Self;
910
911        #[inline(always)]
912        fn inline_align(_context: fidl::encoding::Context) -> usize {
913            std::mem::align_of::<u32>()
914        }
915
916        #[inline(always)]
917        fn inline_size(_context: fidl::encoding::Context) -> usize {
918            std::mem::size_of::<u32>()
919        }
920
921        #[inline(always)]
922        fn encode_is_copy() -> bool {
923            true
924        }
925
926        #[inline(always)]
927        fn decode_is_copy() -> bool {
928            false
929        }
930    }
931
932    impl fidl::encoding::ValueTypeMarker for ResumeError {
933        type Borrowed<'a> = Self;
934        #[inline(always)]
935        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
936            *value
937        }
938    }
939
940    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ResumeError {
941        #[inline]
942        unsafe fn encode(
943            self,
944            encoder: &mut fidl::encoding::Encoder<'_, D>,
945            offset: usize,
946            _depth: fidl::encoding::Depth,
947        ) -> fidl::Result<()> {
948            encoder.debug_check_bounds::<Self>(offset);
949            encoder.write_num(self.into_primitive(), offset);
950            Ok(())
951        }
952    }
953
954    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ResumeError {
955        #[inline(always)]
956        fn new_empty() -> Self {
957            Self::NoUpdateInProgress
958        }
959
960        #[inline]
961        unsafe fn decode(
962            &mut self,
963            decoder: &mut fidl::encoding::Decoder<'_, D>,
964            offset: usize,
965            _depth: fidl::encoding::Depth,
966        ) -> fidl::Result<()> {
967            decoder.debug_check_bounds::<Self>(offset);
968            let prim = decoder.read_num::<u32>(offset);
969
970            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
971            Ok(())
972        }
973    }
974    unsafe impl fidl::encoding::TypeMarker for StageFailureReason {
975        type Owned = Self;
976
977        #[inline(always)]
978        fn inline_align(_context: fidl::encoding::Context) -> usize {
979            std::mem::align_of::<u32>()
980        }
981
982        #[inline(always)]
983        fn inline_size(_context: fidl::encoding::Context) -> usize {
984            std::mem::size_of::<u32>()
985        }
986
987        #[inline(always)]
988        fn encode_is_copy() -> bool {
989            true
990        }
991
992        #[inline(always)]
993        fn decode_is_copy() -> bool {
994            false
995        }
996    }
997
998    impl fidl::encoding::ValueTypeMarker for StageFailureReason {
999        type Borrowed<'a> = Self;
1000        #[inline(always)]
1001        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1002            *value
1003        }
1004    }
1005
1006    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1007        for StageFailureReason
1008    {
1009        #[inline]
1010        unsafe fn encode(
1011            self,
1012            encoder: &mut fidl::encoding::Encoder<'_, D>,
1013            offset: usize,
1014            _depth: fidl::encoding::Depth,
1015        ) -> fidl::Result<()> {
1016            encoder.debug_check_bounds::<Self>(offset);
1017            encoder.write_num(self.into_primitive(), offset);
1018            Ok(())
1019        }
1020    }
1021
1022    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StageFailureReason {
1023        #[inline(always)]
1024        fn new_empty() -> Self {
1025            Self::Internal
1026        }
1027
1028        #[inline]
1029        unsafe fn decode(
1030            &mut self,
1031            decoder: &mut fidl::encoding::Decoder<'_, D>,
1032            offset: usize,
1033            _depth: fidl::encoding::Depth,
1034        ) -> fidl::Result<()> {
1035            decoder.debug_check_bounds::<Self>(offset);
1036            let prim = decoder.read_num::<u32>(offset);
1037
1038            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1039            Ok(())
1040        }
1041    }
1042    unsafe impl fidl::encoding::TypeMarker for SuspendError {
1043        type Owned = Self;
1044
1045        #[inline(always)]
1046        fn inline_align(_context: fidl::encoding::Context) -> usize {
1047            std::mem::align_of::<u32>()
1048        }
1049
1050        #[inline(always)]
1051        fn inline_size(_context: fidl::encoding::Context) -> usize {
1052            std::mem::size_of::<u32>()
1053        }
1054
1055        #[inline(always)]
1056        fn encode_is_copy() -> bool {
1057            true
1058        }
1059
1060        #[inline(always)]
1061        fn decode_is_copy() -> bool {
1062            false
1063        }
1064    }
1065
1066    impl fidl::encoding::ValueTypeMarker for SuspendError {
1067        type Borrowed<'a> = Self;
1068        #[inline(always)]
1069        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1070            *value
1071        }
1072    }
1073
1074    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SuspendError {
1075        #[inline]
1076        unsafe fn encode(
1077            self,
1078            encoder: &mut fidl::encoding::Encoder<'_, D>,
1079            offset: usize,
1080            _depth: fidl::encoding::Depth,
1081        ) -> fidl::Result<()> {
1082            encoder.debug_check_bounds::<Self>(offset);
1083            encoder.write_num(self.into_primitive(), offset);
1084            Ok(())
1085        }
1086    }
1087
1088    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SuspendError {
1089        #[inline(always)]
1090        fn new_empty() -> Self {
1091            Self::NoUpdateInProgress
1092        }
1093
1094        #[inline]
1095        unsafe fn decode(
1096            &mut self,
1097            decoder: &mut fidl::encoding::Decoder<'_, D>,
1098            offset: usize,
1099            _depth: fidl::encoding::Depth,
1100        ) -> fidl::Result<()> {
1101            decoder.debug_check_bounds::<Self>(offset);
1102            let prim = decoder.read_num::<u32>(offset);
1103
1104            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1105            Ok(())
1106        }
1107    }
1108    unsafe impl fidl::encoding::TypeMarker for UpdateNotStartedReason {
1109        type Owned = Self;
1110
1111        #[inline(always)]
1112        fn inline_align(_context: fidl::encoding::Context) -> usize {
1113            std::mem::align_of::<u32>()
1114        }
1115
1116        #[inline(always)]
1117        fn inline_size(_context: fidl::encoding::Context) -> usize {
1118            std::mem::size_of::<u32>()
1119        }
1120
1121        #[inline(always)]
1122        fn encode_is_copy() -> bool {
1123            true
1124        }
1125
1126        #[inline(always)]
1127        fn decode_is_copy() -> bool {
1128            false
1129        }
1130    }
1131
1132    impl fidl::encoding::ValueTypeMarker for UpdateNotStartedReason {
1133        type Borrowed<'a> = Self;
1134        #[inline(always)]
1135        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1136            *value
1137        }
1138    }
1139
1140    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1141        for UpdateNotStartedReason
1142    {
1143        #[inline]
1144        unsafe fn encode(
1145            self,
1146            encoder: &mut fidl::encoding::Encoder<'_, D>,
1147            offset: usize,
1148            _depth: fidl::encoding::Depth,
1149        ) -> fidl::Result<()> {
1150            encoder.debug_check_bounds::<Self>(offset);
1151            encoder.write_num(self.into_primitive(), offset);
1152            Ok(())
1153        }
1154    }
1155
1156    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1157        for UpdateNotStartedReason
1158    {
1159        #[inline(always)]
1160        fn new_empty() -> Self {
1161            Self::AlreadyInProgress
1162        }
1163
1164        #[inline]
1165        unsafe fn decode(
1166            &mut self,
1167            decoder: &mut fidl::encoding::Decoder<'_, D>,
1168            offset: usize,
1169            _depth: fidl::encoding::Depth,
1170        ) -> fidl::Result<()> {
1171            decoder.debug_check_bounds::<Self>(offset);
1172            let prim = decoder.read_num::<u32>(offset);
1173
1174            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1175            Ok(())
1176        }
1177    }
1178
1179    impl fidl::encoding::ValueTypeMarker for InstallerCancelUpdateRequest {
1180        type Borrowed<'a> = &'a Self;
1181        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1182            value
1183        }
1184    }
1185
1186    unsafe impl fidl::encoding::TypeMarker for InstallerCancelUpdateRequest {
1187        type Owned = Self;
1188
1189        #[inline(always)]
1190        fn inline_align(_context: fidl::encoding::Context) -> usize {
1191            8
1192        }
1193
1194        #[inline(always)]
1195        fn inline_size(_context: fidl::encoding::Context) -> usize {
1196            16
1197        }
1198    }
1199
1200    unsafe impl<D: fidl::encoding::ResourceDialect>
1201        fidl::encoding::Encode<InstallerCancelUpdateRequest, D> for &InstallerCancelUpdateRequest
1202    {
1203        #[inline]
1204        unsafe fn encode(
1205            self,
1206            encoder: &mut fidl::encoding::Encoder<'_, D>,
1207            offset: usize,
1208            _depth: fidl::encoding::Depth,
1209        ) -> fidl::Result<()> {
1210            encoder.debug_check_bounds::<InstallerCancelUpdateRequest>(offset);
1211            // Delegate to tuple encoding.
1212            fidl::encoding::Encode::<InstallerCancelUpdateRequest, D>::encode(
1213                (
1214                    <fidl::encoding::Optional<fidl::encoding::BoundedString<36>> as fidl::encoding::ValueTypeMarker>::borrow(&self.attempt_id),
1215                ),
1216                encoder, offset, _depth
1217            )
1218        }
1219    }
1220    unsafe impl<
1221        D: fidl::encoding::ResourceDialect,
1222        T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<36>>, D>,
1223    > fidl::encoding::Encode<InstallerCancelUpdateRequest, D> for (T0,)
1224    {
1225        #[inline]
1226        unsafe fn encode(
1227            self,
1228            encoder: &mut fidl::encoding::Encoder<'_, D>,
1229            offset: usize,
1230            depth: fidl::encoding::Depth,
1231        ) -> fidl::Result<()> {
1232            encoder.debug_check_bounds::<InstallerCancelUpdateRequest>(offset);
1233            // Zero out padding regions. There's no need to apply masks
1234            // because the unmasked parts will be overwritten by fields.
1235            // Write the fields.
1236            self.0.encode(encoder, offset + 0, depth)?;
1237            Ok(())
1238        }
1239    }
1240
1241    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1242        for InstallerCancelUpdateRequest
1243    {
1244        #[inline(always)]
1245        fn new_empty() -> Self {
1246            Self {
1247                attempt_id: fidl::new_empty!(
1248                    fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1249                    D
1250                ),
1251            }
1252        }
1253
1254        #[inline]
1255        unsafe fn decode(
1256            &mut self,
1257            decoder: &mut fidl::encoding::Decoder<'_, D>,
1258            offset: usize,
1259            _depth: fidl::encoding::Depth,
1260        ) -> fidl::Result<()> {
1261            decoder.debug_check_bounds::<Self>(offset);
1262            // Verify that padding bytes are zero.
1263            fidl::decode!(
1264                fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1265                D,
1266                &mut self.attempt_id,
1267                decoder,
1268                offset + 0,
1269                _depth
1270            )?;
1271            Ok(())
1272        }
1273    }
1274
1275    impl fidl::encoding::ValueTypeMarker for InstallerMonitorUpdateResponse {
1276        type Borrowed<'a> = &'a Self;
1277        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1278            value
1279        }
1280    }
1281
1282    unsafe impl fidl::encoding::TypeMarker for InstallerMonitorUpdateResponse {
1283        type Owned = Self;
1284
1285        #[inline(always)]
1286        fn inline_align(_context: fidl::encoding::Context) -> usize {
1287            1
1288        }
1289
1290        #[inline(always)]
1291        fn inline_size(_context: fidl::encoding::Context) -> usize {
1292            1
1293        }
1294    }
1295
1296    unsafe impl<D: fidl::encoding::ResourceDialect>
1297        fidl::encoding::Encode<InstallerMonitorUpdateResponse, D>
1298        for &InstallerMonitorUpdateResponse
1299    {
1300        #[inline]
1301        unsafe fn encode(
1302            self,
1303            encoder: &mut fidl::encoding::Encoder<'_, D>,
1304            offset: usize,
1305            _depth: fidl::encoding::Depth,
1306        ) -> fidl::Result<()> {
1307            encoder.debug_check_bounds::<InstallerMonitorUpdateResponse>(offset);
1308            // Delegate to tuple encoding.
1309            fidl::encoding::Encode::<InstallerMonitorUpdateResponse, D>::encode(
1310                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.attached),),
1311                encoder,
1312                offset,
1313                _depth,
1314            )
1315        }
1316    }
1317    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
1318        fidl::encoding::Encode<InstallerMonitorUpdateResponse, D> for (T0,)
1319    {
1320        #[inline]
1321        unsafe fn encode(
1322            self,
1323            encoder: &mut fidl::encoding::Encoder<'_, D>,
1324            offset: usize,
1325            depth: fidl::encoding::Depth,
1326        ) -> fidl::Result<()> {
1327            encoder.debug_check_bounds::<InstallerMonitorUpdateResponse>(offset);
1328            // Zero out padding regions. There's no need to apply masks
1329            // because the unmasked parts will be overwritten by fields.
1330            // Write the fields.
1331            self.0.encode(encoder, offset + 0, depth)?;
1332            Ok(())
1333        }
1334    }
1335
1336    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1337        for InstallerMonitorUpdateResponse
1338    {
1339        #[inline(always)]
1340        fn new_empty() -> Self {
1341            Self { attached: fidl::new_empty!(bool, D) }
1342        }
1343
1344        #[inline]
1345        unsafe fn decode(
1346            &mut self,
1347            decoder: &mut fidl::encoding::Decoder<'_, D>,
1348            offset: usize,
1349            _depth: fidl::encoding::Depth,
1350        ) -> fidl::Result<()> {
1351            decoder.debug_check_bounds::<Self>(offset);
1352            // Verify that padding bytes are zero.
1353            fidl::decode!(bool, D, &mut self.attached, decoder, offset + 0, _depth)?;
1354            Ok(())
1355        }
1356    }
1357
1358    impl fidl::encoding::ValueTypeMarker for InstallerResumeUpdateRequest {
1359        type Borrowed<'a> = &'a Self;
1360        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1361            value
1362        }
1363    }
1364
1365    unsafe impl fidl::encoding::TypeMarker for InstallerResumeUpdateRequest {
1366        type Owned = Self;
1367
1368        #[inline(always)]
1369        fn inline_align(_context: fidl::encoding::Context) -> usize {
1370            8
1371        }
1372
1373        #[inline(always)]
1374        fn inline_size(_context: fidl::encoding::Context) -> usize {
1375            16
1376        }
1377    }
1378
1379    unsafe impl<D: fidl::encoding::ResourceDialect>
1380        fidl::encoding::Encode<InstallerResumeUpdateRequest, D> for &InstallerResumeUpdateRequest
1381    {
1382        #[inline]
1383        unsafe fn encode(
1384            self,
1385            encoder: &mut fidl::encoding::Encoder<'_, D>,
1386            offset: usize,
1387            _depth: fidl::encoding::Depth,
1388        ) -> fidl::Result<()> {
1389            encoder.debug_check_bounds::<InstallerResumeUpdateRequest>(offset);
1390            // Delegate to tuple encoding.
1391            fidl::encoding::Encode::<InstallerResumeUpdateRequest, D>::encode(
1392                (
1393                    <fidl::encoding::Optional<fidl::encoding::BoundedString<36>> as fidl::encoding::ValueTypeMarker>::borrow(&self.attempt_id),
1394                ),
1395                encoder, offset, _depth
1396            )
1397        }
1398    }
1399    unsafe impl<
1400        D: fidl::encoding::ResourceDialect,
1401        T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<36>>, D>,
1402    > fidl::encoding::Encode<InstallerResumeUpdateRequest, D> for (T0,)
1403    {
1404        #[inline]
1405        unsafe fn encode(
1406            self,
1407            encoder: &mut fidl::encoding::Encoder<'_, D>,
1408            offset: usize,
1409            depth: fidl::encoding::Depth,
1410        ) -> fidl::Result<()> {
1411            encoder.debug_check_bounds::<InstallerResumeUpdateRequest>(offset);
1412            // Zero out padding regions. There's no need to apply masks
1413            // because the unmasked parts will be overwritten by fields.
1414            // Write the fields.
1415            self.0.encode(encoder, offset + 0, depth)?;
1416            Ok(())
1417        }
1418    }
1419
1420    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1421        for InstallerResumeUpdateRequest
1422    {
1423        #[inline(always)]
1424        fn new_empty() -> Self {
1425            Self {
1426                attempt_id: fidl::new_empty!(
1427                    fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1428                    D
1429                ),
1430            }
1431        }
1432
1433        #[inline]
1434        unsafe fn decode(
1435            &mut self,
1436            decoder: &mut fidl::encoding::Decoder<'_, D>,
1437            offset: usize,
1438            _depth: fidl::encoding::Depth,
1439        ) -> fidl::Result<()> {
1440            decoder.debug_check_bounds::<Self>(offset);
1441            // Verify that padding bytes are zero.
1442            fidl::decode!(
1443                fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1444                D,
1445                &mut self.attempt_id,
1446                decoder,
1447                offset + 0,
1448                _depth
1449            )?;
1450            Ok(())
1451        }
1452    }
1453
1454    impl fidl::encoding::ValueTypeMarker for InstallerSuspendUpdateRequest {
1455        type Borrowed<'a> = &'a Self;
1456        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1457            value
1458        }
1459    }
1460
1461    unsafe impl fidl::encoding::TypeMarker for InstallerSuspendUpdateRequest {
1462        type Owned = Self;
1463
1464        #[inline(always)]
1465        fn inline_align(_context: fidl::encoding::Context) -> usize {
1466            8
1467        }
1468
1469        #[inline(always)]
1470        fn inline_size(_context: fidl::encoding::Context) -> usize {
1471            16
1472        }
1473    }
1474
1475    unsafe impl<D: fidl::encoding::ResourceDialect>
1476        fidl::encoding::Encode<InstallerSuspendUpdateRequest, D>
1477        for &InstallerSuspendUpdateRequest
1478    {
1479        #[inline]
1480        unsafe fn encode(
1481            self,
1482            encoder: &mut fidl::encoding::Encoder<'_, D>,
1483            offset: usize,
1484            _depth: fidl::encoding::Depth,
1485        ) -> fidl::Result<()> {
1486            encoder.debug_check_bounds::<InstallerSuspendUpdateRequest>(offset);
1487            // Delegate to tuple encoding.
1488            fidl::encoding::Encode::<InstallerSuspendUpdateRequest, D>::encode(
1489                (
1490                    <fidl::encoding::Optional<fidl::encoding::BoundedString<36>> as fidl::encoding::ValueTypeMarker>::borrow(&self.attempt_id),
1491                ),
1492                encoder, offset, _depth
1493            )
1494        }
1495    }
1496    unsafe impl<
1497        D: fidl::encoding::ResourceDialect,
1498        T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<36>>, D>,
1499    > fidl::encoding::Encode<InstallerSuspendUpdateRequest, D> for (T0,)
1500    {
1501        #[inline]
1502        unsafe fn encode(
1503            self,
1504            encoder: &mut fidl::encoding::Encoder<'_, D>,
1505            offset: usize,
1506            depth: fidl::encoding::Depth,
1507        ) -> fidl::Result<()> {
1508            encoder.debug_check_bounds::<InstallerSuspendUpdateRequest>(offset);
1509            // Zero out padding regions. There's no need to apply masks
1510            // because the unmasked parts will be overwritten by fields.
1511            // Write the fields.
1512            self.0.encode(encoder, offset + 0, depth)?;
1513            Ok(())
1514        }
1515    }
1516
1517    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1518        for InstallerSuspendUpdateRequest
1519    {
1520        #[inline(always)]
1521        fn new_empty() -> Self {
1522            Self {
1523                attempt_id: fidl::new_empty!(
1524                    fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1525                    D
1526                ),
1527            }
1528        }
1529
1530        #[inline]
1531        unsafe fn decode(
1532            &mut self,
1533            decoder: &mut fidl::encoding::Decoder<'_, D>,
1534            offset: usize,
1535            _depth: fidl::encoding::Depth,
1536        ) -> fidl::Result<()> {
1537            decoder.debug_check_bounds::<Self>(offset);
1538            // Verify that padding bytes are zero.
1539            fidl::decode!(
1540                fidl::encoding::Optional<fidl::encoding::BoundedString<36>>,
1541                D,
1542                &mut self.attempt_id,
1543                decoder,
1544                offset + 0,
1545                _depth
1546            )?;
1547            Ok(())
1548        }
1549    }
1550
1551    impl fidl::encoding::ValueTypeMarker for InstallerStartUpdateResponse {
1552        type Borrowed<'a> = &'a Self;
1553        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1554            value
1555        }
1556    }
1557
1558    unsafe impl fidl::encoding::TypeMarker for InstallerStartUpdateResponse {
1559        type Owned = Self;
1560
1561        #[inline(always)]
1562        fn inline_align(_context: fidl::encoding::Context) -> usize {
1563            8
1564        }
1565
1566        #[inline(always)]
1567        fn inline_size(_context: fidl::encoding::Context) -> usize {
1568            16
1569        }
1570    }
1571
1572    unsafe impl<D: fidl::encoding::ResourceDialect>
1573        fidl::encoding::Encode<InstallerStartUpdateResponse, D> for &InstallerStartUpdateResponse
1574    {
1575        #[inline]
1576        unsafe fn encode(
1577            self,
1578            encoder: &mut fidl::encoding::Encoder<'_, D>,
1579            offset: usize,
1580            _depth: fidl::encoding::Depth,
1581        ) -> fidl::Result<()> {
1582            encoder.debug_check_bounds::<InstallerStartUpdateResponse>(offset);
1583            // Delegate to tuple encoding.
1584            fidl::encoding::Encode::<InstallerStartUpdateResponse, D>::encode(
1585                (<fidl::encoding::BoundedString<36> as fidl::encoding::ValueTypeMarker>::borrow(
1586                    &self.attempt_id,
1587                ),),
1588                encoder,
1589                offset,
1590                _depth,
1591            )
1592        }
1593    }
1594    unsafe impl<
1595        D: fidl::encoding::ResourceDialect,
1596        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<36>, D>,
1597    > fidl::encoding::Encode<InstallerStartUpdateResponse, D> for (T0,)
1598    {
1599        #[inline]
1600        unsafe fn encode(
1601            self,
1602            encoder: &mut fidl::encoding::Encoder<'_, D>,
1603            offset: usize,
1604            depth: fidl::encoding::Depth,
1605        ) -> fidl::Result<()> {
1606            encoder.debug_check_bounds::<InstallerStartUpdateResponse>(offset);
1607            // Zero out padding regions. There's no need to apply masks
1608            // because the unmasked parts will be overwritten by fields.
1609            // Write the fields.
1610            self.0.encode(encoder, offset + 0, depth)?;
1611            Ok(())
1612        }
1613    }
1614
1615    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1616        for InstallerStartUpdateResponse
1617    {
1618        #[inline(always)]
1619        fn new_empty() -> Self {
1620            Self { attempt_id: fidl::new_empty!(fidl::encoding::BoundedString<36>, D) }
1621        }
1622
1623        #[inline]
1624        unsafe fn decode(
1625            &mut self,
1626            decoder: &mut fidl::encoding::Decoder<'_, D>,
1627            offset: usize,
1628            _depth: fidl::encoding::Depth,
1629        ) -> fidl::Result<()> {
1630            decoder.debug_check_bounds::<Self>(offset);
1631            // Verify that padding bytes are zero.
1632            fidl::decode!(
1633                fidl::encoding::BoundedString<36>,
1634                D,
1635                &mut self.attempt_id,
1636                decoder,
1637                offset + 0,
1638                _depth
1639            )?;
1640            Ok(())
1641        }
1642    }
1643
1644    impl fidl::encoding::ValueTypeMarker for MonitorOnStateRequest {
1645        type Borrowed<'a> = &'a Self;
1646        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1647            value
1648        }
1649    }
1650
1651    unsafe impl fidl::encoding::TypeMarker for MonitorOnStateRequest {
1652        type Owned = Self;
1653
1654        #[inline(always)]
1655        fn inline_align(_context: fidl::encoding::Context) -> usize {
1656            8
1657        }
1658
1659        #[inline(always)]
1660        fn inline_size(_context: fidl::encoding::Context) -> usize {
1661            16
1662        }
1663    }
1664
1665    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MonitorOnStateRequest, D>
1666        for &MonitorOnStateRequest
1667    {
1668        #[inline]
1669        unsafe fn encode(
1670            self,
1671            encoder: &mut fidl::encoding::Encoder<'_, D>,
1672            offset: usize,
1673            _depth: fidl::encoding::Depth,
1674        ) -> fidl::Result<()> {
1675            encoder.debug_check_bounds::<MonitorOnStateRequest>(offset);
1676            // Delegate to tuple encoding.
1677            fidl::encoding::Encode::<MonitorOnStateRequest, D>::encode(
1678                (<State as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
1679                encoder,
1680                offset,
1681                _depth,
1682            )
1683        }
1684    }
1685    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<State, D>>
1686        fidl::encoding::Encode<MonitorOnStateRequest, D> for (T0,)
1687    {
1688        #[inline]
1689        unsafe fn encode(
1690            self,
1691            encoder: &mut fidl::encoding::Encoder<'_, D>,
1692            offset: usize,
1693            depth: fidl::encoding::Depth,
1694        ) -> fidl::Result<()> {
1695            encoder.debug_check_bounds::<MonitorOnStateRequest>(offset);
1696            // Zero out padding regions. There's no need to apply masks
1697            // because the unmasked parts will be overwritten by fields.
1698            // Write the fields.
1699            self.0.encode(encoder, offset + 0, depth)?;
1700            Ok(())
1701        }
1702    }
1703
1704    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MonitorOnStateRequest {
1705        #[inline(always)]
1706        fn new_empty() -> Self {
1707            Self { state: fidl::new_empty!(State, D) }
1708        }
1709
1710        #[inline]
1711        unsafe fn decode(
1712            &mut self,
1713            decoder: &mut fidl::encoding::Decoder<'_, D>,
1714            offset: usize,
1715            _depth: fidl::encoding::Depth,
1716        ) -> fidl::Result<()> {
1717            decoder.debug_check_bounds::<Self>(offset);
1718            // Verify that padding bytes are zero.
1719            fidl::decode!(State, D, &mut self.state, decoder, offset + 0, _depth)?;
1720            Ok(())
1721        }
1722    }
1723
1724    impl fidl::encoding::ValueTypeMarker for Range {
1725        type Borrowed<'a> = &'a Self;
1726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1727            value
1728        }
1729    }
1730
1731    unsafe impl fidl::encoding::TypeMarker for Range {
1732        type Owned = Self;
1733
1734        #[inline(always)]
1735        fn inline_align(_context: fidl::encoding::Context) -> usize {
1736            8
1737        }
1738
1739        #[inline(always)]
1740        fn inline_size(_context: fidl::encoding::Context) -> usize {
1741            16
1742        }
1743        #[inline(always)]
1744        fn encode_is_copy() -> bool {
1745            true
1746        }
1747
1748        #[inline(always)]
1749        fn decode_is_copy() -> bool {
1750            true
1751        }
1752    }
1753
1754    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Range, D> for &Range {
1755        #[inline]
1756        unsafe fn encode(
1757            self,
1758            encoder: &mut fidl::encoding::Encoder<'_, D>,
1759            offset: usize,
1760            _depth: fidl::encoding::Depth,
1761        ) -> fidl::Result<()> {
1762            encoder.debug_check_bounds::<Range>(offset);
1763            unsafe {
1764                // Copy the object into the buffer.
1765                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1766                (buf_ptr as *mut Range).write_unaligned((self as *const Range).read());
1767                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1768                // done second because the memcpy will write garbage to these bytes.
1769            }
1770            Ok(())
1771        }
1772    }
1773    unsafe impl<
1774        D: fidl::encoding::ResourceDialect,
1775        T0: fidl::encoding::Encode<u64, D>,
1776        T1: fidl::encoding::Encode<u64, D>,
1777    > fidl::encoding::Encode<Range, D> for (T0, T1)
1778    {
1779        #[inline]
1780        unsafe fn encode(
1781            self,
1782            encoder: &mut fidl::encoding::Encoder<'_, D>,
1783            offset: usize,
1784            depth: fidl::encoding::Depth,
1785        ) -> fidl::Result<()> {
1786            encoder.debug_check_bounds::<Range>(offset);
1787            // Zero out padding regions. There's no need to apply masks
1788            // because the unmasked parts will be overwritten by fields.
1789            // Write the fields.
1790            self.0.encode(encoder, offset + 0, depth)?;
1791            self.1.encode(encoder, offset + 8, depth)?;
1792            Ok(())
1793        }
1794    }
1795
1796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Range {
1797        #[inline(always)]
1798        fn new_empty() -> Self {
1799            Self { offset: fidl::new_empty!(u64, D), size: fidl::new_empty!(u64, D) }
1800        }
1801
1802        #[inline]
1803        unsafe fn decode(
1804            &mut self,
1805            decoder: &mut fidl::encoding::Decoder<'_, D>,
1806            offset: usize,
1807            _depth: fidl::encoding::Depth,
1808        ) -> fidl::Result<()> {
1809            decoder.debug_check_bounds::<Self>(offset);
1810            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1811            // Verify that padding bytes are zero.
1812            // Copy from the buffer into the object.
1813            unsafe {
1814                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1815            }
1816            Ok(())
1817        }
1818    }
1819
1820    impl CanceledData {
1821        #[inline(always)]
1822        fn max_ordinal_present(&self) -> u64 {
1823            0
1824        }
1825    }
1826
1827    impl fidl::encoding::ValueTypeMarker for CanceledData {
1828        type Borrowed<'a> = &'a Self;
1829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1830            value
1831        }
1832    }
1833
1834    unsafe impl fidl::encoding::TypeMarker for CanceledData {
1835        type Owned = Self;
1836
1837        #[inline(always)]
1838        fn inline_align(_context: fidl::encoding::Context) -> usize {
1839            8
1840        }
1841
1842        #[inline(always)]
1843        fn inline_size(_context: fidl::encoding::Context) -> usize {
1844            16
1845        }
1846    }
1847
1848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CanceledData, D>
1849        for &CanceledData
1850    {
1851        unsafe fn encode(
1852            self,
1853            encoder: &mut fidl::encoding::Encoder<'_, D>,
1854            offset: usize,
1855            mut depth: fidl::encoding::Depth,
1856        ) -> fidl::Result<()> {
1857            encoder.debug_check_bounds::<CanceledData>(offset);
1858            // Vector header
1859            let max_ordinal: u64 = self.max_ordinal_present();
1860            encoder.write_num(max_ordinal, offset);
1861            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1862            // Calling encoder.out_of_line_offset(0) is not allowed.
1863            if max_ordinal == 0 {
1864                return Ok(());
1865            }
1866            depth.increment()?;
1867            let envelope_size = 8;
1868            let bytes_len = max_ordinal as usize * envelope_size;
1869            #[allow(unused_variables)]
1870            let offset = encoder.out_of_line_offset(bytes_len);
1871            let mut _prev_end_offset: usize = 0;
1872
1873            Ok(())
1874        }
1875    }
1876
1877    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CanceledData {
1878        #[inline(always)]
1879        fn new_empty() -> Self {
1880            Self::default()
1881        }
1882
1883        unsafe fn decode(
1884            &mut self,
1885            decoder: &mut fidl::encoding::Decoder<'_, D>,
1886            offset: usize,
1887            mut depth: fidl::encoding::Depth,
1888        ) -> fidl::Result<()> {
1889            decoder.debug_check_bounds::<Self>(offset);
1890            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1891                None => return Err(fidl::Error::NotNullable),
1892                Some(len) => len,
1893            };
1894            // Calling decoder.out_of_line_offset(0) is not allowed.
1895            if len == 0 {
1896                return Ok(());
1897            };
1898            depth.increment()?;
1899            let envelope_size = 8;
1900            let bytes_len = len * envelope_size;
1901            let offset = decoder.out_of_line_offset(bytes_len)?;
1902            // Decode the envelope for each type.
1903            let mut _next_ordinal_to_read = 0;
1904            let mut next_offset = offset;
1905            let end_offset = offset + bytes_len;
1906
1907            // Decode the remaining unknown envelopes.
1908            while next_offset < end_offset {
1909                _next_ordinal_to_read += 1;
1910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1911                next_offset += envelope_size;
1912            }
1913
1914            Ok(())
1915        }
1916    }
1917
1918    impl CommitData {
1919        #[inline(always)]
1920        fn max_ordinal_present(&self) -> u64 {
1921            if let Some(_) = self.progress {
1922                return 2;
1923            }
1924            if let Some(_) = self.info {
1925                return 1;
1926            }
1927            0
1928        }
1929    }
1930
1931    impl fidl::encoding::ValueTypeMarker for CommitData {
1932        type Borrowed<'a> = &'a Self;
1933        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1934            value
1935        }
1936    }
1937
1938    unsafe impl fidl::encoding::TypeMarker for CommitData {
1939        type Owned = Self;
1940
1941        #[inline(always)]
1942        fn inline_align(_context: fidl::encoding::Context) -> usize {
1943            8
1944        }
1945
1946        #[inline(always)]
1947        fn inline_size(_context: fidl::encoding::Context) -> usize {
1948            16
1949        }
1950    }
1951
1952    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommitData, D>
1953        for &CommitData
1954    {
1955        unsafe fn encode(
1956            self,
1957            encoder: &mut fidl::encoding::Encoder<'_, D>,
1958            offset: usize,
1959            mut depth: fidl::encoding::Depth,
1960        ) -> fidl::Result<()> {
1961            encoder.debug_check_bounds::<CommitData>(offset);
1962            // Vector header
1963            let max_ordinal: u64 = self.max_ordinal_present();
1964            encoder.write_num(max_ordinal, offset);
1965            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1966            // Calling encoder.out_of_line_offset(0) is not allowed.
1967            if max_ordinal == 0 {
1968                return Ok(());
1969            }
1970            depth.increment()?;
1971            let envelope_size = 8;
1972            let bytes_len = max_ordinal as usize * envelope_size;
1973            #[allow(unused_variables)]
1974            let offset = encoder.out_of_line_offset(bytes_len);
1975            let mut _prev_end_offset: usize = 0;
1976            if 1 > max_ordinal {
1977                return Ok(());
1978            }
1979
1980            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1981            // are envelope_size bytes.
1982            let cur_offset: usize = (1 - 1) * envelope_size;
1983
1984            // Zero reserved fields.
1985            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1986
1987            // Safety:
1988            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1989            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1990            //   envelope_size bytes, there is always sufficient room.
1991            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
1992                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
1993                encoder,
1994                offset + cur_offset,
1995                depth,
1996            )?;
1997
1998            _prev_end_offset = cur_offset + envelope_size;
1999            if 2 > max_ordinal {
2000                return Ok(());
2001            }
2002
2003            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2004            // are envelope_size bytes.
2005            let cur_offset: usize = (2 - 1) * envelope_size;
2006
2007            // Zero reserved fields.
2008            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2009
2010            // Safety:
2011            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2012            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2013            //   envelope_size bytes, there is always sufficient room.
2014            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
2015                self.progress
2016                    .as_ref()
2017                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
2018                encoder,
2019                offset + cur_offset,
2020                depth,
2021            )?;
2022
2023            _prev_end_offset = cur_offset + envelope_size;
2024
2025            Ok(())
2026        }
2027    }
2028
2029    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommitData {
2030        #[inline(always)]
2031        fn new_empty() -> Self {
2032            Self::default()
2033        }
2034
2035        unsafe fn decode(
2036            &mut self,
2037            decoder: &mut fidl::encoding::Decoder<'_, D>,
2038            offset: usize,
2039            mut depth: fidl::encoding::Depth,
2040        ) -> fidl::Result<()> {
2041            decoder.debug_check_bounds::<Self>(offset);
2042            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2043                None => return Err(fidl::Error::NotNullable),
2044                Some(len) => len,
2045            };
2046            // Calling decoder.out_of_line_offset(0) is not allowed.
2047            if len == 0 {
2048                return Ok(());
2049            };
2050            depth.increment()?;
2051            let envelope_size = 8;
2052            let bytes_len = len * envelope_size;
2053            let offset = decoder.out_of_line_offset(bytes_len)?;
2054            // Decode the envelope for each type.
2055            let mut _next_ordinal_to_read = 0;
2056            let mut next_offset = offset;
2057            let end_offset = offset + bytes_len;
2058            _next_ordinal_to_read += 1;
2059            if next_offset >= end_offset {
2060                return Ok(());
2061            }
2062
2063            // Decode unknown envelopes for gaps in ordinals.
2064            while _next_ordinal_to_read < 1 {
2065                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2066                _next_ordinal_to_read += 1;
2067                next_offset += envelope_size;
2068            }
2069
2070            let next_out_of_line = decoder.next_out_of_line();
2071            let handles_before = decoder.remaining_handles();
2072            if let Some((inlined, num_bytes, num_handles)) =
2073                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2074            {
2075                let member_inline_size =
2076                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2077                if inlined != (member_inline_size <= 4) {
2078                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2079                }
2080                let inner_offset;
2081                let mut inner_depth = depth.clone();
2082                if inlined {
2083                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2084                    inner_offset = next_offset;
2085                } else {
2086                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2087                    inner_depth.increment()?;
2088                }
2089                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
2090                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2091                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2092                {
2093                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2094                }
2095                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2096                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2097                }
2098            }
2099
2100            next_offset += envelope_size;
2101            _next_ordinal_to_read += 1;
2102            if next_offset >= end_offset {
2103                return Ok(());
2104            }
2105
2106            // Decode unknown envelopes for gaps in ordinals.
2107            while _next_ordinal_to_read < 2 {
2108                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2109                _next_ordinal_to_read += 1;
2110                next_offset += envelope_size;
2111            }
2112
2113            let next_out_of_line = decoder.next_out_of_line();
2114            let handles_before = decoder.remaining_handles();
2115            if let Some((inlined, num_bytes, num_handles)) =
2116                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2117            {
2118                let member_inline_size =
2119                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
2120                        decoder.context,
2121                    );
2122                if inlined != (member_inline_size <= 4) {
2123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2124                }
2125                let inner_offset;
2126                let mut inner_depth = depth.clone();
2127                if inlined {
2128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2129                    inner_offset = next_offset;
2130                } else {
2131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2132                    inner_depth.increment()?;
2133                }
2134                let val_ref =
2135                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
2136                fidl::decode!(
2137                    InstallationProgress,
2138                    D,
2139                    val_ref,
2140                    decoder,
2141                    inner_offset,
2142                    inner_depth
2143                )?;
2144                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2145                {
2146                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2147                }
2148                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2149                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2150                }
2151            }
2152
2153            next_offset += envelope_size;
2154
2155            // Decode the remaining unknown envelopes.
2156            while next_offset < end_offset {
2157                _next_ordinal_to_read += 1;
2158                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2159                next_offset += envelope_size;
2160            }
2161
2162            Ok(())
2163        }
2164    }
2165
2166    impl CompleteData {
2167        #[inline(always)]
2168        fn max_ordinal_present(&self) -> u64 {
2169            if let Some(_) = self.progress {
2170                return 2;
2171            }
2172            if let Some(_) = self.info {
2173                return 1;
2174            }
2175            0
2176        }
2177    }
2178
2179    impl fidl::encoding::ValueTypeMarker for CompleteData {
2180        type Borrowed<'a> = &'a Self;
2181        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2182            value
2183        }
2184    }
2185
2186    unsafe impl fidl::encoding::TypeMarker for CompleteData {
2187        type Owned = Self;
2188
2189        #[inline(always)]
2190        fn inline_align(_context: fidl::encoding::Context) -> usize {
2191            8
2192        }
2193
2194        #[inline(always)]
2195        fn inline_size(_context: fidl::encoding::Context) -> usize {
2196            16
2197        }
2198    }
2199
2200    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompleteData, D>
2201        for &CompleteData
2202    {
2203        unsafe fn encode(
2204            self,
2205            encoder: &mut fidl::encoding::Encoder<'_, D>,
2206            offset: usize,
2207            mut depth: fidl::encoding::Depth,
2208        ) -> fidl::Result<()> {
2209            encoder.debug_check_bounds::<CompleteData>(offset);
2210            // Vector header
2211            let max_ordinal: u64 = self.max_ordinal_present();
2212            encoder.write_num(max_ordinal, offset);
2213            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2214            // Calling encoder.out_of_line_offset(0) is not allowed.
2215            if max_ordinal == 0 {
2216                return Ok(());
2217            }
2218            depth.increment()?;
2219            let envelope_size = 8;
2220            let bytes_len = max_ordinal as usize * envelope_size;
2221            #[allow(unused_variables)]
2222            let offset = encoder.out_of_line_offset(bytes_len);
2223            let mut _prev_end_offset: usize = 0;
2224            if 1 > max_ordinal {
2225                return Ok(());
2226            }
2227
2228            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2229            // are envelope_size bytes.
2230            let cur_offset: usize = (1 - 1) * envelope_size;
2231
2232            // Zero reserved fields.
2233            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2234
2235            // Safety:
2236            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2237            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2238            //   envelope_size bytes, there is always sufficient room.
2239            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
2240                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
2241                encoder,
2242                offset + cur_offset,
2243                depth,
2244            )?;
2245
2246            _prev_end_offset = cur_offset + envelope_size;
2247            if 2 > max_ordinal {
2248                return Ok(());
2249            }
2250
2251            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2252            // are envelope_size bytes.
2253            let cur_offset: usize = (2 - 1) * envelope_size;
2254
2255            // Zero reserved fields.
2256            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2257
2258            // Safety:
2259            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2260            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2261            //   envelope_size bytes, there is always sufficient room.
2262            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
2263                self.progress
2264                    .as_ref()
2265                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
2266                encoder,
2267                offset + cur_offset,
2268                depth,
2269            )?;
2270
2271            _prev_end_offset = cur_offset + envelope_size;
2272
2273            Ok(())
2274        }
2275    }
2276
2277    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompleteData {
2278        #[inline(always)]
2279        fn new_empty() -> Self {
2280            Self::default()
2281        }
2282
2283        unsafe fn decode(
2284            &mut self,
2285            decoder: &mut fidl::encoding::Decoder<'_, D>,
2286            offset: usize,
2287            mut depth: fidl::encoding::Depth,
2288        ) -> fidl::Result<()> {
2289            decoder.debug_check_bounds::<Self>(offset);
2290            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2291                None => return Err(fidl::Error::NotNullable),
2292                Some(len) => len,
2293            };
2294            // Calling decoder.out_of_line_offset(0) is not allowed.
2295            if len == 0 {
2296                return Ok(());
2297            };
2298            depth.increment()?;
2299            let envelope_size = 8;
2300            let bytes_len = len * envelope_size;
2301            let offset = decoder.out_of_line_offset(bytes_len)?;
2302            // Decode the envelope for each type.
2303            let mut _next_ordinal_to_read = 0;
2304            let mut next_offset = offset;
2305            let end_offset = offset + bytes_len;
2306            _next_ordinal_to_read += 1;
2307            if next_offset >= end_offset {
2308                return Ok(());
2309            }
2310
2311            // Decode unknown envelopes for gaps in ordinals.
2312            while _next_ordinal_to_read < 1 {
2313                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2314                _next_ordinal_to_read += 1;
2315                next_offset += envelope_size;
2316            }
2317
2318            let next_out_of_line = decoder.next_out_of_line();
2319            let handles_before = decoder.remaining_handles();
2320            if let Some((inlined, num_bytes, num_handles)) =
2321                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2322            {
2323                let member_inline_size =
2324                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2325                if inlined != (member_inline_size <= 4) {
2326                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2327                }
2328                let inner_offset;
2329                let mut inner_depth = depth.clone();
2330                if inlined {
2331                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2332                    inner_offset = next_offset;
2333                } else {
2334                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2335                    inner_depth.increment()?;
2336                }
2337                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
2338                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2340                {
2341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2342                }
2343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2345                }
2346            }
2347
2348            next_offset += envelope_size;
2349            _next_ordinal_to_read += 1;
2350            if next_offset >= end_offset {
2351                return Ok(());
2352            }
2353
2354            // Decode unknown envelopes for gaps in ordinals.
2355            while _next_ordinal_to_read < 2 {
2356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2357                _next_ordinal_to_read += 1;
2358                next_offset += envelope_size;
2359            }
2360
2361            let next_out_of_line = decoder.next_out_of_line();
2362            let handles_before = decoder.remaining_handles();
2363            if let Some((inlined, num_bytes, num_handles)) =
2364                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2365            {
2366                let member_inline_size =
2367                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
2368                        decoder.context,
2369                    );
2370                if inlined != (member_inline_size <= 4) {
2371                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2372                }
2373                let inner_offset;
2374                let mut inner_depth = depth.clone();
2375                if inlined {
2376                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2377                    inner_offset = next_offset;
2378                } else {
2379                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2380                    inner_depth.increment()?;
2381                }
2382                let val_ref =
2383                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
2384                fidl::decode!(
2385                    InstallationProgress,
2386                    D,
2387                    val_ref,
2388                    decoder,
2389                    inner_offset,
2390                    inner_depth
2391                )?;
2392                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2393                {
2394                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2395                }
2396                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2397                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2398                }
2399            }
2400
2401            next_offset += envelope_size;
2402
2403            // Decode the remaining unknown envelopes.
2404            while next_offset < end_offset {
2405                _next_ordinal_to_read += 1;
2406                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2407                next_offset += envelope_size;
2408            }
2409
2410            Ok(())
2411        }
2412    }
2413
2414    impl DeferRebootData {
2415        #[inline(always)]
2416        fn max_ordinal_present(&self) -> u64 {
2417            if let Some(_) = self.progress {
2418                return 2;
2419            }
2420            if let Some(_) = self.info {
2421                return 1;
2422            }
2423            0
2424        }
2425    }
2426
2427    impl fidl::encoding::ValueTypeMarker for DeferRebootData {
2428        type Borrowed<'a> = &'a Self;
2429        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2430            value
2431        }
2432    }
2433
2434    unsafe impl fidl::encoding::TypeMarker for DeferRebootData {
2435        type Owned = Self;
2436
2437        #[inline(always)]
2438        fn inline_align(_context: fidl::encoding::Context) -> usize {
2439            8
2440        }
2441
2442        #[inline(always)]
2443        fn inline_size(_context: fidl::encoding::Context) -> usize {
2444            16
2445        }
2446    }
2447
2448    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeferRebootData, D>
2449        for &DeferRebootData
2450    {
2451        unsafe fn encode(
2452            self,
2453            encoder: &mut fidl::encoding::Encoder<'_, D>,
2454            offset: usize,
2455            mut depth: fidl::encoding::Depth,
2456        ) -> fidl::Result<()> {
2457            encoder.debug_check_bounds::<DeferRebootData>(offset);
2458            // Vector header
2459            let max_ordinal: u64 = self.max_ordinal_present();
2460            encoder.write_num(max_ordinal, offset);
2461            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2462            // Calling encoder.out_of_line_offset(0) is not allowed.
2463            if max_ordinal == 0 {
2464                return Ok(());
2465            }
2466            depth.increment()?;
2467            let envelope_size = 8;
2468            let bytes_len = max_ordinal as usize * envelope_size;
2469            #[allow(unused_variables)]
2470            let offset = encoder.out_of_line_offset(bytes_len);
2471            let mut _prev_end_offset: usize = 0;
2472            if 1 > max_ordinal {
2473                return Ok(());
2474            }
2475
2476            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2477            // are envelope_size bytes.
2478            let cur_offset: usize = (1 - 1) * envelope_size;
2479
2480            // Zero reserved fields.
2481            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2482
2483            // Safety:
2484            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2485            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2486            //   envelope_size bytes, there is always sufficient room.
2487            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
2488                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
2489                encoder,
2490                offset + cur_offset,
2491                depth,
2492            )?;
2493
2494            _prev_end_offset = cur_offset + envelope_size;
2495            if 2 > max_ordinal {
2496                return Ok(());
2497            }
2498
2499            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2500            // are envelope_size bytes.
2501            let cur_offset: usize = (2 - 1) * envelope_size;
2502
2503            // Zero reserved fields.
2504            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2505
2506            // Safety:
2507            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2508            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2509            //   envelope_size bytes, there is always sufficient room.
2510            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
2511                self.progress
2512                    .as_ref()
2513                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
2514                encoder,
2515                offset + cur_offset,
2516                depth,
2517            )?;
2518
2519            _prev_end_offset = cur_offset + envelope_size;
2520
2521            Ok(())
2522        }
2523    }
2524
2525    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeferRebootData {
2526        #[inline(always)]
2527        fn new_empty() -> Self {
2528            Self::default()
2529        }
2530
2531        unsafe fn decode(
2532            &mut self,
2533            decoder: &mut fidl::encoding::Decoder<'_, D>,
2534            offset: usize,
2535            mut depth: fidl::encoding::Depth,
2536        ) -> fidl::Result<()> {
2537            decoder.debug_check_bounds::<Self>(offset);
2538            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2539                None => return Err(fidl::Error::NotNullable),
2540                Some(len) => len,
2541            };
2542            // Calling decoder.out_of_line_offset(0) is not allowed.
2543            if len == 0 {
2544                return Ok(());
2545            };
2546            depth.increment()?;
2547            let envelope_size = 8;
2548            let bytes_len = len * envelope_size;
2549            let offset = decoder.out_of_line_offset(bytes_len)?;
2550            // Decode the envelope for each type.
2551            let mut _next_ordinal_to_read = 0;
2552            let mut next_offset = offset;
2553            let end_offset = offset + bytes_len;
2554            _next_ordinal_to_read += 1;
2555            if next_offset >= end_offset {
2556                return Ok(());
2557            }
2558
2559            // Decode unknown envelopes for gaps in ordinals.
2560            while _next_ordinal_to_read < 1 {
2561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2562                _next_ordinal_to_read += 1;
2563                next_offset += envelope_size;
2564            }
2565
2566            let next_out_of_line = decoder.next_out_of_line();
2567            let handles_before = decoder.remaining_handles();
2568            if let Some((inlined, num_bytes, num_handles)) =
2569                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2570            {
2571                let member_inline_size =
2572                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2573                if inlined != (member_inline_size <= 4) {
2574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2575                }
2576                let inner_offset;
2577                let mut inner_depth = depth.clone();
2578                if inlined {
2579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2580                    inner_offset = next_offset;
2581                } else {
2582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2583                    inner_depth.increment()?;
2584                }
2585                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
2586                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2587                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2588                {
2589                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2590                }
2591                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2592                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2593                }
2594            }
2595
2596            next_offset += envelope_size;
2597            _next_ordinal_to_read += 1;
2598            if next_offset >= end_offset {
2599                return Ok(());
2600            }
2601
2602            // Decode unknown envelopes for gaps in ordinals.
2603            while _next_ordinal_to_read < 2 {
2604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2605                _next_ordinal_to_read += 1;
2606                next_offset += envelope_size;
2607            }
2608
2609            let next_out_of_line = decoder.next_out_of_line();
2610            let handles_before = decoder.remaining_handles();
2611            if let Some((inlined, num_bytes, num_handles)) =
2612                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2613            {
2614                let member_inline_size =
2615                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
2616                        decoder.context,
2617                    );
2618                if inlined != (member_inline_size <= 4) {
2619                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2620                }
2621                let inner_offset;
2622                let mut inner_depth = depth.clone();
2623                if inlined {
2624                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2625                    inner_offset = next_offset;
2626                } else {
2627                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2628                    inner_depth.increment()?;
2629                }
2630                let val_ref =
2631                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
2632                fidl::decode!(
2633                    InstallationProgress,
2634                    D,
2635                    val_ref,
2636                    decoder,
2637                    inner_offset,
2638                    inner_depth
2639                )?;
2640                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2641                {
2642                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2643                }
2644                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2645                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2646                }
2647            }
2648
2649            next_offset += envelope_size;
2650
2651            // Decode the remaining unknown envelopes.
2652            while next_offset < end_offset {
2653                _next_ordinal_to_read += 1;
2654                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2655                next_offset += envelope_size;
2656            }
2657
2658            Ok(())
2659        }
2660    }
2661
2662    impl FailCommitData {
2663        #[inline(always)]
2664        fn max_ordinal_present(&self) -> u64 {
2665            if let Some(_) = self.progress {
2666                return 2;
2667            }
2668            if let Some(_) = self.info {
2669                return 1;
2670            }
2671            0
2672        }
2673    }
2674
2675    impl fidl::encoding::ValueTypeMarker for FailCommitData {
2676        type Borrowed<'a> = &'a Self;
2677        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2678            value
2679        }
2680    }
2681
2682    unsafe impl fidl::encoding::TypeMarker for FailCommitData {
2683        type Owned = Self;
2684
2685        #[inline(always)]
2686        fn inline_align(_context: fidl::encoding::Context) -> usize {
2687            8
2688        }
2689
2690        #[inline(always)]
2691        fn inline_size(_context: fidl::encoding::Context) -> usize {
2692            16
2693        }
2694    }
2695
2696    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FailCommitData, D>
2697        for &FailCommitData
2698    {
2699        unsafe fn encode(
2700            self,
2701            encoder: &mut fidl::encoding::Encoder<'_, D>,
2702            offset: usize,
2703            mut depth: fidl::encoding::Depth,
2704        ) -> fidl::Result<()> {
2705            encoder.debug_check_bounds::<FailCommitData>(offset);
2706            // Vector header
2707            let max_ordinal: u64 = self.max_ordinal_present();
2708            encoder.write_num(max_ordinal, offset);
2709            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2710            // Calling encoder.out_of_line_offset(0) is not allowed.
2711            if max_ordinal == 0 {
2712                return Ok(());
2713            }
2714            depth.increment()?;
2715            let envelope_size = 8;
2716            let bytes_len = max_ordinal as usize * envelope_size;
2717            #[allow(unused_variables)]
2718            let offset = encoder.out_of_line_offset(bytes_len);
2719            let mut _prev_end_offset: usize = 0;
2720            if 1 > max_ordinal {
2721                return Ok(());
2722            }
2723
2724            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2725            // are envelope_size bytes.
2726            let cur_offset: usize = (1 - 1) * envelope_size;
2727
2728            // Zero reserved fields.
2729            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2730
2731            // Safety:
2732            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2733            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2734            //   envelope_size bytes, there is always sufficient room.
2735            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
2736                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
2737                encoder,
2738                offset + cur_offset,
2739                depth,
2740            )?;
2741
2742            _prev_end_offset = cur_offset + envelope_size;
2743            if 2 > max_ordinal {
2744                return Ok(());
2745            }
2746
2747            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2748            // are envelope_size bytes.
2749            let cur_offset: usize = (2 - 1) * envelope_size;
2750
2751            // Zero reserved fields.
2752            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2753
2754            // Safety:
2755            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2756            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2757            //   envelope_size bytes, there is always sufficient room.
2758            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
2759                self.progress
2760                    .as_ref()
2761                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
2762                encoder,
2763                offset + cur_offset,
2764                depth,
2765            )?;
2766
2767            _prev_end_offset = cur_offset + envelope_size;
2768
2769            Ok(())
2770        }
2771    }
2772
2773    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FailCommitData {
2774        #[inline(always)]
2775        fn new_empty() -> Self {
2776            Self::default()
2777        }
2778
2779        unsafe fn decode(
2780            &mut self,
2781            decoder: &mut fidl::encoding::Decoder<'_, D>,
2782            offset: usize,
2783            mut depth: fidl::encoding::Depth,
2784        ) -> fidl::Result<()> {
2785            decoder.debug_check_bounds::<Self>(offset);
2786            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2787                None => return Err(fidl::Error::NotNullable),
2788                Some(len) => len,
2789            };
2790            // Calling decoder.out_of_line_offset(0) is not allowed.
2791            if len == 0 {
2792                return Ok(());
2793            };
2794            depth.increment()?;
2795            let envelope_size = 8;
2796            let bytes_len = len * envelope_size;
2797            let offset = decoder.out_of_line_offset(bytes_len)?;
2798            // Decode the envelope for each type.
2799            let mut _next_ordinal_to_read = 0;
2800            let mut next_offset = offset;
2801            let end_offset = offset + bytes_len;
2802            _next_ordinal_to_read += 1;
2803            if next_offset >= end_offset {
2804                return Ok(());
2805            }
2806
2807            // Decode unknown envelopes for gaps in ordinals.
2808            while _next_ordinal_to_read < 1 {
2809                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2810                _next_ordinal_to_read += 1;
2811                next_offset += envelope_size;
2812            }
2813
2814            let next_out_of_line = decoder.next_out_of_line();
2815            let handles_before = decoder.remaining_handles();
2816            if let Some((inlined, num_bytes, num_handles)) =
2817                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2818            {
2819                let member_inline_size =
2820                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2821                if inlined != (member_inline_size <= 4) {
2822                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2823                }
2824                let inner_offset;
2825                let mut inner_depth = depth.clone();
2826                if inlined {
2827                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2828                    inner_offset = next_offset;
2829                } else {
2830                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2831                    inner_depth.increment()?;
2832                }
2833                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
2834                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2836                {
2837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2838                }
2839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2841                }
2842            }
2843
2844            next_offset += envelope_size;
2845            _next_ordinal_to_read += 1;
2846            if next_offset >= end_offset {
2847                return Ok(());
2848            }
2849
2850            // Decode unknown envelopes for gaps in ordinals.
2851            while _next_ordinal_to_read < 2 {
2852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2853                _next_ordinal_to_read += 1;
2854                next_offset += envelope_size;
2855            }
2856
2857            let next_out_of_line = decoder.next_out_of_line();
2858            let handles_before = decoder.remaining_handles();
2859            if let Some((inlined, num_bytes, num_handles)) =
2860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2861            {
2862                let member_inline_size =
2863                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
2864                        decoder.context,
2865                    );
2866                if inlined != (member_inline_size <= 4) {
2867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2868                }
2869                let inner_offset;
2870                let mut inner_depth = depth.clone();
2871                if inlined {
2872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2873                    inner_offset = next_offset;
2874                } else {
2875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2876                    inner_depth.increment()?;
2877                }
2878                let val_ref =
2879                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
2880                fidl::decode!(
2881                    InstallationProgress,
2882                    D,
2883                    val_ref,
2884                    decoder,
2885                    inner_offset,
2886                    inner_depth
2887                )?;
2888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2889                {
2890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2891                }
2892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2894                }
2895            }
2896
2897            next_offset += envelope_size;
2898
2899            // Decode the remaining unknown envelopes.
2900            while next_offset < end_offset {
2901                _next_ordinal_to_read += 1;
2902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2903                next_offset += envelope_size;
2904            }
2905
2906            Ok(())
2907        }
2908    }
2909
2910    impl FailFetchData {
2911        #[inline(always)]
2912        fn max_ordinal_present(&self) -> u64 {
2913            if let Some(_) = self.reason {
2914                return 3;
2915            }
2916            if let Some(_) = self.progress {
2917                return 2;
2918            }
2919            if let Some(_) = self.info {
2920                return 1;
2921            }
2922            0
2923        }
2924    }
2925
2926    impl fidl::encoding::ValueTypeMarker for FailFetchData {
2927        type Borrowed<'a> = &'a Self;
2928        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2929            value
2930        }
2931    }
2932
2933    unsafe impl fidl::encoding::TypeMarker for FailFetchData {
2934        type Owned = Self;
2935
2936        #[inline(always)]
2937        fn inline_align(_context: fidl::encoding::Context) -> usize {
2938            8
2939        }
2940
2941        #[inline(always)]
2942        fn inline_size(_context: fidl::encoding::Context) -> usize {
2943            16
2944        }
2945    }
2946
2947    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FailFetchData, D>
2948        for &FailFetchData
2949    {
2950        unsafe fn encode(
2951            self,
2952            encoder: &mut fidl::encoding::Encoder<'_, D>,
2953            offset: usize,
2954            mut depth: fidl::encoding::Depth,
2955        ) -> fidl::Result<()> {
2956            encoder.debug_check_bounds::<FailFetchData>(offset);
2957            // Vector header
2958            let max_ordinal: u64 = self.max_ordinal_present();
2959            encoder.write_num(max_ordinal, offset);
2960            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2961            // Calling encoder.out_of_line_offset(0) is not allowed.
2962            if max_ordinal == 0 {
2963                return Ok(());
2964            }
2965            depth.increment()?;
2966            let envelope_size = 8;
2967            let bytes_len = max_ordinal as usize * envelope_size;
2968            #[allow(unused_variables)]
2969            let offset = encoder.out_of_line_offset(bytes_len);
2970            let mut _prev_end_offset: usize = 0;
2971            if 1 > max_ordinal {
2972                return Ok(());
2973            }
2974
2975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2976            // are envelope_size bytes.
2977            let cur_offset: usize = (1 - 1) * envelope_size;
2978
2979            // Zero reserved fields.
2980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2981
2982            // Safety:
2983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2985            //   envelope_size bytes, there is always sufficient room.
2986            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
2987                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
2988                encoder,
2989                offset + cur_offset,
2990                depth,
2991            )?;
2992
2993            _prev_end_offset = cur_offset + envelope_size;
2994            if 2 > max_ordinal {
2995                return Ok(());
2996            }
2997
2998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2999            // are envelope_size bytes.
3000            let cur_offset: usize = (2 - 1) * envelope_size;
3001
3002            // Zero reserved fields.
3003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3004
3005            // Safety:
3006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3008            //   envelope_size bytes, there is always sufficient room.
3009            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
3010                self.progress
3011                    .as_ref()
3012                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
3013                encoder,
3014                offset + cur_offset,
3015                depth,
3016            )?;
3017
3018            _prev_end_offset = cur_offset + envelope_size;
3019            if 3 > max_ordinal {
3020                return Ok(());
3021            }
3022
3023            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3024            // are envelope_size bytes.
3025            let cur_offset: usize = (3 - 1) * envelope_size;
3026
3027            // Zero reserved fields.
3028            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3029
3030            // Safety:
3031            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3032            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3033            //   envelope_size bytes, there is always sufficient room.
3034            fidl::encoding::encode_in_envelope_optional::<FetchFailureReason, D>(
3035                self.reason
3036                    .as_ref()
3037                    .map(<FetchFailureReason as fidl::encoding::ValueTypeMarker>::borrow),
3038                encoder,
3039                offset + cur_offset,
3040                depth,
3041            )?;
3042
3043            _prev_end_offset = cur_offset + envelope_size;
3044
3045            Ok(())
3046        }
3047    }
3048
3049    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FailFetchData {
3050        #[inline(always)]
3051        fn new_empty() -> Self {
3052            Self::default()
3053        }
3054
3055        unsafe fn decode(
3056            &mut self,
3057            decoder: &mut fidl::encoding::Decoder<'_, D>,
3058            offset: usize,
3059            mut depth: fidl::encoding::Depth,
3060        ) -> fidl::Result<()> {
3061            decoder.debug_check_bounds::<Self>(offset);
3062            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3063                None => return Err(fidl::Error::NotNullable),
3064                Some(len) => len,
3065            };
3066            // Calling decoder.out_of_line_offset(0) is not allowed.
3067            if len == 0 {
3068                return Ok(());
3069            };
3070            depth.increment()?;
3071            let envelope_size = 8;
3072            let bytes_len = len * envelope_size;
3073            let offset = decoder.out_of_line_offset(bytes_len)?;
3074            // Decode the envelope for each type.
3075            let mut _next_ordinal_to_read = 0;
3076            let mut next_offset = offset;
3077            let end_offset = offset + bytes_len;
3078            _next_ordinal_to_read += 1;
3079            if next_offset >= end_offset {
3080                return Ok(());
3081            }
3082
3083            // Decode unknown envelopes for gaps in ordinals.
3084            while _next_ordinal_to_read < 1 {
3085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3086                _next_ordinal_to_read += 1;
3087                next_offset += envelope_size;
3088            }
3089
3090            let next_out_of_line = decoder.next_out_of_line();
3091            let handles_before = decoder.remaining_handles();
3092            if let Some((inlined, num_bytes, num_handles)) =
3093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3094            {
3095                let member_inline_size =
3096                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3097                if inlined != (member_inline_size <= 4) {
3098                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3099                }
3100                let inner_offset;
3101                let mut inner_depth = depth.clone();
3102                if inlined {
3103                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3104                    inner_offset = next_offset;
3105                } else {
3106                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3107                    inner_depth.increment()?;
3108                }
3109                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
3110                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3111                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3112                {
3113                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3114                }
3115                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3116                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3117                }
3118            }
3119
3120            next_offset += envelope_size;
3121            _next_ordinal_to_read += 1;
3122            if next_offset >= end_offset {
3123                return Ok(());
3124            }
3125
3126            // Decode unknown envelopes for gaps in ordinals.
3127            while _next_ordinal_to_read < 2 {
3128                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3129                _next_ordinal_to_read += 1;
3130                next_offset += envelope_size;
3131            }
3132
3133            let next_out_of_line = decoder.next_out_of_line();
3134            let handles_before = decoder.remaining_handles();
3135            if let Some((inlined, num_bytes, num_handles)) =
3136                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3137            {
3138                let member_inline_size =
3139                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
3140                        decoder.context,
3141                    );
3142                if inlined != (member_inline_size <= 4) {
3143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3144                }
3145                let inner_offset;
3146                let mut inner_depth = depth.clone();
3147                if inlined {
3148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3149                    inner_offset = next_offset;
3150                } else {
3151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3152                    inner_depth.increment()?;
3153                }
3154                let val_ref =
3155                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
3156                fidl::decode!(
3157                    InstallationProgress,
3158                    D,
3159                    val_ref,
3160                    decoder,
3161                    inner_offset,
3162                    inner_depth
3163                )?;
3164                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3165                {
3166                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3167                }
3168                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3169                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3170                }
3171            }
3172
3173            next_offset += envelope_size;
3174            _next_ordinal_to_read += 1;
3175            if next_offset >= end_offset {
3176                return Ok(());
3177            }
3178
3179            // Decode unknown envelopes for gaps in ordinals.
3180            while _next_ordinal_to_read < 3 {
3181                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3182                _next_ordinal_to_read += 1;
3183                next_offset += envelope_size;
3184            }
3185
3186            let next_out_of_line = decoder.next_out_of_line();
3187            let handles_before = decoder.remaining_handles();
3188            if let Some((inlined, num_bytes, num_handles)) =
3189                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3190            {
3191                let member_inline_size =
3192                    <FetchFailureReason as fidl::encoding::TypeMarker>::inline_size(
3193                        decoder.context,
3194                    );
3195                if inlined != (member_inline_size <= 4) {
3196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3197                }
3198                let inner_offset;
3199                let mut inner_depth = depth.clone();
3200                if inlined {
3201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3202                    inner_offset = next_offset;
3203                } else {
3204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3205                    inner_depth.increment()?;
3206                }
3207                let val_ref =
3208                    self.reason.get_or_insert_with(|| fidl::new_empty!(FetchFailureReason, D));
3209                fidl::decode!(FetchFailureReason, D, val_ref, decoder, inner_offset, inner_depth)?;
3210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3211                {
3212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3213                }
3214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3216                }
3217            }
3218
3219            next_offset += envelope_size;
3220
3221            // Decode the remaining unknown envelopes.
3222            while next_offset < end_offset {
3223                _next_ordinal_to_read += 1;
3224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3225                next_offset += envelope_size;
3226            }
3227
3228            Ok(())
3229        }
3230    }
3231
3232    impl FailPrepareData {
3233        #[inline(always)]
3234        fn max_ordinal_present(&self) -> u64 {
3235            if let Some(_) = self.reason {
3236                return 1;
3237            }
3238            0
3239        }
3240    }
3241
3242    impl fidl::encoding::ValueTypeMarker for FailPrepareData {
3243        type Borrowed<'a> = &'a Self;
3244        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3245            value
3246        }
3247    }
3248
3249    unsafe impl fidl::encoding::TypeMarker for FailPrepareData {
3250        type Owned = Self;
3251
3252        #[inline(always)]
3253        fn inline_align(_context: fidl::encoding::Context) -> usize {
3254            8
3255        }
3256
3257        #[inline(always)]
3258        fn inline_size(_context: fidl::encoding::Context) -> usize {
3259            16
3260        }
3261    }
3262
3263    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FailPrepareData, D>
3264        for &FailPrepareData
3265    {
3266        unsafe fn encode(
3267            self,
3268            encoder: &mut fidl::encoding::Encoder<'_, D>,
3269            offset: usize,
3270            mut depth: fidl::encoding::Depth,
3271        ) -> fidl::Result<()> {
3272            encoder.debug_check_bounds::<FailPrepareData>(offset);
3273            // Vector header
3274            let max_ordinal: u64 = self.max_ordinal_present();
3275            encoder.write_num(max_ordinal, offset);
3276            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3277            // Calling encoder.out_of_line_offset(0) is not allowed.
3278            if max_ordinal == 0 {
3279                return Ok(());
3280            }
3281            depth.increment()?;
3282            let envelope_size = 8;
3283            let bytes_len = max_ordinal as usize * envelope_size;
3284            #[allow(unused_variables)]
3285            let offset = encoder.out_of_line_offset(bytes_len);
3286            let mut _prev_end_offset: usize = 0;
3287            if 1 > max_ordinal {
3288                return Ok(());
3289            }
3290
3291            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3292            // are envelope_size bytes.
3293            let cur_offset: usize = (1 - 1) * envelope_size;
3294
3295            // Zero reserved fields.
3296            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3297
3298            // Safety:
3299            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3300            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3301            //   envelope_size bytes, there is always sufficient room.
3302            fidl::encoding::encode_in_envelope_optional::<PrepareFailureReason, D>(
3303                self.reason
3304                    .as_ref()
3305                    .map(<PrepareFailureReason as fidl::encoding::ValueTypeMarker>::borrow),
3306                encoder,
3307                offset + cur_offset,
3308                depth,
3309            )?;
3310
3311            _prev_end_offset = cur_offset + envelope_size;
3312
3313            Ok(())
3314        }
3315    }
3316
3317    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FailPrepareData {
3318        #[inline(always)]
3319        fn new_empty() -> Self {
3320            Self::default()
3321        }
3322
3323        unsafe fn decode(
3324            &mut self,
3325            decoder: &mut fidl::encoding::Decoder<'_, D>,
3326            offset: usize,
3327            mut depth: fidl::encoding::Depth,
3328        ) -> fidl::Result<()> {
3329            decoder.debug_check_bounds::<Self>(offset);
3330            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3331                None => return Err(fidl::Error::NotNullable),
3332                Some(len) => len,
3333            };
3334            // Calling decoder.out_of_line_offset(0) is not allowed.
3335            if len == 0 {
3336                return Ok(());
3337            };
3338            depth.increment()?;
3339            let envelope_size = 8;
3340            let bytes_len = len * envelope_size;
3341            let offset = decoder.out_of_line_offset(bytes_len)?;
3342            // Decode the envelope for each type.
3343            let mut _next_ordinal_to_read = 0;
3344            let mut next_offset = offset;
3345            let end_offset = offset + bytes_len;
3346            _next_ordinal_to_read += 1;
3347            if next_offset >= end_offset {
3348                return Ok(());
3349            }
3350
3351            // Decode unknown envelopes for gaps in ordinals.
3352            while _next_ordinal_to_read < 1 {
3353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3354                _next_ordinal_to_read += 1;
3355                next_offset += envelope_size;
3356            }
3357
3358            let next_out_of_line = decoder.next_out_of_line();
3359            let handles_before = decoder.remaining_handles();
3360            if let Some((inlined, num_bytes, num_handles)) =
3361                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3362            {
3363                let member_inline_size =
3364                    <PrepareFailureReason as fidl::encoding::TypeMarker>::inline_size(
3365                        decoder.context,
3366                    );
3367                if inlined != (member_inline_size <= 4) {
3368                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3369                }
3370                let inner_offset;
3371                let mut inner_depth = depth.clone();
3372                if inlined {
3373                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3374                    inner_offset = next_offset;
3375                } else {
3376                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3377                    inner_depth.increment()?;
3378                }
3379                let val_ref =
3380                    self.reason.get_or_insert_with(|| fidl::new_empty!(PrepareFailureReason, D));
3381                fidl::decode!(
3382                    PrepareFailureReason,
3383                    D,
3384                    val_ref,
3385                    decoder,
3386                    inner_offset,
3387                    inner_depth
3388                )?;
3389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3390                {
3391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3392                }
3393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3395                }
3396            }
3397
3398            next_offset += envelope_size;
3399
3400            // Decode the remaining unknown envelopes.
3401            while next_offset < end_offset {
3402                _next_ordinal_to_read += 1;
3403                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3404                next_offset += envelope_size;
3405            }
3406
3407            Ok(())
3408        }
3409    }
3410
3411    impl FailStageData {
3412        #[inline(always)]
3413        fn max_ordinal_present(&self) -> u64 {
3414            if let Some(_) = self.reason {
3415                return 3;
3416            }
3417            if let Some(_) = self.progress {
3418                return 2;
3419            }
3420            if let Some(_) = self.info {
3421                return 1;
3422            }
3423            0
3424        }
3425    }
3426
3427    impl fidl::encoding::ValueTypeMarker for FailStageData {
3428        type Borrowed<'a> = &'a Self;
3429        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3430            value
3431        }
3432    }
3433
3434    unsafe impl fidl::encoding::TypeMarker for FailStageData {
3435        type Owned = Self;
3436
3437        #[inline(always)]
3438        fn inline_align(_context: fidl::encoding::Context) -> usize {
3439            8
3440        }
3441
3442        #[inline(always)]
3443        fn inline_size(_context: fidl::encoding::Context) -> usize {
3444            16
3445        }
3446    }
3447
3448    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FailStageData, D>
3449        for &FailStageData
3450    {
3451        unsafe fn encode(
3452            self,
3453            encoder: &mut fidl::encoding::Encoder<'_, D>,
3454            offset: usize,
3455            mut depth: fidl::encoding::Depth,
3456        ) -> fidl::Result<()> {
3457            encoder.debug_check_bounds::<FailStageData>(offset);
3458            // Vector header
3459            let max_ordinal: u64 = self.max_ordinal_present();
3460            encoder.write_num(max_ordinal, offset);
3461            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3462            // Calling encoder.out_of_line_offset(0) is not allowed.
3463            if max_ordinal == 0 {
3464                return Ok(());
3465            }
3466            depth.increment()?;
3467            let envelope_size = 8;
3468            let bytes_len = max_ordinal as usize * envelope_size;
3469            #[allow(unused_variables)]
3470            let offset = encoder.out_of_line_offset(bytes_len);
3471            let mut _prev_end_offset: usize = 0;
3472            if 1 > max_ordinal {
3473                return Ok(());
3474            }
3475
3476            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3477            // are envelope_size bytes.
3478            let cur_offset: usize = (1 - 1) * envelope_size;
3479
3480            // Zero reserved fields.
3481            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3482
3483            // Safety:
3484            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3485            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3486            //   envelope_size bytes, there is always sufficient room.
3487            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
3488                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
3489                encoder,
3490                offset + cur_offset,
3491                depth,
3492            )?;
3493
3494            _prev_end_offset = cur_offset + envelope_size;
3495            if 2 > max_ordinal {
3496                return Ok(());
3497            }
3498
3499            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3500            // are envelope_size bytes.
3501            let cur_offset: usize = (2 - 1) * envelope_size;
3502
3503            // Zero reserved fields.
3504            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3505
3506            // Safety:
3507            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3508            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3509            //   envelope_size bytes, there is always sufficient room.
3510            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
3511                self.progress
3512                    .as_ref()
3513                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
3514                encoder,
3515                offset + cur_offset,
3516                depth,
3517            )?;
3518
3519            _prev_end_offset = cur_offset + envelope_size;
3520            if 3 > max_ordinal {
3521                return Ok(());
3522            }
3523
3524            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3525            // are envelope_size bytes.
3526            let cur_offset: usize = (3 - 1) * envelope_size;
3527
3528            // Zero reserved fields.
3529            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3530
3531            // Safety:
3532            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3533            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3534            //   envelope_size bytes, there is always sufficient room.
3535            fidl::encoding::encode_in_envelope_optional::<StageFailureReason, D>(
3536                self.reason
3537                    .as_ref()
3538                    .map(<StageFailureReason as fidl::encoding::ValueTypeMarker>::borrow),
3539                encoder,
3540                offset + cur_offset,
3541                depth,
3542            )?;
3543
3544            _prev_end_offset = cur_offset + envelope_size;
3545
3546            Ok(())
3547        }
3548    }
3549
3550    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FailStageData {
3551        #[inline(always)]
3552        fn new_empty() -> Self {
3553            Self::default()
3554        }
3555
3556        unsafe fn decode(
3557            &mut self,
3558            decoder: &mut fidl::encoding::Decoder<'_, D>,
3559            offset: usize,
3560            mut depth: fidl::encoding::Depth,
3561        ) -> fidl::Result<()> {
3562            decoder.debug_check_bounds::<Self>(offset);
3563            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3564                None => return Err(fidl::Error::NotNullable),
3565                Some(len) => len,
3566            };
3567            // Calling decoder.out_of_line_offset(0) is not allowed.
3568            if len == 0 {
3569                return Ok(());
3570            };
3571            depth.increment()?;
3572            let envelope_size = 8;
3573            let bytes_len = len * envelope_size;
3574            let offset = decoder.out_of_line_offset(bytes_len)?;
3575            // Decode the envelope for each type.
3576            let mut _next_ordinal_to_read = 0;
3577            let mut next_offset = offset;
3578            let end_offset = offset + bytes_len;
3579            _next_ordinal_to_read += 1;
3580            if next_offset >= end_offset {
3581                return Ok(());
3582            }
3583
3584            // Decode unknown envelopes for gaps in ordinals.
3585            while _next_ordinal_to_read < 1 {
3586                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3587                _next_ordinal_to_read += 1;
3588                next_offset += envelope_size;
3589            }
3590
3591            let next_out_of_line = decoder.next_out_of_line();
3592            let handles_before = decoder.remaining_handles();
3593            if let Some((inlined, num_bytes, num_handles)) =
3594                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3595            {
3596                let member_inline_size =
3597                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3598                if inlined != (member_inline_size <= 4) {
3599                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3600                }
3601                let inner_offset;
3602                let mut inner_depth = depth.clone();
3603                if inlined {
3604                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3605                    inner_offset = next_offset;
3606                } else {
3607                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3608                    inner_depth.increment()?;
3609                }
3610                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
3611                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3612                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3613                {
3614                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3615                }
3616                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3617                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3618                }
3619            }
3620
3621            next_offset += envelope_size;
3622            _next_ordinal_to_read += 1;
3623            if next_offset >= end_offset {
3624                return Ok(());
3625            }
3626
3627            // Decode unknown envelopes for gaps in ordinals.
3628            while _next_ordinal_to_read < 2 {
3629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3630                _next_ordinal_to_read += 1;
3631                next_offset += envelope_size;
3632            }
3633
3634            let next_out_of_line = decoder.next_out_of_line();
3635            let handles_before = decoder.remaining_handles();
3636            if let Some((inlined, num_bytes, num_handles)) =
3637                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3638            {
3639                let member_inline_size =
3640                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
3641                        decoder.context,
3642                    );
3643                if inlined != (member_inline_size <= 4) {
3644                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3645                }
3646                let inner_offset;
3647                let mut inner_depth = depth.clone();
3648                if inlined {
3649                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3650                    inner_offset = next_offset;
3651                } else {
3652                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3653                    inner_depth.increment()?;
3654                }
3655                let val_ref =
3656                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
3657                fidl::decode!(
3658                    InstallationProgress,
3659                    D,
3660                    val_ref,
3661                    decoder,
3662                    inner_offset,
3663                    inner_depth
3664                )?;
3665                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3666                {
3667                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3668                }
3669                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3670                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3671                }
3672            }
3673
3674            next_offset += envelope_size;
3675            _next_ordinal_to_read += 1;
3676            if next_offset >= end_offset {
3677                return Ok(());
3678            }
3679
3680            // Decode unknown envelopes for gaps in ordinals.
3681            while _next_ordinal_to_read < 3 {
3682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3683                _next_ordinal_to_read += 1;
3684                next_offset += envelope_size;
3685            }
3686
3687            let next_out_of_line = decoder.next_out_of_line();
3688            let handles_before = decoder.remaining_handles();
3689            if let Some((inlined, num_bytes, num_handles)) =
3690                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3691            {
3692                let member_inline_size =
3693                    <StageFailureReason as fidl::encoding::TypeMarker>::inline_size(
3694                        decoder.context,
3695                    );
3696                if inlined != (member_inline_size <= 4) {
3697                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3698                }
3699                let inner_offset;
3700                let mut inner_depth = depth.clone();
3701                if inlined {
3702                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3703                    inner_offset = next_offset;
3704                } else {
3705                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3706                    inner_depth.increment()?;
3707                }
3708                let val_ref =
3709                    self.reason.get_or_insert_with(|| fidl::new_empty!(StageFailureReason, D));
3710                fidl::decode!(StageFailureReason, D, val_ref, decoder, inner_offset, inner_depth)?;
3711                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3712                {
3713                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3714                }
3715                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3716                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3717                }
3718            }
3719
3720            next_offset += envelope_size;
3721
3722            // Decode the remaining unknown envelopes.
3723            while next_offset < end_offset {
3724                _next_ordinal_to_read += 1;
3725                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3726                next_offset += envelope_size;
3727            }
3728
3729            Ok(())
3730        }
3731    }
3732
3733    impl FetchData {
3734        #[inline(always)]
3735        fn max_ordinal_present(&self) -> u64 {
3736            if let Some(_) = self.progress {
3737                return 2;
3738            }
3739            if let Some(_) = self.info {
3740                return 1;
3741            }
3742            0
3743        }
3744    }
3745
3746    impl fidl::encoding::ValueTypeMarker for FetchData {
3747        type Borrowed<'a> = &'a Self;
3748        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3749            value
3750        }
3751    }
3752
3753    unsafe impl fidl::encoding::TypeMarker for FetchData {
3754        type Owned = Self;
3755
3756        #[inline(always)]
3757        fn inline_align(_context: fidl::encoding::Context) -> usize {
3758            8
3759        }
3760
3761        #[inline(always)]
3762        fn inline_size(_context: fidl::encoding::Context) -> usize {
3763            16
3764        }
3765    }
3766
3767    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FetchData, D>
3768        for &FetchData
3769    {
3770        unsafe fn encode(
3771            self,
3772            encoder: &mut fidl::encoding::Encoder<'_, D>,
3773            offset: usize,
3774            mut depth: fidl::encoding::Depth,
3775        ) -> fidl::Result<()> {
3776            encoder.debug_check_bounds::<FetchData>(offset);
3777            // Vector header
3778            let max_ordinal: u64 = self.max_ordinal_present();
3779            encoder.write_num(max_ordinal, offset);
3780            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3781            // Calling encoder.out_of_line_offset(0) is not allowed.
3782            if max_ordinal == 0 {
3783                return Ok(());
3784            }
3785            depth.increment()?;
3786            let envelope_size = 8;
3787            let bytes_len = max_ordinal as usize * envelope_size;
3788            #[allow(unused_variables)]
3789            let offset = encoder.out_of_line_offset(bytes_len);
3790            let mut _prev_end_offset: usize = 0;
3791            if 1 > max_ordinal {
3792                return Ok(());
3793            }
3794
3795            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3796            // are envelope_size bytes.
3797            let cur_offset: usize = (1 - 1) * envelope_size;
3798
3799            // Zero reserved fields.
3800            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3801
3802            // Safety:
3803            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3804            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3805            //   envelope_size bytes, there is always sufficient room.
3806            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
3807                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
3808                encoder,
3809                offset + cur_offset,
3810                depth,
3811            )?;
3812
3813            _prev_end_offset = cur_offset + envelope_size;
3814            if 2 > max_ordinal {
3815                return Ok(());
3816            }
3817
3818            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3819            // are envelope_size bytes.
3820            let cur_offset: usize = (2 - 1) * envelope_size;
3821
3822            // Zero reserved fields.
3823            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3824
3825            // Safety:
3826            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3827            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3828            //   envelope_size bytes, there is always sufficient room.
3829            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
3830                self.progress
3831                    .as_ref()
3832                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
3833                encoder,
3834                offset + cur_offset,
3835                depth,
3836            )?;
3837
3838            _prev_end_offset = cur_offset + envelope_size;
3839
3840            Ok(())
3841        }
3842    }
3843
3844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FetchData {
3845        #[inline(always)]
3846        fn new_empty() -> Self {
3847            Self::default()
3848        }
3849
3850        unsafe fn decode(
3851            &mut self,
3852            decoder: &mut fidl::encoding::Decoder<'_, D>,
3853            offset: usize,
3854            mut depth: fidl::encoding::Depth,
3855        ) -> fidl::Result<()> {
3856            decoder.debug_check_bounds::<Self>(offset);
3857            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3858                None => return Err(fidl::Error::NotNullable),
3859                Some(len) => len,
3860            };
3861            // Calling decoder.out_of_line_offset(0) is not allowed.
3862            if len == 0 {
3863                return Ok(());
3864            };
3865            depth.increment()?;
3866            let envelope_size = 8;
3867            let bytes_len = len * envelope_size;
3868            let offset = decoder.out_of_line_offset(bytes_len)?;
3869            // Decode the envelope for each type.
3870            let mut _next_ordinal_to_read = 0;
3871            let mut next_offset = offset;
3872            let end_offset = offset + bytes_len;
3873            _next_ordinal_to_read += 1;
3874            if next_offset >= end_offset {
3875                return Ok(());
3876            }
3877
3878            // Decode unknown envelopes for gaps in ordinals.
3879            while _next_ordinal_to_read < 1 {
3880                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3881                _next_ordinal_to_read += 1;
3882                next_offset += envelope_size;
3883            }
3884
3885            let next_out_of_line = decoder.next_out_of_line();
3886            let handles_before = decoder.remaining_handles();
3887            if let Some((inlined, num_bytes, num_handles)) =
3888                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3889            {
3890                let member_inline_size =
3891                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3892                if inlined != (member_inline_size <= 4) {
3893                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3894                }
3895                let inner_offset;
3896                let mut inner_depth = depth.clone();
3897                if inlined {
3898                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3899                    inner_offset = next_offset;
3900                } else {
3901                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3902                    inner_depth.increment()?;
3903                }
3904                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
3905                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3906                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3907                {
3908                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3909                }
3910                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3911                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3912                }
3913            }
3914
3915            next_offset += envelope_size;
3916            _next_ordinal_to_read += 1;
3917            if next_offset >= end_offset {
3918                return Ok(());
3919            }
3920
3921            // Decode unknown envelopes for gaps in ordinals.
3922            while _next_ordinal_to_read < 2 {
3923                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3924                _next_ordinal_to_read += 1;
3925                next_offset += envelope_size;
3926            }
3927
3928            let next_out_of_line = decoder.next_out_of_line();
3929            let handles_before = decoder.remaining_handles();
3930            if let Some((inlined, num_bytes, num_handles)) =
3931                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3932            {
3933                let member_inline_size =
3934                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
3935                        decoder.context,
3936                    );
3937                if inlined != (member_inline_size <= 4) {
3938                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3939                }
3940                let inner_offset;
3941                let mut inner_depth = depth.clone();
3942                if inlined {
3943                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3944                    inner_offset = next_offset;
3945                } else {
3946                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3947                    inner_depth.increment()?;
3948                }
3949                let val_ref =
3950                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
3951                fidl::decode!(
3952                    InstallationProgress,
3953                    D,
3954                    val_ref,
3955                    decoder,
3956                    inner_offset,
3957                    inner_depth
3958                )?;
3959                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3960                {
3961                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3962                }
3963                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3964                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3965                }
3966            }
3967
3968            next_offset += envelope_size;
3969
3970            // Decode the remaining unknown envelopes.
3971            while next_offset < end_offset {
3972                _next_ordinal_to_read += 1;
3973                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3974                next_offset += envelope_size;
3975            }
3976
3977            Ok(())
3978        }
3979    }
3980
3981    impl InstallationProgress {
3982        #[inline(always)]
3983        fn max_ordinal_present(&self) -> u64 {
3984            if let Some(_) = self.bytes_downloaded {
3985                return 2;
3986            }
3987            if let Some(_) = self.fraction_completed {
3988                return 1;
3989            }
3990            0
3991        }
3992    }
3993
3994    impl fidl::encoding::ValueTypeMarker for InstallationProgress {
3995        type Borrowed<'a> = &'a Self;
3996        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3997            value
3998        }
3999    }
4000
4001    unsafe impl fidl::encoding::TypeMarker for InstallationProgress {
4002        type Owned = Self;
4003
4004        #[inline(always)]
4005        fn inline_align(_context: fidl::encoding::Context) -> usize {
4006            8
4007        }
4008
4009        #[inline(always)]
4010        fn inline_size(_context: fidl::encoding::Context) -> usize {
4011            16
4012        }
4013    }
4014
4015    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InstallationProgress, D>
4016        for &InstallationProgress
4017    {
4018        unsafe fn encode(
4019            self,
4020            encoder: &mut fidl::encoding::Encoder<'_, D>,
4021            offset: usize,
4022            mut depth: fidl::encoding::Depth,
4023        ) -> fidl::Result<()> {
4024            encoder.debug_check_bounds::<InstallationProgress>(offset);
4025            // Vector header
4026            let max_ordinal: u64 = self.max_ordinal_present();
4027            encoder.write_num(max_ordinal, offset);
4028            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4029            // Calling encoder.out_of_line_offset(0) is not allowed.
4030            if max_ordinal == 0 {
4031                return Ok(());
4032            }
4033            depth.increment()?;
4034            let envelope_size = 8;
4035            let bytes_len = max_ordinal as usize * envelope_size;
4036            #[allow(unused_variables)]
4037            let offset = encoder.out_of_line_offset(bytes_len);
4038            let mut _prev_end_offset: usize = 0;
4039            if 1 > max_ordinal {
4040                return Ok(());
4041            }
4042
4043            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4044            // are envelope_size bytes.
4045            let cur_offset: usize = (1 - 1) * envelope_size;
4046
4047            // Zero reserved fields.
4048            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4049
4050            // Safety:
4051            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4052            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4053            //   envelope_size bytes, there is always sufficient room.
4054            fidl::encoding::encode_in_envelope_optional::<f32, D>(
4055                self.fraction_completed
4056                    .as_ref()
4057                    .map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
4058                encoder,
4059                offset + cur_offset,
4060                depth,
4061            )?;
4062
4063            _prev_end_offset = cur_offset + envelope_size;
4064            if 2 > max_ordinal {
4065                return Ok(());
4066            }
4067
4068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4069            // are envelope_size bytes.
4070            let cur_offset: usize = (2 - 1) * envelope_size;
4071
4072            // Zero reserved fields.
4073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4074
4075            // Safety:
4076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4078            //   envelope_size bytes, there is always sufficient room.
4079            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4080                self.bytes_downloaded
4081                    .as_ref()
4082                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4083                encoder,
4084                offset + cur_offset,
4085                depth,
4086            )?;
4087
4088            _prev_end_offset = cur_offset + envelope_size;
4089
4090            Ok(())
4091        }
4092    }
4093
4094    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InstallationProgress {
4095        #[inline(always)]
4096        fn new_empty() -> Self {
4097            Self::default()
4098        }
4099
4100        unsafe fn decode(
4101            &mut self,
4102            decoder: &mut fidl::encoding::Decoder<'_, D>,
4103            offset: usize,
4104            mut depth: fidl::encoding::Depth,
4105        ) -> fidl::Result<()> {
4106            decoder.debug_check_bounds::<Self>(offset);
4107            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4108                None => return Err(fidl::Error::NotNullable),
4109                Some(len) => len,
4110            };
4111            // Calling decoder.out_of_line_offset(0) is not allowed.
4112            if len == 0 {
4113                return Ok(());
4114            };
4115            depth.increment()?;
4116            let envelope_size = 8;
4117            let bytes_len = len * envelope_size;
4118            let offset = decoder.out_of_line_offset(bytes_len)?;
4119            // Decode the envelope for each type.
4120            let mut _next_ordinal_to_read = 0;
4121            let mut next_offset = offset;
4122            let end_offset = offset + bytes_len;
4123            _next_ordinal_to_read += 1;
4124            if next_offset >= end_offset {
4125                return Ok(());
4126            }
4127
4128            // Decode unknown envelopes for gaps in ordinals.
4129            while _next_ordinal_to_read < 1 {
4130                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4131                _next_ordinal_to_read += 1;
4132                next_offset += envelope_size;
4133            }
4134
4135            let next_out_of_line = decoder.next_out_of_line();
4136            let handles_before = decoder.remaining_handles();
4137            if let Some((inlined, num_bytes, num_handles)) =
4138                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4139            {
4140                let member_inline_size =
4141                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4142                if inlined != (member_inline_size <= 4) {
4143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4144                }
4145                let inner_offset;
4146                let mut inner_depth = depth.clone();
4147                if inlined {
4148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4149                    inner_offset = next_offset;
4150                } else {
4151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4152                    inner_depth.increment()?;
4153                }
4154                let val_ref =
4155                    self.fraction_completed.get_or_insert_with(|| fidl::new_empty!(f32, D));
4156                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
4157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4158                {
4159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4160                }
4161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4163                }
4164            }
4165
4166            next_offset += envelope_size;
4167            _next_ordinal_to_read += 1;
4168            if next_offset >= end_offset {
4169                return Ok(());
4170            }
4171
4172            // Decode unknown envelopes for gaps in ordinals.
4173            while _next_ordinal_to_read < 2 {
4174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4175                _next_ordinal_to_read += 1;
4176                next_offset += envelope_size;
4177            }
4178
4179            let next_out_of_line = decoder.next_out_of_line();
4180            let handles_before = decoder.remaining_handles();
4181            if let Some((inlined, num_bytes, num_handles)) =
4182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4183            {
4184                let member_inline_size =
4185                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4186                if inlined != (member_inline_size <= 4) {
4187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4188                }
4189                let inner_offset;
4190                let mut inner_depth = depth.clone();
4191                if inlined {
4192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4193                    inner_offset = next_offset;
4194                } else {
4195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4196                    inner_depth.increment()?;
4197                }
4198                let val_ref = self.bytes_downloaded.get_or_insert_with(|| fidl::new_empty!(u64, D));
4199                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4200                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4201                {
4202                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4203                }
4204                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4205                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4206                }
4207            }
4208
4209            next_offset += envelope_size;
4210
4211            // Decode the remaining unknown envelopes.
4212            while next_offset < end_offset {
4213                _next_ordinal_to_read += 1;
4214                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4215                next_offset += envelope_size;
4216            }
4217
4218            Ok(())
4219        }
4220    }
4221
4222    impl Options {
4223        #[inline(always)]
4224        fn max_ordinal_present(&self) -> u64 {
4225            if let Some(_) = self.manifest_range {
4226                return 4;
4227            }
4228            if let Some(_) = self.should_write_recovery {
4229                return 3;
4230            }
4231            if let Some(_) = self.allow_attach_to_existing_attempt {
4232                return 2;
4233            }
4234            if let Some(_) = self.initiator {
4235                return 1;
4236            }
4237            0
4238        }
4239    }
4240
4241    impl fidl::encoding::ValueTypeMarker for Options {
4242        type Borrowed<'a> = &'a Self;
4243        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4244            value
4245        }
4246    }
4247
4248    unsafe impl fidl::encoding::TypeMarker for Options {
4249        type Owned = Self;
4250
4251        #[inline(always)]
4252        fn inline_align(_context: fidl::encoding::Context) -> usize {
4253            8
4254        }
4255
4256        #[inline(always)]
4257        fn inline_size(_context: fidl::encoding::Context) -> usize {
4258            16
4259        }
4260    }
4261
4262    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
4263        unsafe fn encode(
4264            self,
4265            encoder: &mut fidl::encoding::Encoder<'_, D>,
4266            offset: usize,
4267            mut depth: fidl::encoding::Depth,
4268        ) -> fidl::Result<()> {
4269            encoder.debug_check_bounds::<Options>(offset);
4270            // Vector header
4271            let max_ordinal: u64 = self.max_ordinal_present();
4272            encoder.write_num(max_ordinal, offset);
4273            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4274            // Calling encoder.out_of_line_offset(0) is not allowed.
4275            if max_ordinal == 0 {
4276                return Ok(());
4277            }
4278            depth.increment()?;
4279            let envelope_size = 8;
4280            let bytes_len = max_ordinal as usize * envelope_size;
4281            #[allow(unused_variables)]
4282            let offset = encoder.out_of_line_offset(bytes_len);
4283            let mut _prev_end_offset: usize = 0;
4284            if 1 > max_ordinal {
4285                return Ok(());
4286            }
4287
4288            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4289            // are envelope_size bytes.
4290            let cur_offset: usize = (1 - 1) * envelope_size;
4291
4292            // Zero reserved fields.
4293            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4294
4295            // Safety:
4296            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4297            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4298            //   envelope_size bytes, there is always sufficient room.
4299            fidl::encoding::encode_in_envelope_optional::<Initiator, D>(
4300                self.initiator.as_ref().map(<Initiator as fidl::encoding::ValueTypeMarker>::borrow),
4301                encoder,
4302                offset + cur_offset,
4303                depth,
4304            )?;
4305
4306            _prev_end_offset = cur_offset + envelope_size;
4307            if 2 > max_ordinal {
4308                return Ok(());
4309            }
4310
4311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4312            // are envelope_size bytes.
4313            let cur_offset: usize = (2 - 1) * envelope_size;
4314
4315            // Zero reserved fields.
4316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4317
4318            // Safety:
4319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4321            //   envelope_size bytes, there is always sufficient room.
4322            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4323                self.allow_attach_to_existing_attempt
4324                    .as_ref()
4325                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4326                encoder,
4327                offset + cur_offset,
4328                depth,
4329            )?;
4330
4331            _prev_end_offset = cur_offset + envelope_size;
4332            if 3 > max_ordinal {
4333                return Ok(());
4334            }
4335
4336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4337            // are envelope_size bytes.
4338            let cur_offset: usize = (3 - 1) * envelope_size;
4339
4340            // Zero reserved fields.
4341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4342
4343            // Safety:
4344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4346            //   envelope_size bytes, there is always sufficient room.
4347            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4348                self.should_write_recovery
4349                    .as_ref()
4350                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4351                encoder,
4352                offset + cur_offset,
4353                depth,
4354            )?;
4355
4356            _prev_end_offset = cur_offset + envelope_size;
4357            if 4 > max_ordinal {
4358                return Ok(());
4359            }
4360
4361            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4362            // are envelope_size bytes.
4363            let cur_offset: usize = (4 - 1) * envelope_size;
4364
4365            // Zero reserved fields.
4366            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4367
4368            // Safety:
4369            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4370            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4371            //   envelope_size bytes, there is always sufficient room.
4372            fidl::encoding::encode_in_envelope_optional::<Range, D>(
4373                self.manifest_range
4374                    .as_ref()
4375                    .map(<Range as fidl::encoding::ValueTypeMarker>::borrow),
4376                encoder,
4377                offset + cur_offset,
4378                depth,
4379            )?;
4380
4381            _prev_end_offset = cur_offset + envelope_size;
4382
4383            Ok(())
4384        }
4385    }
4386
4387    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
4388        #[inline(always)]
4389        fn new_empty() -> Self {
4390            Self::default()
4391        }
4392
4393        unsafe fn decode(
4394            &mut self,
4395            decoder: &mut fidl::encoding::Decoder<'_, D>,
4396            offset: usize,
4397            mut depth: fidl::encoding::Depth,
4398        ) -> fidl::Result<()> {
4399            decoder.debug_check_bounds::<Self>(offset);
4400            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4401                None => return Err(fidl::Error::NotNullable),
4402                Some(len) => len,
4403            };
4404            // Calling decoder.out_of_line_offset(0) is not allowed.
4405            if len == 0 {
4406                return Ok(());
4407            };
4408            depth.increment()?;
4409            let envelope_size = 8;
4410            let bytes_len = len * envelope_size;
4411            let offset = decoder.out_of_line_offset(bytes_len)?;
4412            // Decode the envelope for each type.
4413            let mut _next_ordinal_to_read = 0;
4414            let mut next_offset = offset;
4415            let end_offset = offset + bytes_len;
4416            _next_ordinal_to_read += 1;
4417            if next_offset >= end_offset {
4418                return Ok(());
4419            }
4420
4421            // Decode unknown envelopes for gaps in ordinals.
4422            while _next_ordinal_to_read < 1 {
4423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4424                _next_ordinal_to_read += 1;
4425                next_offset += envelope_size;
4426            }
4427
4428            let next_out_of_line = decoder.next_out_of_line();
4429            let handles_before = decoder.remaining_handles();
4430            if let Some((inlined, num_bytes, num_handles)) =
4431                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4432            {
4433                let member_inline_size =
4434                    <Initiator as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4435                if inlined != (member_inline_size <= 4) {
4436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4437                }
4438                let inner_offset;
4439                let mut inner_depth = depth.clone();
4440                if inlined {
4441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4442                    inner_offset = next_offset;
4443                } else {
4444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4445                    inner_depth.increment()?;
4446                }
4447                let val_ref = self.initiator.get_or_insert_with(|| fidl::new_empty!(Initiator, D));
4448                fidl::decode!(Initiator, D, val_ref, decoder, inner_offset, inner_depth)?;
4449                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4450                {
4451                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4452                }
4453                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4454                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4455                }
4456            }
4457
4458            next_offset += envelope_size;
4459            _next_ordinal_to_read += 1;
4460            if next_offset >= end_offset {
4461                return Ok(());
4462            }
4463
4464            // Decode unknown envelopes for gaps in ordinals.
4465            while _next_ordinal_to_read < 2 {
4466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4467                _next_ordinal_to_read += 1;
4468                next_offset += envelope_size;
4469            }
4470
4471            let next_out_of_line = decoder.next_out_of_line();
4472            let handles_before = decoder.remaining_handles();
4473            if let Some((inlined, num_bytes, num_handles)) =
4474                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4475            {
4476                let member_inline_size =
4477                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4478                if inlined != (member_inline_size <= 4) {
4479                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4480                }
4481                let inner_offset;
4482                let mut inner_depth = depth.clone();
4483                if inlined {
4484                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4485                    inner_offset = next_offset;
4486                } else {
4487                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4488                    inner_depth.increment()?;
4489                }
4490                let val_ref = self
4491                    .allow_attach_to_existing_attempt
4492                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
4493                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4494                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4495                {
4496                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4497                }
4498                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4499                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4500                }
4501            }
4502
4503            next_offset += envelope_size;
4504            _next_ordinal_to_read += 1;
4505            if next_offset >= end_offset {
4506                return Ok(());
4507            }
4508
4509            // Decode unknown envelopes for gaps in ordinals.
4510            while _next_ordinal_to_read < 3 {
4511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4512                _next_ordinal_to_read += 1;
4513                next_offset += envelope_size;
4514            }
4515
4516            let next_out_of_line = decoder.next_out_of_line();
4517            let handles_before = decoder.remaining_handles();
4518            if let Some((inlined, num_bytes, num_handles)) =
4519                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4520            {
4521                let member_inline_size =
4522                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4523                if inlined != (member_inline_size <= 4) {
4524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4525                }
4526                let inner_offset;
4527                let mut inner_depth = depth.clone();
4528                if inlined {
4529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4530                    inner_offset = next_offset;
4531                } else {
4532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4533                    inner_depth.increment()?;
4534                }
4535                let val_ref =
4536                    self.should_write_recovery.get_or_insert_with(|| fidl::new_empty!(bool, D));
4537                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4539                {
4540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4541                }
4542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4544                }
4545            }
4546
4547            next_offset += envelope_size;
4548            _next_ordinal_to_read += 1;
4549            if next_offset >= end_offset {
4550                return Ok(());
4551            }
4552
4553            // Decode unknown envelopes for gaps in ordinals.
4554            while _next_ordinal_to_read < 4 {
4555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4556                _next_ordinal_to_read += 1;
4557                next_offset += envelope_size;
4558            }
4559
4560            let next_out_of_line = decoder.next_out_of_line();
4561            let handles_before = decoder.remaining_handles();
4562            if let Some((inlined, num_bytes, num_handles)) =
4563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4564            {
4565                let member_inline_size =
4566                    <Range as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4567                if inlined != (member_inline_size <= 4) {
4568                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4569                }
4570                let inner_offset;
4571                let mut inner_depth = depth.clone();
4572                if inlined {
4573                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4574                    inner_offset = next_offset;
4575                } else {
4576                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4577                    inner_depth.increment()?;
4578                }
4579                let val_ref = self.manifest_range.get_or_insert_with(|| fidl::new_empty!(Range, D));
4580                fidl::decode!(Range, D, val_ref, decoder, inner_offset, inner_depth)?;
4581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4582                {
4583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4584                }
4585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4587                }
4588            }
4589
4590            next_offset += envelope_size;
4591
4592            // Decode the remaining unknown envelopes.
4593            while next_offset < end_offset {
4594                _next_ordinal_to_read += 1;
4595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4596                next_offset += envelope_size;
4597            }
4598
4599            Ok(())
4600        }
4601    }
4602
4603    impl PrepareData {
4604        #[inline(always)]
4605        fn max_ordinal_present(&self) -> u64 {
4606            0
4607        }
4608    }
4609
4610    impl fidl::encoding::ValueTypeMarker for PrepareData {
4611        type Borrowed<'a> = &'a Self;
4612        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4613            value
4614        }
4615    }
4616
4617    unsafe impl fidl::encoding::TypeMarker for PrepareData {
4618        type Owned = Self;
4619
4620        #[inline(always)]
4621        fn inline_align(_context: fidl::encoding::Context) -> usize {
4622            8
4623        }
4624
4625        #[inline(always)]
4626        fn inline_size(_context: fidl::encoding::Context) -> usize {
4627            16
4628        }
4629    }
4630
4631    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PrepareData, D>
4632        for &PrepareData
4633    {
4634        unsafe fn encode(
4635            self,
4636            encoder: &mut fidl::encoding::Encoder<'_, D>,
4637            offset: usize,
4638            mut depth: fidl::encoding::Depth,
4639        ) -> fidl::Result<()> {
4640            encoder.debug_check_bounds::<PrepareData>(offset);
4641            // Vector header
4642            let max_ordinal: u64 = self.max_ordinal_present();
4643            encoder.write_num(max_ordinal, offset);
4644            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4645            // Calling encoder.out_of_line_offset(0) is not allowed.
4646            if max_ordinal == 0 {
4647                return Ok(());
4648            }
4649            depth.increment()?;
4650            let envelope_size = 8;
4651            let bytes_len = max_ordinal as usize * envelope_size;
4652            #[allow(unused_variables)]
4653            let offset = encoder.out_of_line_offset(bytes_len);
4654            let mut _prev_end_offset: usize = 0;
4655
4656            Ok(())
4657        }
4658    }
4659
4660    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PrepareData {
4661        #[inline(always)]
4662        fn new_empty() -> Self {
4663            Self::default()
4664        }
4665
4666        unsafe fn decode(
4667            &mut self,
4668            decoder: &mut fidl::encoding::Decoder<'_, D>,
4669            offset: usize,
4670            mut depth: fidl::encoding::Depth,
4671        ) -> fidl::Result<()> {
4672            decoder.debug_check_bounds::<Self>(offset);
4673            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4674                None => return Err(fidl::Error::NotNullable),
4675                Some(len) => len,
4676            };
4677            // Calling decoder.out_of_line_offset(0) is not allowed.
4678            if len == 0 {
4679                return Ok(());
4680            };
4681            depth.increment()?;
4682            let envelope_size = 8;
4683            let bytes_len = len * envelope_size;
4684            let offset = decoder.out_of_line_offset(bytes_len)?;
4685            // Decode the envelope for each type.
4686            let mut _next_ordinal_to_read = 0;
4687            let mut next_offset = offset;
4688            let end_offset = offset + bytes_len;
4689
4690            // Decode the remaining unknown envelopes.
4691            while next_offset < end_offset {
4692                _next_ordinal_to_read += 1;
4693                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4694                next_offset += envelope_size;
4695            }
4696
4697            Ok(())
4698        }
4699    }
4700
4701    impl RebootData {
4702        #[inline(always)]
4703        fn max_ordinal_present(&self) -> u64 {
4704            if let Some(_) = self.progress {
4705                return 2;
4706            }
4707            if let Some(_) = self.info {
4708                return 1;
4709            }
4710            0
4711        }
4712    }
4713
4714    impl fidl::encoding::ValueTypeMarker for RebootData {
4715        type Borrowed<'a> = &'a Self;
4716        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4717            value
4718        }
4719    }
4720
4721    unsafe impl fidl::encoding::TypeMarker for RebootData {
4722        type Owned = Self;
4723
4724        #[inline(always)]
4725        fn inline_align(_context: fidl::encoding::Context) -> usize {
4726            8
4727        }
4728
4729        #[inline(always)]
4730        fn inline_size(_context: fidl::encoding::Context) -> usize {
4731            16
4732        }
4733    }
4734
4735    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RebootData, D>
4736        for &RebootData
4737    {
4738        unsafe fn encode(
4739            self,
4740            encoder: &mut fidl::encoding::Encoder<'_, D>,
4741            offset: usize,
4742            mut depth: fidl::encoding::Depth,
4743        ) -> fidl::Result<()> {
4744            encoder.debug_check_bounds::<RebootData>(offset);
4745            // Vector header
4746            let max_ordinal: u64 = self.max_ordinal_present();
4747            encoder.write_num(max_ordinal, offset);
4748            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4749            // Calling encoder.out_of_line_offset(0) is not allowed.
4750            if max_ordinal == 0 {
4751                return Ok(());
4752            }
4753            depth.increment()?;
4754            let envelope_size = 8;
4755            let bytes_len = max_ordinal as usize * envelope_size;
4756            #[allow(unused_variables)]
4757            let offset = encoder.out_of_line_offset(bytes_len);
4758            let mut _prev_end_offset: usize = 0;
4759            if 1 > max_ordinal {
4760                return Ok(());
4761            }
4762
4763            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4764            // are envelope_size bytes.
4765            let cur_offset: usize = (1 - 1) * envelope_size;
4766
4767            // Zero reserved fields.
4768            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4769
4770            // Safety:
4771            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4772            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4773            //   envelope_size bytes, there is always sufficient room.
4774            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
4775                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
4776                encoder,
4777                offset + cur_offset,
4778                depth,
4779            )?;
4780
4781            _prev_end_offset = cur_offset + envelope_size;
4782            if 2 > max_ordinal {
4783                return Ok(());
4784            }
4785
4786            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4787            // are envelope_size bytes.
4788            let cur_offset: usize = (2 - 1) * envelope_size;
4789
4790            // Zero reserved fields.
4791            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4792
4793            // Safety:
4794            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4795            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4796            //   envelope_size bytes, there is always sufficient room.
4797            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
4798                self.progress
4799                    .as_ref()
4800                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
4801                encoder,
4802                offset + cur_offset,
4803                depth,
4804            )?;
4805
4806            _prev_end_offset = cur_offset + envelope_size;
4807
4808            Ok(())
4809        }
4810    }
4811
4812    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootData {
4813        #[inline(always)]
4814        fn new_empty() -> Self {
4815            Self::default()
4816        }
4817
4818        unsafe fn decode(
4819            &mut self,
4820            decoder: &mut fidl::encoding::Decoder<'_, D>,
4821            offset: usize,
4822            mut depth: fidl::encoding::Depth,
4823        ) -> fidl::Result<()> {
4824            decoder.debug_check_bounds::<Self>(offset);
4825            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4826                None => return Err(fidl::Error::NotNullable),
4827                Some(len) => len,
4828            };
4829            // Calling decoder.out_of_line_offset(0) is not allowed.
4830            if len == 0 {
4831                return Ok(());
4832            };
4833            depth.increment()?;
4834            let envelope_size = 8;
4835            let bytes_len = len * envelope_size;
4836            let offset = decoder.out_of_line_offset(bytes_len)?;
4837            // Decode the envelope for each type.
4838            let mut _next_ordinal_to_read = 0;
4839            let mut next_offset = offset;
4840            let end_offset = offset + bytes_len;
4841            _next_ordinal_to_read += 1;
4842            if next_offset >= end_offset {
4843                return Ok(());
4844            }
4845
4846            // Decode unknown envelopes for gaps in ordinals.
4847            while _next_ordinal_to_read < 1 {
4848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4849                _next_ordinal_to_read += 1;
4850                next_offset += envelope_size;
4851            }
4852
4853            let next_out_of_line = decoder.next_out_of_line();
4854            let handles_before = decoder.remaining_handles();
4855            if let Some((inlined, num_bytes, num_handles)) =
4856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4857            {
4858                let member_inline_size =
4859                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4860                if inlined != (member_inline_size <= 4) {
4861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4862                }
4863                let inner_offset;
4864                let mut inner_depth = depth.clone();
4865                if inlined {
4866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4867                    inner_offset = next_offset;
4868                } else {
4869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4870                    inner_depth.increment()?;
4871                }
4872                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
4873                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
4874                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4875                {
4876                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4877                }
4878                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4879                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4880                }
4881            }
4882
4883            next_offset += envelope_size;
4884            _next_ordinal_to_read += 1;
4885            if next_offset >= end_offset {
4886                return Ok(());
4887            }
4888
4889            // Decode unknown envelopes for gaps in ordinals.
4890            while _next_ordinal_to_read < 2 {
4891                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4892                _next_ordinal_to_read += 1;
4893                next_offset += envelope_size;
4894            }
4895
4896            let next_out_of_line = decoder.next_out_of_line();
4897            let handles_before = decoder.remaining_handles();
4898            if let Some((inlined, num_bytes, num_handles)) =
4899                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4900            {
4901                let member_inline_size =
4902                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
4903                        decoder.context,
4904                    );
4905                if inlined != (member_inline_size <= 4) {
4906                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4907                }
4908                let inner_offset;
4909                let mut inner_depth = depth.clone();
4910                if inlined {
4911                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4912                    inner_offset = next_offset;
4913                } else {
4914                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4915                    inner_depth.increment()?;
4916                }
4917                let val_ref =
4918                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
4919                fidl::decode!(
4920                    InstallationProgress,
4921                    D,
4922                    val_ref,
4923                    decoder,
4924                    inner_offset,
4925                    inner_depth
4926                )?;
4927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4928                {
4929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4930                }
4931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4933                }
4934            }
4935
4936            next_offset += envelope_size;
4937
4938            // Decode the remaining unknown envelopes.
4939            while next_offset < end_offset {
4940                _next_ordinal_to_read += 1;
4941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4942                next_offset += envelope_size;
4943            }
4944
4945            Ok(())
4946        }
4947    }
4948
4949    impl StageData {
4950        #[inline(always)]
4951        fn max_ordinal_present(&self) -> u64 {
4952            if let Some(_) = self.progress {
4953                return 2;
4954            }
4955            if let Some(_) = self.info {
4956                return 1;
4957            }
4958            0
4959        }
4960    }
4961
4962    impl fidl::encoding::ValueTypeMarker for StageData {
4963        type Borrowed<'a> = &'a Self;
4964        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4965            value
4966        }
4967    }
4968
4969    unsafe impl fidl::encoding::TypeMarker for StageData {
4970        type Owned = Self;
4971
4972        #[inline(always)]
4973        fn inline_align(_context: fidl::encoding::Context) -> usize {
4974            8
4975        }
4976
4977        #[inline(always)]
4978        fn inline_size(_context: fidl::encoding::Context) -> usize {
4979            16
4980        }
4981    }
4982
4983    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StageData, D>
4984        for &StageData
4985    {
4986        unsafe fn encode(
4987            self,
4988            encoder: &mut fidl::encoding::Encoder<'_, D>,
4989            offset: usize,
4990            mut depth: fidl::encoding::Depth,
4991        ) -> fidl::Result<()> {
4992            encoder.debug_check_bounds::<StageData>(offset);
4993            // Vector header
4994            let max_ordinal: u64 = self.max_ordinal_present();
4995            encoder.write_num(max_ordinal, offset);
4996            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4997            // Calling encoder.out_of_line_offset(0) is not allowed.
4998            if max_ordinal == 0 {
4999                return Ok(());
5000            }
5001            depth.increment()?;
5002            let envelope_size = 8;
5003            let bytes_len = max_ordinal as usize * envelope_size;
5004            #[allow(unused_variables)]
5005            let offset = encoder.out_of_line_offset(bytes_len);
5006            let mut _prev_end_offset: usize = 0;
5007            if 1 > max_ordinal {
5008                return Ok(());
5009            }
5010
5011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5012            // are envelope_size bytes.
5013            let cur_offset: usize = (1 - 1) * envelope_size;
5014
5015            // Zero reserved fields.
5016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5017
5018            // Safety:
5019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5021            //   envelope_size bytes, there is always sufficient room.
5022            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
5023                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
5024                encoder,
5025                offset + cur_offset,
5026                depth,
5027            )?;
5028
5029            _prev_end_offset = cur_offset + envelope_size;
5030            if 2 > max_ordinal {
5031                return Ok(());
5032            }
5033
5034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5035            // are envelope_size bytes.
5036            let cur_offset: usize = (2 - 1) * envelope_size;
5037
5038            // Zero reserved fields.
5039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5040
5041            // Safety:
5042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5044            //   envelope_size bytes, there is always sufficient room.
5045            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
5046                self.progress
5047                    .as_ref()
5048                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
5049                encoder,
5050                offset + cur_offset,
5051                depth,
5052            )?;
5053
5054            _prev_end_offset = cur_offset + envelope_size;
5055
5056            Ok(())
5057        }
5058    }
5059
5060    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StageData {
5061        #[inline(always)]
5062        fn new_empty() -> Self {
5063            Self::default()
5064        }
5065
5066        unsafe fn decode(
5067            &mut self,
5068            decoder: &mut fidl::encoding::Decoder<'_, D>,
5069            offset: usize,
5070            mut depth: fidl::encoding::Depth,
5071        ) -> fidl::Result<()> {
5072            decoder.debug_check_bounds::<Self>(offset);
5073            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5074                None => return Err(fidl::Error::NotNullable),
5075                Some(len) => len,
5076            };
5077            // Calling decoder.out_of_line_offset(0) is not allowed.
5078            if len == 0 {
5079                return Ok(());
5080            };
5081            depth.increment()?;
5082            let envelope_size = 8;
5083            let bytes_len = len * envelope_size;
5084            let offset = decoder.out_of_line_offset(bytes_len)?;
5085            // Decode the envelope for each type.
5086            let mut _next_ordinal_to_read = 0;
5087            let mut next_offset = offset;
5088            let end_offset = offset + bytes_len;
5089            _next_ordinal_to_read += 1;
5090            if next_offset >= end_offset {
5091                return Ok(());
5092            }
5093
5094            // Decode unknown envelopes for gaps in ordinals.
5095            while _next_ordinal_to_read < 1 {
5096                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5097                _next_ordinal_to_read += 1;
5098                next_offset += envelope_size;
5099            }
5100
5101            let next_out_of_line = decoder.next_out_of_line();
5102            let handles_before = decoder.remaining_handles();
5103            if let Some((inlined, num_bytes, num_handles)) =
5104                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5105            {
5106                let member_inline_size =
5107                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5108                if inlined != (member_inline_size <= 4) {
5109                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5110                }
5111                let inner_offset;
5112                let mut inner_depth = depth.clone();
5113                if inlined {
5114                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5115                    inner_offset = next_offset;
5116                } else {
5117                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5118                    inner_depth.increment()?;
5119                }
5120                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
5121                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
5122                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5123                {
5124                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5125                }
5126                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5127                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5128                }
5129            }
5130
5131            next_offset += envelope_size;
5132            _next_ordinal_to_read += 1;
5133            if next_offset >= end_offset {
5134                return Ok(());
5135            }
5136
5137            // Decode unknown envelopes for gaps in ordinals.
5138            while _next_ordinal_to_read < 2 {
5139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5140                _next_ordinal_to_read += 1;
5141                next_offset += envelope_size;
5142            }
5143
5144            let next_out_of_line = decoder.next_out_of_line();
5145            let handles_before = decoder.remaining_handles();
5146            if let Some((inlined, num_bytes, num_handles)) =
5147                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5148            {
5149                let member_inline_size =
5150                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
5151                        decoder.context,
5152                    );
5153                if inlined != (member_inline_size <= 4) {
5154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5155                }
5156                let inner_offset;
5157                let mut inner_depth = depth.clone();
5158                if inlined {
5159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5160                    inner_offset = next_offset;
5161                } else {
5162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5163                    inner_depth.increment()?;
5164                }
5165                let val_ref =
5166                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
5167                fidl::decode!(
5168                    InstallationProgress,
5169                    D,
5170                    val_ref,
5171                    decoder,
5172                    inner_offset,
5173                    inner_depth
5174                )?;
5175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5176                {
5177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5178                }
5179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5181                }
5182            }
5183
5184            next_offset += envelope_size;
5185
5186            // Decode the remaining unknown envelopes.
5187            while next_offset < end_offset {
5188                _next_ordinal_to_read += 1;
5189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5190                next_offset += envelope_size;
5191            }
5192
5193            Ok(())
5194        }
5195    }
5196
5197    impl UpdateInfo {
5198        #[inline(always)]
5199        fn max_ordinal_present(&self) -> u64 {
5200            if let Some(_) = self.download_size {
5201                return 1;
5202            }
5203            0
5204        }
5205    }
5206
5207    impl fidl::encoding::ValueTypeMarker for UpdateInfo {
5208        type Borrowed<'a> = &'a Self;
5209        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5210            value
5211        }
5212    }
5213
5214    unsafe impl fidl::encoding::TypeMarker for UpdateInfo {
5215        type Owned = Self;
5216
5217        #[inline(always)]
5218        fn inline_align(_context: fidl::encoding::Context) -> usize {
5219            8
5220        }
5221
5222        #[inline(always)]
5223        fn inline_size(_context: fidl::encoding::Context) -> usize {
5224            16
5225        }
5226    }
5227
5228    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UpdateInfo, D>
5229        for &UpdateInfo
5230    {
5231        unsafe fn encode(
5232            self,
5233            encoder: &mut fidl::encoding::Encoder<'_, D>,
5234            offset: usize,
5235            mut depth: fidl::encoding::Depth,
5236        ) -> fidl::Result<()> {
5237            encoder.debug_check_bounds::<UpdateInfo>(offset);
5238            // Vector header
5239            let max_ordinal: u64 = self.max_ordinal_present();
5240            encoder.write_num(max_ordinal, offset);
5241            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5242            // Calling encoder.out_of_line_offset(0) is not allowed.
5243            if max_ordinal == 0 {
5244                return Ok(());
5245            }
5246            depth.increment()?;
5247            let envelope_size = 8;
5248            let bytes_len = max_ordinal as usize * envelope_size;
5249            #[allow(unused_variables)]
5250            let offset = encoder.out_of_line_offset(bytes_len);
5251            let mut _prev_end_offset: usize = 0;
5252            if 1 > max_ordinal {
5253                return Ok(());
5254            }
5255
5256            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5257            // are envelope_size bytes.
5258            let cur_offset: usize = (1 - 1) * envelope_size;
5259
5260            // Zero reserved fields.
5261            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5262
5263            // Safety:
5264            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5265            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5266            //   envelope_size bytes, there is always sufficient room.
5267            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5268                self.download_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5269                encoder,
5270                offset + cur_offset,
5271                depth,
5272            )?;
5273
5274            _prev_end_offset = cur_offset + envelope_size;
5275
5276            Ok(())
5277        }
5278    }
5279
5280    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpdateInfo {
5281        #[inline(always)]
5282        fn new_empty() -> Self {
5283            Self::default()
5284        }
5285
5286        unsafe fn decode(
5287            &mut self,
5288            decoder: &mut fidl::encoding::Decoder<'_, D>,
5289            offset: usize,
5290            mut depth: fidl::encoding::Depth,
5291        ) -> fidl::Result<()> {
5292            decoder.debug_check_bounds::<Self>(offset);
5293            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5294                None => return Err(fidl::Error::NotNullable),
5295                Some(len) => len,
5296            };
5297            // Calling decoder.out_of_line_offset(0) is not allowed.
5298            if len == 0 {
5299                return Ok(());
5300            };
5301            depth.increment()?;
5302            let envelope_size = 8;
5303            let bytes_len = len * envelope_size;
5304            let offset = decoder.out_of_line_offset(bytes_len)?;
5305            // Decode the envelope for each type.
5306            let mut _next_ordinal_to_read = 0;
5307            let mut next_offset = offset;
5308            let end_offset = offset + bytes_len;
5309            _next_ordinal_to_read += 1;
5310            if next_offset >= end_offset {
5311                return Ok(());
5312            }
5313
5314            // Decode unknown envelopes for gaps in ordinals.
5315            while _next_ordinal_to_read < 1 {
5316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5317                _next_ordinal_to_read += 1;
5318                next_offset += envelope_size;
5319            }
5320
5321            let next_out_of_line = decoder.next_out_of_line();
5322            let handles_before = decoder.remaining_handles();
5323            if let Some((inlined, num_bytes, num_handles)) =
5324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5325            {
5326                let member_inline_size =
5327                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5328                if inlined != (member_inline_size <= 4) {
5329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5330                }
5331                let inner_offset;
5332                let mut inner_depth = depth.clone();
5333                if inlined {
5334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5335                    inner_offset = next_offset;
5336                } else {
5337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5338                    inner_depth.increment()?;
5339                }
5340                let val_ref = self.download_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
5341                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5342                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5343                {
5344                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5345                }
5346                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5347                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5348                }
5349            }
5350
5351            next_offset += envelope_size;
5352
5353            // Decode the remaining unknown envelopes.
5354            while next_offset < end_offset {
5355                _next_ordinal_to_read += 1;
5356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5357                next_offset += envelope_size;
5358            }
5359
5360            Ok(())
5361        }
5362    }
5363
5364    impl WaitToRebootData {
5365        #[inline(always)]
5366        fn max_ordinal_present(&self) -> u64 {
5367            if let Some(_) = self.progress {
5368                return 2;
5369            }
5370            if let Some(_) = self.info {
5371                return 1;
5372            }
5373            0
5374        }
5375    }
5376
5377    impl fidl::encoding::ValueTypeMarker for WaitToRebootData {
5378        type Borrowed<'a> = &'a Self;
5379        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5380            value
5381        }
5382    }
5383
5384    unsafe impl fidl::encoding::TypeMarker for WaitToRebootData {
5385        type Owned = Self;
5386
5387        #[inline(always)]
5388        fn inline_align(_context: fidl::encoding::Context) -> usize {
5389            8
5390        }
5391
5392        #[inline(always)]
5393        fn inline_size(_context: fidl::encoding::Context) -> usize {
5394            16
5395        }
5396    }
5397
5398    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WaitToRebootData, D>
5399        for &WaitToRebootData
5400    {
5401        unsafe fn encode(
5402            self,
5403            encoder: &mut fidl::encoding::Encoder<'_, D>,
5404            offset: usize,
5405            mut depth: fidl::encoding::Depth,
5406        ) -> fidl::Result<()> {
5407            encoder.debug_check_bounds::<WaitToRebootData>(offset);
5408            // Vector header
5409            let max_ordinal: u64 = self.max_ordinal_present();
5410            encoder.write_num(max_ordinal, offset);
5411            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5412            // Calling encoder.out_of_line_offset(0) is not allowed.
5413            if max_ordinal == 0 {
5414                return Ok(());
5415            }
5416            depth.increment()?;
5417            let envelope_size = 8;
5418            let bytes_len = max_ordinal as usize * envelope_size;
5419            #[allow(unused_variables)]
5420            let offset = encoder.out_of_line_offset(bytes_len);
5421            let mut _prev_end_offset: usize = 0;
5422            if 1 > max_ordinal {
5423                return Ok(());
5424            }
5425
5426            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5427            // are envelope_size bytes.
5428            let cur_offset: usize = (1 - 1) * envelope_size;
5429
5430            // Zero reserved fields.
5431            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5432
5433            // Safety:
5434            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5435            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5436            //   envelope_size bytes, there is always sufficient room.
5437            fidl::encoding::encode_in_envelope_optional::<UpdateInfo, D>(
5438                self.info.as_ref().map(<UpdateInfo as fidl::encoding::ValueTypeMarker>::borrow),
5439                encoder,
5440                offset + cur_offset,
5441                depth,
5442            )?;
5443
5444            _prev_end_offset = cur_offset + envelope_size;
5445            if 2 > max_ordinal {
5446                return Ok(());
5447            }
5448
5449            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5450            // are envelope_size bytes.
5451            let cur_offset: usize = (2 - 1) * envelope_size;
5452
5453            // Zero reserved fields.
5454            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5455
5456            // Safety:
5457            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5458            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5459            //   envelope_size bytes, there is always sufficient room.
5460            fidl::encoding::encode_in_envelope_optional::<InstallationProgress, D>(
5461                self.progress
5462                    .as_ref()
5463                    .map(<InstallationProgress as fidl::encoding::ValueTypeMarker>::borrow),
5464                encoder,
5465                offset + cur_offset,
5466                depth,
5467            )?;
5468
5469            _prev_end_offset = cur_offset + envelope_size;
5470
5471            Ok(())
5472        }
5473    }
5474
5475    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WaitToRebootData {
5476        #[inline(always)]
5477        fn new_empty() -> Self {
5478            Self::default()
5479        }
5480
5481        unsafe fn decode(
5482            &mut self,
5483            decoder: &mut fidl::encoding::Decoder<'_, D>,
5484            offset: usize,
5485            mut depth: fidl::encoding::Depth,
5486        ) -> fidl::Result<()> {
5487            decoder.debug_check_bounds::<Self>(offset);
5488            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5489                None => return Err(fidl::Error::NotNullable),
5490                Some(len) => len,
5491            };
5492            // Calling decoder.out_of_line_offset(0) is not allowed.
5493            if len == 0 {
5494                return Ok(());
5495            };
5496            depth.increment()?;
5497            let envelope_size = 8;
5498            let bytes_len = len * envelope_size;
5499            let offset = decoder.out_of_line_offset(bytes_len)?;
5500            // Decode the envelope for each type.
5501            let mut _next_ordinal_to_read = 0;
5502            let mut next_offset = offset;
5503            let end_offset = offset + bytes_len;
5504            _next_ordinal_to_read += 1;
5505            if next_offset >= end_offset {
5506                return Ok(());
5507            }
5508
5509            // Decode unknown envelopes for gaps in ordinals.
5510            while _next_ordinal_to_read < 1 {
5511                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5512                _next_ordinal_to_read += 1;
5513                next_offset += envelope_size;
5514            }
5515
5516            let next_out_of_line = decoder.next_out_of_line();
5517            let handles_before = decoder.remaining_handles();
5518            if let Some((inlined, num_bytes, num_handles)) =
5519                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5520            {
5521                let member_inline_size =
5522                    <UpdateInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5523                if inlined != (member_inline_size <= 4) {
5524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5525                }
5526                let inner_offset;
5527                let mut inner_depth = depth.clone();
5528                if inlined {
5529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5530                    inner_offset = next_offset;
5531                } else {
5532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5533                    inner_depth.increment()?;
5534                }
5535                let val_ref = self.info.get_or_insert_with(|| fidl::new_empty!(UpdateInfo, D));
5536                fidl::decode!(UpdateInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
5537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5538                {
5539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5540                }
5541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5543                }
5544            }
5545
5546            next_offset += envelope_size;
5547            _next_ordinal_to_read += 1;
5548            if next_offset >= end_offset {
5549                return Ok(());
5550            }
5551
5552            // Decode unknown envelopes for gaps in ordinals.
5553            while _next_ordinal_to_read < 2 {
5554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5555                _next_ordinal_to_read += 1;
5556                next_offset += envelope_size;
5557            }
5558
5559            let next_out_of_line = decoder.next_out_of_line();
5560            let handles_before = decoder.remaining_handles();
5561            if let Some((inlined, num_bytes, num_handles)) =
5562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5563            {
5564                let member_inline_size =
5565                    <InstallationProgress as fidl::encoding::TypeMarker>::inline_size(
5566                        decoder.context,
5567                    );
5568                if inlined != (member_inline_size <= 4) {
5569                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5570                }
5571                let inner_offset;
5572                let mut inner_depth = depth.clone();
5573                if inlined {
5574                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5575                    inner_offset = next_offset;
5576                } else {
5577                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5578                    inner_depth.increment()?;
5579                }
5580                let val_ref =
5581                    self.progress.get_or_insert_with(|| fidl::new_empty!(InstallationProgress, D));
5582                fidl::decode!(
5583                    InstallationProgress,
5584                    D,
5585                    val_ref,
5586                    decoder,
5587                    inner_offset,
5588                    inner_depth
5589                )?;
5590                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5591                {
5592                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5593                }
5594                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5595                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5596                }
5597            }
5598
5599            next_offset += envelope_size;
5600
5601            // Decode the remaining unknown envelopes.
5602            while next_offset < end_offset {
5603                _next_ordinal_to_read += 1;
5604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5605                next_offset += envelope_size;
5606            }
5607
5608            Ok(())
5609        }
5610    }
5611
5612    impl fidl::encoding::ValueTypeMarker for State {
5613        type Borrowed<'a> = &'a Self;
5614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5615            value
5616        }
5617    }
5618
5619    unsafe impl fidl::encoding::TypeMarker for State {
5620        type Owned = Self;
5621
5622        #[inline(always)]
5623        fn inline_align(_context: fidl::encoding::Context) -> usize {
5624            8
5625        }
5626
5627        #[inline(always)]
5628        fn inline_size(_context: fidl::encoding::Context) -> usize {
5629            16
5630        }
5631    }
5632
5633    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<State, D> for &State {
5634        #[inline]
5635        unsafe fn encode(
5636            self,
5637            encoder: &mut fidl::encoding::Encoder<'_, D>,
5638            offset: usize,
5639            _depth: fidl::encoding::Depth,
5640        ) -> fidl::Result<()> {
5641            encoder.debug_check_bounds::<State>(offset);
5642            encoder.write_num::<u64>(self.ordinal(), offset);
5643            match self {
5644                State::Prepare(ref val) => fidl::encoding::encode_in_envelope::<PrepareData, D>(
5645                    <PrepareData as fidl::encoding::ValueTypeMarker>::borrow(val),
5646                    encoder,
5647                    offset + 8,
5648                    _depth,
5649                ),
5650                State::Stage(ref val) => fidl::encoding::encode_in_envelope::<StageData, D>(
5651                    <StageData as fidl::encoding::ValueTypeMarker>::borrow(val),
5652                    encoder,
5653                    offset + 8,
5654                    _depth,
5655                ),
5656                State::Fetch(ref val) => fidl::encoding::encode_in_envelope::<FetchData, D>(
5657                    <FetchData as fidl::encoding::ValueTypeMarker>::borrow(val),
5658                    encoder,
5659                    offset + 8,
5660                    _depth,
5661                ),
5662                State::Commit(ref val) => fidl::encoding::encode_in_envelope::<CommitData, D>(
5663                    <CommitData as fidl::encoding::ValueTypeMarker>::borrow(val),
5664                    encoder,
5665                    offset + 8,
5666                    _depth,
5667                ),
5668                State::WaitToReboot(ref val) => {
5669                    fidl::encoding::encode_in_envelope::<WaitToRebootData, D>(
5670                        <WaitToRebootData as fidl::encoding::ValueTypeMarker>::borrow(val),
5671                        encoder,
5672                        offset + 8,
5673                        _depth,
5674                    )
5675                }
5676                State::Reboot(ref val) => fidl::encoding::encode_in_envelope::<RebootData, D>(
5677                    <RebootData as fidl::encoding::ValueTypeMarker>::borrow(val),
5678                    encoder,
5679                    offset + 8,
5680                    _depth,
5681                ),
5682                State::DeferReboot(ref val) => {
5683                    fidl::encoding::encode_in_envelope::<DeferRebootData, D>(
5684                        <DeferRebootData as fidl::encoding::ValueTypeMarker>::borrow(val),
5685                        encoder,
5686                        offset + 8,
5687                        _depth,
5688                    )
5689                }
5690                State::Complete(ref val) => fidl::encoding::encode_in_envelope::<CompleteData, D>(
5691                    <CompleteData as fidl::encoding::ValueTypeMarker>::borrow(val),
5692                    encoder,
5693                    offset + 8,
5694                    _depth,
5695                ),
5696                State::FailPrepare(ref val) => {
5697                    fidl::encoding::encode_in_envelope::<FailPrepareData, D>(
5698                        <FailPrepareData as fidl::encoding::ValueTypeMarker>::borrow(val),
5699                        encoder,
5700                        offset + 8,
5701                        _depth,
5702                    )
5703                }
5704                State::FailStage(ref val) => {
5705                    fidl::encoding::encode_in_envelope::<FailStageData, D>(
5706                        <FailStageData as fidl::encoding::ValueTypeMarker>::borrow(val),
5707                        encoder,
5708                        offset + 8,
5709                        _depth,
5710                    )
5711                }
5712                State::FailFetch(ref val) => {
5713                    fidl::encoding::encode_in_envelope::<FailFetchData, D>(
5714                        <FailFetchData as fidl::encoding::ValueTypeMarker>::borrow(val),
5715                        encoder,
5716                        offset + 8,
5717                        _depth,
5718                    )
5719                }
5720                State::FailCommit(ref val) => {
5721                    fidl::encoding::encode_in_envelope::<FailCommitData, D>(
5722                        <FailCommitData as fidl::encoding::ValueTypeMarker>::borrow(val),
5723                        encoder,
5724                        offset + 8,
5725                        _depth,
5726                    )
5727                }
5728                State::Canceled(ref val) => fidl::encoding::encode_in_envelope::<CanceledData, D>(
5729                    <CanceledData as fidl::encoding::ValueTypeMarker>::borrow(val),
5730                    encoder,
5731                    offset + 8,
5732                    _depth,
5733                ),
5734            }
5735        }
5736    }
5737
5738    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for State {
5739        #[inline(always)]
5740        fn new_empty() -> Self {
5741            Self::Prepare(fidl::new_empty!(PrepareData, D))
5742        }
5743
5744        #[inline]
5745        unsafe fn decode(
5746            &mut self,
5747            decoder: &mut fidl::encoding::Decoder<'_, D>,
5748            offset: usize,
5749            mut depth: fidl::encoding::Depth,
5750        ) -> fidl::Result<()> {
5751            decoder.debug_check_bounds::<Self>(offset);
5752            #[allow(unused_variables)]
5753            let next_out_of_line = decoder.next_out_of_line();
5754            let handles_before = decoder.remaining_handles();
5755            let (ordinal, inlined, num_bytes, num_handles) =
5756                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5757
5758            let member_inline_size = match ordinal {
5759                1 => <PrepareData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5760                2 => <StageData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5761                3 => <FetchData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5762                4 => <CommitData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5763                5 => <WaitToRebootData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5764                6 => <RebootData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5765                7 => <DeferRebootData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5766                8 => <CompleteData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5767                9 => <FailPrepareData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5768                10 => <FailStageData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5769                11 => <FailFetchData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5770                12 => <FailCommitData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5771                13 => <CanceledData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5772                _ => return Err(fidl::Error::UnknownUnionTag),
5773            };
5774
5775            if inlined != (member_inline_size <= 4) {
5776                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5777            }
5778            let _inner_offset;
5779            if inlined {
5780                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5781                _inner_offset = offset + 8;
5782            } else {
5783                depth.increment()?;
5784                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5785            }
5786            match ordinal {
5787                1 => {
5788                    #[allow(irrefutable_let_patterns)]
5789                    if let State::Prepare(_) = self {
5790                        // Do nothing, read the value into the object
5791                    } else {
5792                        // Initialize `self` to the right variant
5793                        *self = State::Prepare(fidl::new_empty!(PrepareData, D));
5794                    }
5795                    #[allow(irrefutable_let_patterns)]
5796                    if let State::Prepare(ref mut val) = self {
5797                        fidl::decode!(PrepareData, D, val, decoder, _inner_offset, depth)?;
5798                    } else {
5799                        unreachable!()
5800                    }
5801                }
5802                2 => {
5803                    #[allow(irrefutable_let_patterns)]
5804                    if let State::Stage(_) = self {
5805                        // Do nothing, read the value into the object
5806                    } else {
5807                        // Initialize `self` to the right variant
5808                        *self = State::Stage(fidl::new_empty!(StageData, D));
5809                    }
5810                    #[allow(irrefutable_let_patterns)]
5811                    if let State::Stage(ref mut val) = self {
5812                        fidl::decode!(StageData, D, val, decoder, _inner_offset, depth)?;
5813                    } else {
5814                        unreachable!()
5815                    }
5816                }
5817                3 => {
5818                    #[allow(irrefutable_let_patterns)]
5819                    if let State::Fetch(_) = self {
5820                        // Do nothing, read the value into the object
5821                    } else {
5822                        // Initialize `self` to the right variant
5823                        *self = State::Fetch(fidl::new_empty!(FetchData, D));
5824                    }
5825                    #[allow(irrefutable_let_patterns)]
5826                    if let State::Fetch(ref mut val) = self {
5827                        fidl::decode!(FetchData, D, val, decoder, _inner_offset, depth)?;
5828                    } else {
5829                        unreachable!()
5830                    }
5831                }
5832                4 => {
5833                    #[allow(irrefutable_let_patterns)]
5834                    if let State::Commit(_) = self {
5835                        // Do nothing, read the value into the object
5836                    } else {
5837                        // Initialize `self` to the right variant
5838                        *self = State::Commit(fidl::new_empty!(CommitData, D));
5839                    }
5840                    #[allow(irrefutable_let_patterns)]
5841                    if let State::Commit(ref mut val) = self {
5842                        fidl::decode!(CommitData, D, val, decoder, _inner_offset, depth)?;
5843                    } else {
5844                        unreachable!()
5845                    }
5846                }
5847                5 => {
5848                    #[allow(irrefutable_let_patterns)]
5849                    if let State::WaitToReboot(_) = self {
5850                        // Do nothing, read the value into the object
5851                    } else {
5852                        // Initialize `self` to the right variant
5853                        *self = State::WaitToReboot(fidl::new_empty!(WaitToRebootData, D));
5854                    }
5855                    #[allow(irrefutable_let_patterns)]
5856                    if let State::WaitToReboot(ref mut val) = self {
5857                        fidl::decode!(WaitToRebootData, D, val, decoder, _inner_offset, depth)?;
5858                    } else {
5859                        unreachable!()
5860                    }
5861                }
5862                6 => {
5863                    #[allow(irrefutable_let_patterns)]
5864                    if let State::Reboot(_) = self {
5865                        // Do nothing, read the value into the object
5866                    } else {
5867                        // Initialize `self` to the right variant
5868                        *self = State::Reboot(fidl::new_empty!(RebootData, D));
5869                    }
5870                    #[allow(irrefutable_let_patterns)]
5871                    if let State::Reboot(ref mut val) = self {
5872                        fidl::decode!(RebootData, D, val, decoder, _inner_offset, depth)?;
5873                    } else {
5874                        unreachable!()
5875                    }
5876                }
5877                7 => {
5878                    #[allow(irrefutable_let_patterns)]
5879                    if let State::DeferReboot(_) = self {
5880                        // Do nothing, read the value into the object
5881                    } else {
5882                        // Initialize `self` to the right variant
5883                        *self = State::DeferReboot(fidl::new_empty!(DeferRebootData, D));
5884                    }
5885                    #[allow(irrefutable_let_patterns)]
5886                    if let State::DeferReboot(ref mut val) = self {
5887                        fidl::decode!(DeferRebootData, D, val, decoder, _inner_offset, depth)?;
5888                    } else {
5889                        unreachable!()
5890                    }
5891                }
5892                8 => {
5893                    #[allow(irrefutable_let_patterns)]
5894                    if let State::Complete(_) = self {
5895                        // Do nothing, read the value into the object
5896                    } else {
5897                        // Initialize `self` to the right variant
5898                        *self = State::Complete(fidl::new_empty!(CompleteData, D));
5899                    }
5900                    #[allow(irrefutable_let_patterns)]
5901                    if let State::Complete(ref mut val) = self {
5902                        fidl::decode!(CompleteData, D, val, decoder, _inner_offset, depth)?;
5903                    } else {
5904                        unreachable!()
5905                    }
5906                }
5907                9 => {
5908                    #[allow(irrefutable_let_patterns)]
5909                    if let State::FailPrepare(_) = self {
5910                        // Do nothing, read the value into the object
5911                    } else {
5912                        // Initialize `self` to the right variant
5913                        *self = State::FailPrepare(fidl::new_empty!(FailPrepareData, D));
5914                    }
5915                    #[allow(irrefutable_let_patterns)]
5916                    if let State::FailPrepare(ref mut val) = self {
5917                        fidl::decode!(FailPrepareData, D, val, decoder, _inner_offset, depth)?;
5918                    } else {
5919                        unreachable!()
5920                    }
5921                }
5922                10 => {
5923                    #[allow(irrefutable_let_patterns)]
5924                    if let State::FailStage(_) = self {
5925                        // Do nothing, read the value into the object
5926                    } else {
5927                        // Initialize `self` to the right variant
5928                        *self = State::FailStage(fidl::new_empty!(FailStageData, D));
5929                    }
5930                    #[allow(irrefutable_let_patterns)]
5931                    if let State::FailStage(ref mut val) = self {
5932                        fidl::decode!(FailStageData, D, val, decoder, _inner_offset, depth)?;
5933                    } else {
5934                        unreachable!()
5935                    }
5936                }
5937                11 => {
5938                    #[allow(irrefutable_let_patterns)]
5939                    if let State::FailFetch(_) = self {
5940                        // Do nothing, read the value into the object
5941                    } else {
5942                        // Initialize `self` to the right variant
5943                        *self = State::FailFetch(fidl::new_empty!(FailFetchData, D));
5944                    }
5945                    #[allow(irrefutable_let_patterns)]
5946                    if let State::FailFetch(ref mut val) = self {
5947                        fidl::decode!(FailFetchData, D, val, decoder, _inner_offset, depth)?;
5948                    } else {
5949                        unreachable!()
5950                    }
5951                }
5952                12 => {
5953                    #[allow(irrefutable_let_patterns)]
5954                    if let State::FailCommit(_) = self {
5955                        // Do nothing, read the value into the object
5956                    } else {
5957                        // Initialize `self` to the right variant
5958                        *self = State::FailCommit(fidl::new_empty!(FailCommitData, D));
5959                    }
5960                    #[allow(irrefutable_let_patterns)]
5961                    if let State::FailCommit(ref mut val) = self {
5962                        fidl::decode!(FailCommitData, D, val, decoder, _inner_offset, depth)?;
5963                    } else {
5964                        unreachable!()
5965                    }
5966                }
5967                13 => {
5968                    #[allow(irrefutable_let_patterns)]
5969                    if let State::Canceled(_) = self {
5970                        // Do nothing, read the value into the object
5971                    } else {
5972                        // Initialize `self` to the right variant
5973                        *self = State::Canceled(fidl::new_empty!(CanceledData, D));
5974                    }
5975                    #[allow(irrefutable_let_patterns)]
5976                    if let State::Canceled(ref mut val) = self {
5977                        fidl::decode!(CanceledData, D, val, decoder, _inner_offset, depth)?;
5978                    } else {
5979                        unreachable!()
5980                    }
5981                }
5982                ordinal => panic!("unexpected ordinal {:?}", ordinal),
5983            }
5984            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5985                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5986            }
5987            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5988                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5989            }
5990            Ok(())
5991        }
5992    }
5993}