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