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