Skip to main content

fidl_fuchsia_cpu_profiler__common/
fidl_fuchsia_cpu_profiler__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Various approaches to obtaining a backtrace
12#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13pub enum CallgraphStrategy {
14    /// Don't try to get a callgraph
15    None,
16    /// Copy out stack memory and attempt to parse the DWARF info.
17    /// This is the slowest and most memory intensive of the approaches, but
18    /// gives the most accurate callgraphs. Parsing dwarf allows the callgraph
19    /// to trace inlined and leaf functions which other approaches do not
20    /// support.
21    Dwarf,
22    /// Intel CPUs support a hardware feature called Last Branch Records (LBR)s
23    /// which record up to the last 32 calls made depending on hardware version.
24    /// On supported CPUs, this is a low overhead approach to finding the
25    /// callgraph with the caveat that stacks that exceed 32 calls in depth will
26    /// overflow the hardware buffer.
27    LastBranchRecord,
28    /// arm and riscv support shadow call stacks which are an efficient way for us
29    /// to find and copy out the call stack. However, leaf functions and code
30    /// compiled without shadow callstack support, such as the vdso will not
31    /// appear in the returned callgraph.
32    ShadowCallStack,
33    /// A general approach of parsing the frame pointers of the callstack. Frame
34    /// pointers are supported across architectures and are slightly more
35    /// expensive than the lbrs or shadow call stacks, but much cheaper than
36    /// parsing dwarf. Code compiled with omitted frame pointers and inlined
37    /// functions will not appear in the resulting stacks.
38    FramePointer,
39    #[doc(hidden)]
40    __SourceBreaking { unknown_ordinal: u8 },
41}
42
43/// Pattern that matches an unknown `CallgraphStrategy` member.
44#[macro_export]
45macro_rules! CallgraphStrategyUnknown {
46    () => {
47        _
48    };
49}
50
51impl CallgraphStrategy {
52    #[inline]
53    pub fn from_primitive(prim: u8) -> Option<Self> {
54        match prim {
55            0 => Some(Self::None),
56            1 => Some(Self::Dwarf),
57            2 => Some(Self::LastBranchRecord),
58            3 => Some(Self::ShadowCallStack),
59            4 => Some(Self::FramePointer),
60            _ => None,
61        }
62    }
63
64    #[inline]
65    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
66        match prim {
67            0 => Self::None,
68            1 => Self::Dwarf,
69            2 => Self::LastBranchRecord,
70            3 => Self::ShadowCallStack,
71            4 => Self::FramePointer,
72            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
73        }
74    }
75
76    #[inline]
77    pub fn unknown() -> Self {
78        Self::__SourceBreaking { unknown_ordinal: 0xff }
79    }
80
81    #[inline]
82    pub const fn into_primitive(self) -> u8 {
83        match self {
84            Self::None => 0,
85            Self::Dwarf => 1,
86            Self::LastBranchRecord => 2,
87            Self::ShadowCallStack => 3,
88            Self::FramePointer => 4,
89            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
90        }
91    }
92
93    #[inline]
94    pub fn is_unknown(&self) -> bool {
95        match self {
96            Self::__SourceBreaking { unknown_ordinal: _ } => true,
97            _ => false,
98        }
99    }
100}
101
102/// Curated set of platform independent IDs
103#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
104pub enum CounterId {
105    /// A counter increments each nanosecond
106    Nanoseconds,
107    /// A counter increments each cpu cycle
108    Cycles,
109    /// A counter increments on each instruction retired
110    InstructionsRetired,
111    /// A counter increments on each branch correctly predicted
112    BranchesPredicted,
113    /// A counter increments on each branch mispredicted
114    BranchesMispredidcted,
115    #[doc(hidden)]
116    __SourceBreaking { unknown_ordinal: u8 },
117}
118
119/// Pattern that matches an unknown `CounterId` member.
120#[macro_export]
121macro_rules! CounterIdUnknown {
122    () => {
123        _
124    };
125}
126
127impl CounterId {
128    #[inline]
129    pub fn from_primitive(prim: u8) -> Option<Self> {
130        match prim {
131            0 => Some(Self::Nanoseconds),
132            1 => Some(Self::Cycles),
133            2 => Some(Self::InstructionsRetired),
134            3 => Some(Self::BranchesPredicted),
135            4 => Some(Self::BranchesMispredidcted),
136            _ => None,
137        }
138    }
139
140    #[inline]
141    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
142        match prim {
143            0 => Self::Nanoseconds,
144            1 => Self::Cycles,
145            2 => Self::InstructionsRetired,
146            3 => Self::BranchesPredicted,
147            4 => Self::BranchesMispredidcted,
148            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
149        }
150    }
151
152    #[inline]
153    pub fn unknown() -> Self {
154        Self::__SourceBreaking { unknown_ordinal: 0xff }
155    }
156
157    #[inline]
158    pub const fn into_primitive(self) -> u8 {
159        match self {
160            Self::Nanoseconds => 0,
161            Self::Cycles => 1,
162            Self::InstructionsRetired => 2,
163            Self::BranchesPredicted => 3,
164            Self::BranchesMispredidcted => 4,
165            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
166        }
167    }
168
169    #[inline]
170    pub fn is_unknown(&self) -> bool {
171        match self {
172            Self::__SourceBreaking { unknown_ordinal: _ } => true,
173            _ => false,
174        }
175    }
176}
177
178/// Error codes for SessionManager operations.
179#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
180pub enum ManagerError {
181    /// A general error when starting a profile.
182    Start,
183    /// The requested task_id does not exist or is no longer running.
184    NoSuchTask,
185    /// The configuration provided was invalid.
186    InvalidConfiguration,
187    /// The device cannot support more concurrent sessions.
188    TooManySessions,
189    /// A general error when stopping a profile.
190    Stop,
191    #[doc(hidden)]
192    __SourceBreaking { unknown_ordinal: u32 },
193}
194
195/// Pattern that matches an unknown `ManagerError` member.
196#[macro_export]
197macro_rules! ManagerErrorUnknown {
198    () => {
199        _
200    };
201}
202
203impl ManagerError {
204    #[inline]
205    pub fn from_primitive(prim: u32) -> Option<Self> {
206        match prim {
207            1 => Some(Self::Start),
208            2 => Some(Self::NoSuchTask),
209            3 => Some(Self::InvalidConfiguration),
210            4 => Some(Self::TooManySessions),
211            5 => Some(Self::Stop),
212            _ => None,
213        }
214    }
215
216    #[inline]
217    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
218        match prim {
219            1 => Self::Start,
220            2 => Self::NoSuchTask,
221            3 => Self::InvalidConfiguration,
222            4 => Self::TooManySessions,
223            5 => Self::Stop,
224            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
225        }
226    }
227
228    #[inline]
229    pub fn unknown() -> Self {
230        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
231    }
232
233    #[inline]
234    pub const fn into_primitive(self) -> u32 {
235        match self {
236            Self::Start => 1,
237            Self::NoSuchTask => 2,
238            Self::InvalidConfiguration => 3,
239            Self::TooManySessions => 4,
240            Self::Stop => 5,
241            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
242        }
243    }
244
245    #[inline]
246    pub fn is_unknown(&self) -> bool {
247        match self {
248            Self::__SourceBreaking { unknown_ordinal: _ } => true,
249            _ => false,
250        }
251    }
252}
253
254#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
255pub enum SessionConfigureError {
256    BadSocket,
257    BadState,
258    InvalidConfiguration,
259    MissingSampleConfigs,
260    MissingTargetConfigs,
261    MissingComponentUrl,
262    #[doc(hidden)]
263    __SourceBreaking {
264        unknown_ordinal: u32,
265    },
266}
267
268/// Pattern that matches an unknown `SessionConfigureError` member.
269#[macro_export]
270macro_rules! SessionConfigureErrorUnknown {
271    () => {
272        _
273    };
274}
275
276impl SessionConfigureError {
277    #[inline]
278    pub fn from_primitive(prim: u32) -> Option<Self> {
279        match prim {
280            1 => Some(Self::BadSocket),
281            2 => Some(Self::BadState),
282            3 => Some(Self::InvalidConfiguration),
283            4 => Some(Self::MissingSampleConfigs),
284            5 => Some(Self::MissingTargetConfigs),
285            6 => Some(Self::MissingComponentUrl),
286            _ => None,
287        }
288    }
289
290    #[inline]
291    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
292        match prim {
293            1 => Self::BadSocket,
294            2 => Self::BadState,
295            3 => Self::InvalidConfiguration,
296            4 => Self::MissingSampleConfigs,
297            5 => Self::MissingTargetConfigs,
298            6 => Self::MissingComponentUrl,
299            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
300        }
301    }
302
303    #[inline]
304    pub fn unknown() -> Self {
305        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
306    }
307
308    #[inline]
309    pub const fn into_primitive(self) -> u32 {
310        match self {
311            Self::BadSocket => 1,
312            Self::BadState => 2,
313            Self::InvalidConfiguration => 3,
314            Self::MissingSampleConfigs => 4,
315            Self::MissingTargetConfigs => 5,
316            Self::MissingComponentUrl => 6,
317            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
318        }
319    }
320
321    #[inline]
322    pub fn is_unknown(&self) -> bool {
323        match self {
324            Self::__SourceBreaking { unknown_ordinal: _ } => true,
325            _ => false,
326        }
327    }
328}
329
330#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
331pub enum SessionStartError {
332    BadState,
333    #[doc(hidden)]
334    __SourceBreaking {
335        unknown_ordinal: u32,
336    },
337}
338
339/// Pattern that matches an unknown `SessionStartError` member.
340#[macro_export]
341macro_rules! SessionStartErrorUnknown {
342    () => {
343        _
344    };
345}
346
347impl SessionStartError {
348    #[inline]
349    pub fn from_primitive(prim: u32) -> Option<Self> {
350        match prim {
351            1 => Some(Self::BadState),
352            _ => None,
353        }
354    }
355
356    #[inline]
357    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
358        match prim {
359            1 => Self::BadState,
360            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
361        }
362    }
363
364    #[inline]
365    pub fn unknown() -> Self {
366        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
367    }
368
369    #[inline]
370    pub const fn into_primitive(self) -> u32 {
371        match self {
372            Self::BadState => 1,
373            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
374        }
375    }
376
377    #[inline]
378    pub fn is_unknown(&self) -> bool {
379        match self {
380            Self::__SourceBreaking { unknown_ordinal: _ } => true,
381            _ => false,
382        }
383    }
384}
385
386#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
387pub struct SystemWide;
388
389impl fidl::Persistable for SystemWide {}
390
391#[derive(Clone, Debug, Default, PartialEq)]
392pub struct CallgraphConfig {
393    pub strategy: Option<CallgraphStrategy>,
394    #[doc(hidden)]
395    pub __source_breaking: fidl::marker::SourceBreaking,
396}
397
398impl fidl::Persistable for CallgraphConfig {}
399
400#[derive(Clone, Debug, Default, PartialEq)]
401pub struct LaunchComponent {
402    /// The url of the component to launch (required)
403    pub url: Option<String>,
404    /// The location to launch the component. If not specified, a default
405    /// location will be used.
406    pub moniker: Option<String>,
407    #[doc(hidden)]
408    pub __source_breaking: fidl::marker::SourceBreaking,
409}
410
411impl fidl::Persistable for LaunchComponent {}
412
413#[derive(Clone, Debug, Default, PartialEq)]
414pub struct OnBootConfig {
415    pub configs: Option<Vec<SamplingConfig>>,
416    pub target: Option<OnBootTargetConfig>,
417    #[doc(hidden)]
418    pub __source_breaking: fidl::marker::SourceBreaking,
419}
420
421impl fidl::Persistable for OnBootConfig {}
422impl fidl::Serializable for OnBootConfig {
423    const SERIALIZABLE_NAME: &'static str = "fuchsia.cpu.profiler.OnBootConfig";
424}
425
426/// Status of the profiling session managed by SessionManager.
427#[derive(Clone, Debug, Default, PartialEq)]
428pub struct ProfilerStatus {
429    /// Unique id of this profiling session.
430    pub task_id: Option<u64>,
431    #[doc(hidden)]
432    pub __source_breaking: fidl::marker::SourceBreaking,
433}
434
435impl fidl::Persistable for ProfilerStatus {}
436
437#[derive(Clone, Debug, Default, PartialEq)]
438pub struct Sample {
439    /// Whether the profiler should include callgraph information and if so,
440    /// what strategy it should use.
441    pub callgraph: Option<CallgraphConfig>,
442    /// The value of a counter since the last sample
443    pub counters: Option<Vec<Counter>>,
444    #[doc(hidden)]
445    pub __source_breaking: fidl::marker::SourceBreaking,
446}
447
448impl fidl::Persistable for Sample {}
449
450/// Profiling information about the profile itself
451#[derive(Clone, Debug, Default, PartialEq)]
452pub struct SamplingConfig {
453    /// How many ticks of the counter should occur between each sample
454    pub period: Option<u64>,
455    /// The counter to the rate on
456    pub timebase: Option<Counter>,
457    /// What information the profiler will write when it takes
458    /// a sample.
459    pub sample: Option<Sample>,
460    #[doc(hidden)]
461    pub __source_breaking: fidl::marker::SourceBreaking,
462}
463
464impl fidl::Persistable for SamplingConfig {}
465
466#[derive(Clone, Debug, Default, PartialEq)]
467pub struct SessionManagerAbortSessionRequest {
468    pub task_id: Option<u64>,
469    #[doc(hidden)]
470    pub __source_breaking: fidl::marker::SourceBreaking,
471}
472
473impl fidl::Persistable for SessionManagerAbortSessionRequest {}
474
475#[derive(Clone, Debug, Default, PartialEq)]
476pub struct SessionManagerStartSessionOnBootRequest {
477    pub config: Option<OnBootConfig>,
478    #[doc(hidden)]
479    pub __source_breaking: fidl::marker::SourceBreaking,
480}
481
482impl fidl::Persistable for SessionManagerStartSessionOnBootRequest {}
483
484#[derive(Clone, Debug, Default, PartialEq)]
485pub struct SessionManagerStartSessionResponse {
486    /// Unique identifier for this background session.
487    pub task_id: Option<u64>,
488    #[doc(hidden)]
489    pub __source_breaking: fidl::marker::SourceBreaking,
490}
491
492impl fidl::Persistable for SessionManagerStartSessionResponse {}
493
494#[derive(Clone, Debug, Default, PartialEq)]
495pub struct SessionManagerStatusResponse {
496    pub sessions: Option<Vec<ProfilerStatus>>,
497    #[doc(hidden)]
498    pub __source_breaking: fidl::marker::SourceBreaking,
499}
500
501impl fidl::Persistable for SessionManagerStatusResponse {}
502
503/// The result returned after stopping a profiling session.
504#[derive(Clone, Debug, Default, PartialEq)]
505pub struct SessionResult {
506    pub samples_collected: Option<u64>,
507    pub mean_sample_time: Option<u64>,
508    pub median_sample_time: Option<u64>,
509    pub min_sample_time: Option<u64>,
510    pub max_sample_time: Option<u64>,
511    pub missing_process_mappings: Option<Vec<u64>>,
512    #[doc(hidden)]
513    pub __source_breaking: fidl::marker::SourceBreaking,
514}
515
516impl fidl::Persistable for SessionResult {}
517
518#[derive(Clone, Debug, Default, PartialEq)]
519pub struct SessionStartRequest {
520    /// If true, delays writing data to the output socket until the profiling
521    /// session ends. This reduces overhead, but also caps the maximum output
522    /// size to the requested buffer size.
523    pub buffer_size_mb: Option<u64>,
524    pub buffer_results: Option<bool>,
525    #[doc(hidden)]
526    pub __source_breaking: fidl::marker::SourceBreaking,
527}
528
529impl fidl::Persistable for SessionStartRequest {}
530
531#[derive(Clone, Debug)]
532pub enum Counter {
533    /// Curated set of platform independent ids that get converted into the
534    /// appropriate hardware specific counter id.
535    PlatformIndependent(CounterId),
536    /// In the case a counter is not widely supported across
537    /// platform or not included in the curated set, one can
538    /// specify a platform dependent id that will not get
539    /// converted.
540    PlatformDependent(u32),
541    #[doc(hidden)]
542    __SourceBreaking { unknown_ordinal: u64 },
543}
544
545/// Pattern that matches an unknown `Counter` member.
546#[macro_export]
547macro_rules! CounterUnknown {
548    () => {
549        _
550    };
551}
552
553// Custom PartialEq so that unknown variants are not equal to themselves.
554impl PartialEq for Counter {
555    fn eq(&self, other: &Self) -> bool {
556        match (self, other) {
557            (Self::PlatformIndependent(x), Self::PlatformIndependent(y)) => *x == *y,
558            (Self::PlatformDependent(x), Self::PlatformDependent(y)) => *x == *y,
559            _ => false,
560        }
561    }
562}
563
564impl Counter {
565    #[inline]
566    pub fn ordinal(&self) -> u64 {
567        match *self {
568            Self::PlatformIndependent(_) => 1,
569            Self::PlatformDependent(_) => 2,
570            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
571        }
572    }
573
574    #[inline]
575    pub fn unknown_variant_for_testing() -> Self {
576        Self::__SourceBreaking { unknown_ordinal: 0 }
577    }
578
579    #[inline]
580    pub fn is_unknown(&self) -> bool {
581        match self {
582            Self::__SourceBreaking { .. } => true,
583            _ => false,
584        }
585    }
586}
587
588impl fidl::Persistable for Counter {}
589
590#[derive(Clone, Debug)]
591pub enum OnBootAttachConfig {
592    /// Attach to an existing component by moniker. If a component doesn't exist
593    /// at that moniker, wait for it to appear and attach to it when it does.
594    AttachToComponentMoniker(String),
595    /// Attach to an existing component by url. If the component doesn't
596    /// exist with the specified url, wait for it to appear and attach to it when
597    /// it does.
598    AttachToComponentUrl(String),
599    #[doc(hidden)]
600    __SourceBreaking { unknown_ordinal: u64 },
601}
602
603/// Pattern that matches an unknown `OnBootAttachConfig` member.
604#[macro_export]
605macro_rules! OnBootAttachConfigUnknown {
606    () => {
607        _
608    };
609}
610
611// Custom PartialEq so that unknown variants are not equal to themselves.
612impl PartialEq for OnBootAttachConfig {
613    fn eq(&self, other: &Self) -> bool {
614        match (self, other) {
615            (Self::AttachToComponentMoniker(x), Self::AttachToComponentMoniker(y)) => *x == *y,
616            (Self::AttachToComponentUrl(x), Self::AttachToComponentUrl(y)) => *x == *y,
617            _ => false,
618        }
619    }
620}
621
622impl OnBootAttachConfig {
623    #[inline]
624    pub fn ordinal(&self) -> u64 {
625        match *self {
626            Self::AttachToComponentMoniker(_) => 1,
627            Self::AttachToComponentUrl(_) => 2,
628            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
629        }
630    }
631
632    #[inline]
633    pub fn unknown_variant_for_testing() -> Self {
634        Self::__SourceBreaking { unknown_ordinal: 0 }
635    }
636
637    #[inline]
638    pub fn is_unknown(&self) -> bool {
639        match self {
640            Self::__SourceBreaking { .. } => true,
641            _ => false,
642        }
643    }
644}
645
646impl fidl::Persistable for OnBootAttachConfig {}
647
648#[derive(Clone, Debug)]
649pub enum OnBootTargetConfig {
650    /// An adhoc set of threads/processes/jobs
651    Tasks(Vec<Task>),
652    /// Profile a component and all tasks it launches
653    Component(OnBootAttachConfig),
654    #[doc(hidden)]
655    __SourceBreaking { unknown_ordinal: u64 },
656}
657
658/// Pattern that matches an unknown `OnBootTargetConfig` member.
659#[macro_export]
660macro_rules! OnBootTargetConfigUnknown {
661    () => {
662        _
663    };
664}
665
666// Custom PartialEq so that unknown variants are not equal to themselves.
667impl PartialEq for OnBootTargetConfig {
668    fn eq(&self, other: &Self) -> bool {
669        match (self, other) {
670            (Self::Tasks(x), Self::Tasks(y)) => *x == *y,
671            (Self::Component(x), Self::Component(y)) => *x == *y,
672            _ => false,
673        }
674    }
675}
676
677impl OnBootTargetConfig {
678    #[inline]
679    pub fn ordinal(&self) -> u64 {
680        match *self {
681            Self::Tasks(_) => 1,
682            Self::Component(_) => 2,
683            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
684        }
685    }
686
687    #[inline]
688    pub fn unknown_variant_for_testing() -> Self {
689        Self::__SourceBreaking { unknown_ordinal: 0 }
690    }
691
692    #[inline]
693    pub fn is_unknown(&self) -> bool {
694        match self {
695            Self::__SourceBreaking { .. } => true,
696            _ => false,
697        }
698    }
699}
700
701impl fidl::Persistable for OnBootTargetConfig {}
702
703/// An adhoc set of running tasks to attach to.
704#[derive(Clone, Debug)]
705pub enum Task {
706    /// Profile a process and all threads associated with it.
707    Process(u64),
708    /// Profile a single thread.
709    Thread(u64),
710    /// Profile a job and all processes and threads associated with it.
711    Job(u64),
712    /// Profile everything running on the system.
713    ///
714    /// Equivalent to finding root job's koid and passing it as a Task::job.
715    SystemWide(SystemWide),
716    #[doc(hidden)]
717    __SourceBreaking { unknown_ordinal: u64 },
718}
719
720/// Pattern that matches an unknown `Task` member.
721#[macro_export]
722macro_rules! TaskUnknown {
723    () => {
724        _
725    };
726}
727
728// Custom PartialEq so that unknown variants are not equal to themselves.
729impl PartialEq for Task {
730    fn eq(&self, other: &Self) -> bool {
731        match (self, other) {
732            (Self::Process(x), Self::Process(y)) => *x == *y,
733            (Self::Thread(x), Self::Thread(y)) => *x == *y,
734            (Self::Job(x), Self::Job(y)) => *x == *y,
735            (Self::SystemWide(x), Self::SystemWide(y)) => *x == *y,
736            _ => false,
737        }
738    }
739}
740
741impl Task {
742    #[inline]
743    pub fn ordinal(&self) -> u64 {
744        match *self {
745            Self::Process(_) => 1,
746            Self::Thread(_) => 2,
747            Self::Job(_) => 3,
748            Self::SystemWide(_) => 4,
749            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
750        }
751    }
752
753    #[inline]
754    pub fn unknown_variant_for_testing() -> Self {
755        Self::__SourceBreaking { unknown_ordinal: 0 }
756    }
757
758    #[inline]
759    pub fn is_unknown(&self) -> bool {
760        match self {
761            Self::__SourceBreaking { .. } => true,
762            _ => false,
763        }
764    }
765}
766
767impl fidl::Persistable for Task {}
768
769pub mod session_ordinals {
770    pub const CONFIGURE: u64 = 0x67e7e28a9b959ce8;
771    pub const START: u64 = 0x4e82f9133a968ad5;
772    pub const STOP: u64 = 0x76aa8dd59cb61e89;
773    pub const RESET: u64 = 0x5f522fde537356fa;
774}
775
776pub mod session_manager_ordinals {
777    pub const CONFIGURE: u64 = 0x67e7e28a9b959ce8;
778    pub const START: u64 = 0x4e82f9133a968ad5;
779    pub const STOP: u64 = 0x76aa8dd59cb61e89;
780    pub const RESET: u64 = 0x5f522fde537356fa;
781    pub const START_SESSION: u64 = 0x637a4c897f1a2964;
782    pub const STOP_SESSION: u64 = 0x1a05081e2b79f023;
783    pub const ABORT_SESSION: u64 = 0x6799fed94ce940be;
784    pub const STATUS: u64 = 0xc116d75f457cae2;
785    pub const START_SESSION_ON_BOOT: u64 = 0x3af30d4844fd015b;
786}
787
788mod internal {
789    use super::*;
790    unsafe impl fidl::encoding::TypeMarker for CallgraphStrategy {
791        type Owned = Self;
792
793        #[inline(always)]
794        fn inline_align(_context: fidl::encoding::Context) -> usize {
795            std::mem::align_of::<u8>()
796        }
797
798        #[inline(always)]
799        fn inline_size(_context: fidl::encoding::Context) -> usize {
800            std::mem::size_of::<u8>()
801        }
802
803        #[inline(always)]
804        fn encode_is_copy() -> bool {
805            false
806        }
807
808        #[inline(always)]
809        fn decode_is_copy() -> bool {
810            false
811        }
812    }
813
814    impl fidl::encoding::ValueTypeMarker for CallgraphStrategy {
815        type Borrowed<'a> = Self;
816        #[inline(always)]
817        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
818            *value
819        }
820    }
821
822    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
823        for CallgraphStrategy
824    {
825        #[inline]
826        unsafe fn encode(
827            self,
828            encoder: &mut fidl::encoding::Encoder<'_, D>,
829            offset: usize,
830            _depth: fidl::encoding::Depth,
831        ) -> fidl::Result<()> {
832            encoder.debug_check_bounds::<Self>(offset);
833            encoder.write_num(self.into_primitive(), offset);
834            Ok(())
835        }
836    }
837
838    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CallgraphStrategy {
839        #[inline(always)]
840        fn new_empty() -> Self {
841            Self::unknown()
842        }
843
844        #[inline]
845        unsafe fn decode(
846            &mut self,
847            decoder: &mut fidl::encoding::Decoder<'_, D>,
848            offset: usize,
849            _depth: fidl::encoding::Depth,
850        ) -> fidl::Result<()> {
851            decoder.debug_check_bounds::<Self>(offset);
852            let prim = decoder.read_num::<u8>(offset);
853
854            *self = Self::from_primitive_allow_unknown(prim);
855            Ok(())
856        }
857    }
858    unsafe impl fidl::encoding::TypeMarker for CounterId {
859        type Owned = Self;
860
861        #[inline(always)]
862        fn inline_align(_context: fidl::encoding::Context) -> usize {
863            std::mem::align_of::<u8>()
864        }
865
866        #[inline(always)]
867        fn inline_size(_context: fidl::encoding::Context) -> usize {
868            std::mem::size_of::<u8>()
869        }
870
871        #[inline(always)]
872        fn encode_is_copy() -> bool {
873            false
874        }
875
876        #[inline(always)]
877        fn decode_is_copy() -> bool {
878            false
879        }
880    }
881
882    impl fidl::encoding::ValueTypeMarker for CounterId {
883        type Borrowed<'a> = Self;
884        #[inline(always)]
885        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
886            *value
887        }
888    }
889
890    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CounterId {
891        #[inline]
892        unsafe fn encode(
893            self,
894            encoder: &mut fidl::encoding::Encoder<'_, D>,
895            offset: usize,
896            _depth: fidl::encoding::Depth,
897        ) -> fidl::Result<()> {
898            encoder.debug_check_bounds::<Self>(offset);
899            encoder.write_num(self.into_primitive(), offset);
900            Ok(())
901        }
902    }
903
904    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CounterId {
905        #[inline(always)]
906        fn new_empty() -> Self {
907            Self::unknown()
908        }
909
910        #[inline]
911        unsafe fn decode(
912            &mut self,
913            decoder: &mut fidl::encoding::Decoder<'_, D>,
914            offset: usize,
915            _depth: fidl::encoding::Depth,
916        ) -> fidl::Result<()> {
917            decoder.debug_check_bounds::<Self>(offset);
918            let prim = decoder.read_num::<u8>(offset);
919
920            *self = Self::from_primitive_allow_unknown(prim);
921            Ok(())
922        }
923    }
924    unsafe impl fidl::encoding::TypeMarker for ManagerError {
925        type Owned = Self;
926
927        #[inline(always)]
928        fn inline_align(_context: fidl::encoding::Context) -> usize {
929            std::mem::align_of::<u32>()
930        }
931
932        #[inline(always)]
933        fn inline_size(_context: fidl::encoding::Context) -> usize {
934            std::mem::size_of::<u32>()
935        }
936
937        #[inline(always)]
938        fn encode_is_copy() -> bool {
939            false
940        }
941
942        #[inline(always)]
943        fn decode_is_copy() -> bool {
944            false
945        }
946    }
947
948    impl fidl::encoding::ValueTypeMarker for ManagerError {
949        type Borrowed<'a> = Self;
950        #[inline(always)]
951        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
952            *value
953        }
954    }
955
956    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ManagerError {
957        #[inline]
958        unsafe fn encode(
959            self,
960            encoder: &mut fidl::encoding::Encoder<'_, D>,
961            offset: usize,
962            _depth: fidl::encoding::Depth,
963        ) -> fidl::Result<()> {
964            encoder.debug_check_bounds::<Self>(offset);
965            encoder.write_num(self.into_primitive(), offset);
966            Ok(())
967        }
968    }
969
970    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ManagerError {
971        #[inline(always)]
972        fn new_empty() -> Self {
973            Self::unknown()
974        }
975
976        #[inline]
977        unsafe fn decode(
978            &mut self,
979            decoder: &mut fidl::encoding::Decoder<'_, D>,
980            offset: usize,
981            _depth: fidl::encoding::Depth,
982        ) -> fidl::Result<()> {
983            decoder.debug_check_bounds::<Self>(offset);
984            let prim = decoder.read_num::<u32>(offset);
985
986            *self = Self::from_primitive_allow_unknown(prim);
987            Ok(())
988        }
989    }
990    unsafe impl fidl::encoding::TypeMarker for SessionConfigureError {
991        type Owned = Self;
992
993        #[inline(always)]
994        fn inline_align(_context: fidl::encoding::Context) -> usize {
995            std::mem::align_of::<u32>()
996        }
997
998        #[inline(always)]
999        fn inline_size(_context: fidl::encoding::Context) -> usize {
1000            std::mem::size_of::<u32>()
1001        }
1002
1003        #[inline(always)]
1004        fn encode_is_copy() -> bool {
1005            false
1006        }
1007
1008        #[inline(always)]
1009        fn decode_is_copy() -> bool {
1010            false
1011        }
1012    }
1013
1014    impl fidl::encoding::ValueTypeMarker for SessionConfigureError {
1015        type Borrowed<'a> = Self;
1016        #[inline(always)]
1017        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1018            *value
1019        }
1020    }
1021
1022    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1023        for SessionConfigureError
1024    {
1025        #[inline]
1026        unsafe fn encode(
1027            self,
1028            encoder: &mut fidl::encoding::Encoder<'_, D>,
1029            offset: usize,
1030            _depth: fidl::encoding::Depth,
1031        ) -> fidl::Result<()> {
1032            encoder.debug_check_bounds::<Self>(offset);
1033            encoder.write_num(self.into_primitive(), offset);
1034            Ok(())
1035        }
1036    }
1037
1038    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SessionConfigureError {
1039        #[inline(always)]
1040        fn new_empty() -> Self {
1041            Self::unknown()
1042        }
1043
1044        #[inline]
1045        unsafe fn decode(
1046            &mut self,
1047            decoder: &mut fidl::encoding::Decoder<'_, D>,
1048            offset: usize,
1049            _depth: fidl::encoding::Depth,
1050        ) -> fidl::Result<()> {
1051            decoder.debug_check_bounds::<Self>(offset);
1052            let prim = decoder.read_num::<u32>(offset);
1053
1054            *self = Self::from_primitive_allow_unknown(prim);
1055            Ok(())
1056        }
1057    }
1058    unsafe impl fidl::encoding::TypeMarker for SessionStartError {
1059        type Owned = Self;
1060
1061        #[inline(always)]
1062        fn inline_align(_context: fidl::encoding::Context) -> usize {
1063            std::mem::align_of::<u32>()
1064        }
1065
1066        #[inline(always)]
1067        fn inline_size(_context: fidl::encoding::Context) -> usize {
1068            std::mem::size_of::<u32>()
1069        }
1070
1071        #[inline(always)]
1072        fn encode_is_copy() -> bool {
1073            false
1074        }
1075
1076        #[inline(always)]
1077        fn decode_is_copy() -> bool {
1078            false
1079        }
1080    }
1081
1082    impl fidl::encoding::ValueTypeMarker for SessionStartError {
1083        type Borrowed<'a> = Self;
1084        #[inline(always)]
1085        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1086            *value
1087        }
1088    }
1089
1090    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1091        for SessionStartError
1092    {
1093        #[inline]
1094        unsafe fn encode(
1095            self,
1096            encoder: &mut fidl::encoding::Encoder<'_, D>,
1097            offset: usize,
1098            _depth: fidl::encoding::Depth,
1099        ) -> fidl::Result<()> {
1100            encoder.debug_check_bounds::<Self>(offset);
1101            encoder.write_num(self.into_primitive(), offset);
1102            Ok(())
1103        }
1104    }
1105
1106    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SessionStartError {
1107        #[inline(always)]
1108        fn new_empty() -> Self {
1109            Self::unknown()
1110        }
1111
1112        #[inline]
1113        unsafe fn decode(
1114            &mut self,
1115            decoder: &mut fidl::encoding::Decoder<'_, D>,
1116            offset: usize,
1117            _depth: fidl::encoding::Depth,
1118        ) -> fidl::Result<()> {
1119            decoder.debug_check_bounds::<Self>(offset);
1120            let prim = decoder.read_num::<u32>(offset);
1121
1122            *self = Self::from_primitive_allow_unknown(prim);
1123            Ok(())
1124        }
1125    }
1126
1127    impl fidl::encoding::ValueTypeMarker for SystemWide {
1128        type Borrowed<'a> = &'a Self;
1129        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1130            value
1131        }
1132    }
1133
1134    unsafe impl fidl::encoding::TypeMarker for SystemWide {
1135        type Owned = Self;
1136
1137        #[inline(always)]
1138        fn inline_align(_context: fidl::encoding::Context) -> usize {
1139            1
1140        }
1141
1142        #[inline(always)]
1143        fn inline_size(_context: fidl::encoding::Context) -> usize {
1144            1
1145        }
1146    }
1147
1148    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SystemWide, D>
1149        for &SystemWide
1150    {
1151        #[inline]
1152        unsafe fn encode(
1153            self,
1154            encoder: &mut fidl::encoding::Encoder<'_, D>,
1155            offset: usize,
1156            _depth: fidl::encoding::Depth,
1157        ) -> fidl::Result<()> {
1158            encoder.debug_check_bounds::<SystemWide>(offset);
1159            encoder.write_num(0u8, offset);
1160            Ok(())
1161        }
1162    }
1163
1164    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SystemWide {
1165        #[inline(always)]
1166        fn new_empty() -> Self {
1167            Self
1168        }
1169
1170        #[inline]
1171        unsafe fn decode(
1172            &mut self,
1173            decoder: &mut fidl::encoding::Decoder<'_, D>,
1174            offset: usize,
1175            _depth: fidl::encoding::Depth,
1176        ) -> fidl::Result<()> {
1177            decoder.debug_check_bounds::<Self>(offset);
1178            match decoder.read_num::<u8>(offset) {
1179                0 => Ok(()),
1180                _ => Err(fidl::Error::Invalid),
1181            }
1182        }
1183    }
1184
1185    impl CallgraphConfig {
1186        #[inline(always)]
1187        fn max_ordinal_present(&self) -> u64 {
1188            if let Some(_) = self.strategy {
1189                return 1;
1190            }
1191            0
1192        }
1193    }
1194
1195    impl fidl::encoding::ValueTypeMarker for CallgraphConfig {
1196        type Borrowed<'a> = &'a Self;
1197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1198            value
1199        }
1200    }
1201
1202    unsafe impl fidl::encoding::TypeMarker for CallgraphConfig {
1203        type Owned = Self;
1204
1205        #[inline(always)]
1206        fn inline_align(_context: fidl::encoding::Context) -> usize {
1207            8
1208        }
1209
1210        #[inline(always)]
1211        fn inline_size(_context: fidl::encoding::Context) -> usize {
1212            16
1213        }
1214    }
1215
1216    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CallgraphConfig, D>
1217        for &CallgraphConfig
1218    {
1219        unsafe fn encode(
1220            self,
1221            encoder: &mut fidl::encoding::Encoder<'_, D>,
1222            offset: usize,
1223            mut depth: fidl::encoding::Depth,
1224        ) -> fidl::Result<()> {
1225            encoder.debug_check_bounds::<CallgraphConfig>(offset);
1226            // Vector header
1227            let max_ordinal: u64 = self.max_ordinal_present();
1228            encoder.write_num(max_ordinal, offset);
1229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1230            // Calling encoder.out_of_line_offset(0) is not allowed.
1231            if max_ordinal == 0 {
1232                return Ok(());
1233            }
1234            depth.increment()?;
1235            let envelope_size = 8;
1236            let bytes_len = max_ordinal as usize * envelope_size;
1237            #[allow(unused_variables)]
1238            let offset = encoder.out_of_line_offset(bytes_len);
1239            let mut _prev_end_offset: usize = 0;
1240            if 1 > max_ordinal {
1241                return Ok(());
1242            }
1243
1244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1245            // are envelope_size bytes.
1246            let cur_offset: usize = (1 - 1) * envelope_size;
1247
1248            // Zero reserved fields.
1249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1250
1251            // Safety:
1252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1254            //   envelope_size bytes, there is always sufficient room.
1255            fidl::encoding::encode_in_envelope_optional::<CallgraphStrategy, D>(
1256                self.strategy
1257                    .as_ref()
1258                    .map(<CallgraphStrategy as fidl::encoding::ValueTypeMarker>::borrow),
1259                encoder,
1260                offset + cur_offset,
1261                depth,
1262            )?;
1263
1264            _prev_end_offset = cur_offset + envelope_size;
1265
1266            Ok(())
1267        }
1268    }
1269
1270    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CallgraphConfig {
1271        #[inline(always)]
1272        fn new_empty() -> Self {
1273            Self::default()
1274        }
1275
1276        unsafe fn decode(
1277            &mut self,
1278            decoder: &mut fidl::encoding::Decoder<'_, D>,
1279            offset: usize,
1280            mut depth: fidl::encoding::Depth,
1281        ) -> fidl::Result<()> {
1282            decoder.debug_check_bounds::<Self>(offset);
1283            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1284                None => return Err(fidl::Error::NotNullable),
1285                Some(len) => len,
1286            };
1287            // Calling decoder.out_of_line_offset(0) is not allowed.
1288            if len == 0 {
1289                return Ok(());
1290            };
1291            depth.increment()?;
1292            let envelope_size = 8;
1293            let bytes_len = len * envelope_size;
1294            let offset = decoder.out_of_line_offset(bytes_len)?;
1295            // Decode the envelope for each type.
1296            let mut _next_ordinal_to_read = 0;
1297            let mut next_offset = offset;
1298            let end_offset = offset + bytes_len;
1299            _next_ordinal_to_read += 1;
1300            if next_offset >= end_offset {
1301                return Ok(());
1302            }
1303
1304            // Decode unknown envelopes for gaps in ordinals.
1305            while _next_ordinal_to_read < 1 {
1306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1307                _next_ordinal_to_read += 1;
1308                next_offset += envelope_size;
1309            }
1310
1311            let next_out_of_line = decoder.next_out_of_line();
1312            let handles_before = decoder.remaining_handles();
1313            if let Some((inlined, num_bytes, num_handles)) =
1314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1315            {
1316                let member_inline_size =
1317                    <CallgraphStrategy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1318                if inlined != (member_inline_size <= 4) {
1319                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1320                }
1321                let inner_offset;
1322                let mut inner_depth = depth.clone();
1323                if inlined {
1324                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1325                    inner_offset = next_offset;
1326                } else {
1327                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1328                    inner_depth.increment()?;
1329                }
1330                let val_ref =
1331                    self.strategy.get_or_insert_with(|| fidl::new_empty!(CallgraphStrategy, D));
1332                fidl::decode!(CallgraphStrategy, D, val_ref, decoder, inner_offset, inner_depth)?;
1333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1334                {
1335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1336                }
1337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1339                }
1340            }
1341
1342            next_offset += envelope_size;
1343
1344            // Decode the remaining unknown envelopes.
1345            while next_offset < end_offset {
1346                _next_ordinal_to_read += 1;
1347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1348                next_offset += envelope_size;
1349            }
1350
1351            Ok(())
1352        }
1353    }
1354
1355    impl LaunchComponent {
1356        #[inline(always)]
1357        fn max_ordinal_present(&self) -> u64 {
1358            if let Some(_) = self.moniker {
1359                return 2;
1360            }
1361            if let Some(_) = self.url {
1362                return 1;
1363            }
1364            0
1365        }
1366    }
1367
1368    impl fidl::encoding::ValueTypeMarker for LaunchComponent {
1369        type Borrowed<'a> = &'a Self;
1370        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1371            value
1372        }
1373    }
1374
1375    unsafe impl fidl::encoding::TypeMarker for LaunchComponent {
1376        type Owned = Self;
1377
1378        #[inline(always)]
1379        fn inline_align(_context: fidl::encoding::Context) -> usize {
1380            8
1381        }
1382
1383        #[inline(always)]
1384        fn inline_size(_context: fidl::encoding::Context) -> usize {
1385            16
1386        }
1387    }
1388
1389    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LaunchComponent, D>
1390        for &LaunchComponent
1391    {
1392        unsafe fn encode(
1393            self,
1394            encoder: &mut fidl::encoding::Encoder<'_, D>,
1395            offset: usize,
1396            mut depth: fidl::encoding::Depth,
1397        ) -> fidl::Result<()> {
1398            encoder.debug_check_bounds::<LaunchComponent>(offset);
1399            // Vector header
1400            let max_ordinal: u64 = self.max_ordinal_present();
1401            encoder.write_num(max_ordinal, offset);
1402            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1403            // Calling encoder.out_of_line_offset(0) is not allowed.
1404            if max_ordinal == 0 {
1405                return Ok(());
1406            }
1407            depth.increment()?;
1408            let envelope_size = 8;
1409            let bytes_len = max_ordinal as usize * envelope_size;
1410            #[allow(unused_variables)]
1411            let offset = encoder.out_of_line_offset(bytes_len);
1412            let mut _prev_end_offset: usize = 0;
1413            if 1 > max_ordinal {
1414                return Ok(());
1415            }
1416
1417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1418            // are envelope_size bytes.
1419            let cur_offset: usize = (1 - 1) * envelope_size;
1420
1421            // Zero reserved fields.
1422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1423
1424            // Safety:
1425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1427            //   envelope_size bytes, there is always sufficient room.
1428            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
1429            self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
1430            encoder, offset + cur_offset, depth
1431        )?;
1432
1433            _prev_end_offset = cur_offset + envelope_size;
1434            if 2 > max_ordinal {
1435                return Ok(());
1436            }
1437
1438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1439            // are envelope_size bytes.
1440            let cur_offset: usize = (2 - 1) * envelope_size;
1441
1442            // Zero reserved fields.
1443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1444
1445            // Safety:
1446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1448            //   envelope_size bytes, there is always sufficient room.
1449            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
1450            self.moniker.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
1451            encoder, offset + cur_offset, depth
1452        )?;
1453
1454            _prev_end_offset = cur_offset + envelope_size;
1455
1456            Ok(())
1457        }
1458    }
1459
1460    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LaunchComponent {
1461        #[inline(always)]
1462        fn new_empty() -> Self {
1463            Self::default()
1464        }
1465
1466        unsafe fn decode(
1467            &mut self,
1468            decoder: &mut fidl::encoding::Decoder<'_, D>,
1469            offset: usize,
1470            mut depth: fidl::encoding::Depth,
1471        ) -> fidl::Result<()> {
1472            decoder.debug_check_bounds::<Self>(offset);
1473            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1474                None => return Err(fidl::Error::NotNullable),
1475                Some(len) => len,
1476            };
1477            // Calling decoder.out_of_line_offset(0) is not allowed.
1478            if len == 0 {
1479                return Ok(());
1480            };
1481            depth.increment()?;
1482            let envelope_size = 8;
1483            let bytes_len = len * envelope_size;
1484            let offset = decoder.out_of_line_offset(bytes_len)?;
1485            // Decode the envelope for each type.
1486            let mut _next_ordinal_to_read = 0;
1487            let mut next_offset = offset;
1488            let end_offset = offset + bytes_len;
1489            _next_ordinal_to_read += 1;
1490            if next_offset >= end_offset {
1491                return Ok(());
1492            }
1493
1494            // Decode unknown envelopes for gaps in ordinals.
1495            while _next_ordinal_to_read < 1 {
1496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1497                _next_ordinal_to_read += 1;
1498                next_offset += envelope_size;
1499            }
1500
1501            let next_out_of_line = decoder.next_out_of_line();
1502            let handles_before = decoder.remaining_handles();
1503            if let Some((inlined, num_bytes, num_handles)) =
1504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1505            {
1506                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1507                if inlined != (member_inline_size <= 4) {
1508                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1509                }
1510                let inner_offset;
1511                let mut inner_depth = depth.clone();
1512                if inlined {
1513                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1514                    inner_offset = next_offset;
1515                } else {
1516                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1517                    inner_depth.increment()?;
1518                }
1519                let val_ref = self.url.get_or_insert_with(|| {
1520                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
1521                });
1522                fidl::decode!(
1523                    fidl::encoding::BoundedString<4096>,
1524                    D,
1525                    val_ref,
1526                    decoder,
1527                    inner_offset,
1528                    inner_depth
1529                )?;
1530                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1531                {
1532                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1533                }
1534                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1535                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1536                }
1537            }
1538
1539            next_offset += envelope_size;
1540            _next_ordinal_to_read += 1;
1541            if next_offset >= end_offset {
1542                return Ok(());
1543            }
1544
1545            // Decode unknown envelopes for gaps in ordinals.
1546            while _next_ordinal_to_read < 2 {
1547                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1548                _next_ordinal_to_read += 1;
1549                next_offset += envelope_size;
1550            }
1551
1552            let next_out_of_line = decoder.next_out_of_line();
1553            let handles_before = decoder.remaining_handles();
1554            if let Some((inlined, num_bytes, num_handles)) =
1555                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1556            {
1557                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1558                if inlined != (member_inline_size <= 4) {
1559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1560                }
1561                let inner_offset;
1562                let mut inner_depth = depth.clone();
1563                if inlined {
1564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1565                    inner_offset = next_offset;
1566                } else {
1567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1568                    inner_depth.increment()?;
1569                }
1570                let val_ref = self.moniker.get_or_insert_with(|| {
1571                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
1572                });
1573                fidl::decode!(
1574                    fidl::encoding::BoundedString<4096>,
1575                    D,
1576                    val_ref,
1577                    decoder,
1578                    inner_offset,
1579                    inner_depth
1580                )?;
1581                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1582                {
1583                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1584                }
1585                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1586                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1587                }
1588            }
1589
1590            next_offset += envelope_size;
1591
1592            // Decode the remaining unknown envelopes.
1593            while next_offset < end_offset {
1594                _next_ordinal_to_read += 1;
1595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1596                next_offset += envelope_size;
1597            }
1598
1599            Ok(())
1600        }
1601    }
1602
1603    impl OnBootConfig {
1604        #[inline(always)]
1605        fn max_ordinal_present(&self) -> u64 {
1606            if let Some(_) = self.target {
1607                return 2;
1608            }
1609            if let Some(_) = self.configs {
1610                return 1;
1611            }
1612            0
1613        }
1614    }
1615
1616    impl fidl::encoding::ValueTypeMarker for OnBootConfig {
1617        type Borrowed<'a> = &'a Self;
1618        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1619            value
1620        }
1621    }
1622
1623    unsafe impl fidl::encoding::TypeMarker for OnBootConfig {
1624        type Owned = Self;
1625
1626        #[inline(always)]
1627        fn inline_align(_context: fidl::encoding::Context) -> usize {
1628            8
1629        }
1630
1631        #[inline(always)]
1632        fn inline_size(_context: fidl::encoding::Context) -> usize {
1633            16
1634        }
1635    }
1636
1637    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnBootConfig, D>
1638        for &OnBootConfig
1639    {
1640        unsafe fn encode(
1641            self,
1642            encoder: &mut fidl::encoding::Encoder<'_, D>,
1643            offset: usize,
1644            mut depth: fidl::encoding::Depth,
1645        ) -> fidl::Result<()> {
1646            encoder.debug_check_bounds::<OnBootConfig>(offset);
1647            // Vector header
1648            let max_ordinal: u64 = self.max_ordinal_present();
1649            encoder.write_num(max_ordinal, offset);
1650            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1651            // Calling encoder.out_of_line_offset(0) is not allowed.
1652            if max_ordinal == 0 {
1653                return Ok(());
1654            }
1655            depth.increment()?;
1656            let envelope_size = 8;
1657            let bytes_len = max_ordinal as usize * envelope_size;
1658            #[allow(unused_variables)]
1659            let offset = encoder.out_of_line_offset(bytes_len);
1660            let mut _prev_end_offset: usize = 0;
1661            if 1 > max_ordinal {
1662                return Ok(());
1663            }
1664
1665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1666            // are envelope_size bytes.
1667            let cur_offset: usize = (1 - 1) * envelope_size;
1668
1669            // Zero reserved fields.
1670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1671
1672            // Safety:
1673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1675            //   envelope_size bytes, there is always sufficient room.
1676            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SamplingConfig, 64>, D>(
1677            self.configs.as_ref().map(<fidl::encoding::Vector<SamplingConfig, 64> as fidl::encoding::ValueTypeMarker>::borrow),
1678            encoder, offset + cur_offset, depth
1679        )?;
1680
1681            _prev_end_offset = cur_offset + envelope_size;
1682            if 2 > max_ordinal {
1683                return Ok(());
1684            }
1685
1686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1687            // are envelope_size bytes.
1688            let cur_offset: usize = (2 - 1) * envelope_size;
1689
1690            // Zero reserved fields.
1691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1692
1693            // Safety:
1694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1696            //   envelope_size bytes, there is always sufficient room.
1697            fidl::encoding::encode_in_envelope_optional::<OnBootTargetConfig, D>(
1698                self.target
1699                    .as_ref()
1700                    .map(<OnBootTargetConfig as fidl::encoding::ValueTypeMarker>::borrow),
1701                encoder,
1702                offset + cur_offset,
1703                depth,
1704            )?;
1705
1706            _prev_end_offset = cur_offset + envelope_size;
1707
1708            Ok(())
1709        }
1710    }
1711
1712    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnBootConfig {
1713        #[inline(always)]
1714        fn new_empty() -> Self {
1715            Self::default()
1716        }
1717
1718        unsafe fn decode(
1719            &mut self,
1720            decoder: &mut fidl::encoding::Decoder<'_, D>,
1721            offset: usize,
1722            mut depth: fidl::encoding::Depth,
1723        ) -> fidl::Result<()> {
1724            decoder.debug_check_bounds::<Self>(offset);
1725            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1726                None => return Err(fidl::Error::NotNullable),
1727                Some(len) => len,
1728            };
1729            // Calling decoder.out_of_line_offset(0) is not allowed.
1730            if len == 0 {
1731                return Ok(());
1732            };
1733            depth.increment()?;
1734            let envelope_size = 8;
1735            let bytes_len = len * envelope_size;
1736            let offset = decoder.out_of_line_offset(bytes_len)?;
1737            // Decode the envelope for each type.
1738            let mut _next_ordinal_to_read = 0;
1739            let mut next_offset = offset;
1740            let end_offset = offset + bytes_len;
1741            _next_ordinal_to_read += 1;
1742            if next_offset >= end_offset {
1743                return Ok(());
1744            }
1745
1746            // Decode unknown envelopes for gaps in ordinals.
1747            while _next_ordinal_to_read < 1 {
1748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1749                _next_ordinal_to_read += 1;
1750                next_offset += envelope_size;
1751            }
1752
1753            let next_out_of_line = decoder.next_out_of_line();
1754            let handles_before = decoder.remaining_handles();
1755            if let Some((inlined, num_bytes, num_handles)) =
1756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1757            {
1758                let member_inline_size = <fidl::encoding::Vector<SamplingConfig, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1759                if inlined != (member_inline_size <= 4) {
1760                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1761                }
1762                let inner_offset;
1763                let mut inner_depth = depth.clone();
1764                if inlined {
1765                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1766                    inner_offset = next_offset;
1767                } else {
1768                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1769                    inner_depth.increment()?;
1770                }
1771                let val_ref = self.configs.get_or_insert_with(
1772                    || fidl::new_empty!(fidl::encoding::Vector<SamplingConfig, 64>, D),
1773                );
1774                fidl::decode!(fidl::encoding::Vector<SamplingConfig, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
1775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1776                {
1777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1778                }
1779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1781                }
1782            }
1783
1784            next_offset += envelope_size;
1785            _next_ordinal_to_read += 1;
1786            if next_offset >= end_offset {
1787                return Ok(());
1788            }
1789
1790            // Decode unknown envelopes for gaps in ordinals.
1791            while _next_ordinal_to_read < 2 {
1792                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1793                _next_ordinal_to_read += 1;
1794                next_offset += envelope_size;
1795            }
1796
1797            let next_out_of_line = decoder.next_out_of_line();
1798            let handles_before = decoder.remaining_handles();
1799            if let Some((inlined, num_bytes, num_handles)) =
1800                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1801            {
1802                let member_inline_size =
1803                    <OnBootTargetConfig as fidl::encoding::TypeMarker>::inline_size(
1804                        decoder.context,
1805                    );
1806                if inlined != (member_inline_size <= 4) {
1807                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1808                }
1809                let inner_offset;
1810                let mut inner_depth = depth.clone();
1811                if inlined {
1812                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1813                    inner_offset = next_offset;
1814                } else {
1815                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1816                    inner_depth.increment()?;
1817                }
1818                let val_ref =
1819                    self.target.get_or_insert_with(|| fidl::new_empty!(OnBootTargetConfig, D));
1820                fidl::decode!(OnBootTargetConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
1821                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1822                {
1823                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1824                }
1825                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1826                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1827                }
1828            }
1829
1830            next_offset += envelope_size;
1831
1832            // Decode the remaining unknown envelopes.
1833            while next_offset < end_offset {
1834                _next_ordinal_to_read += 1;
1835                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1836                next_offset += envelope_size;
1837            }
1838
1839            Ok(())
1840        }
1841    }
1842
1843    impl ProfilerStatus {
1844        #[inline(always)]
1845        fn max_ordinal_present(&self) -> u64 {
1846            if let Some(_) = self.task_id {
1847                return 1;
1848            }
1849            0
1850        }
1851    }
1852
1853    impl fidl::encoding::ValueTypeMarker for ProfilerStatus {
1854        type Borrowed<'a> = &'a Self;
1855        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1856            value
1857        }
1858    }
1859
1860    unsafe impl fidl::encoding::TypeMarker for ProfilerStatus {
1861        type Owned = Self;
1862
1863        #[inline(always)]
1864        fn inline_align(_context: fidl::encoding::Context) -> usize {
1865            8
1866        }
1867
1868        #[inline(always)]
1869        fn inline_size(_context: fidl::encoding::Context) -> usize {
1870            16
1871        }
1872    }
1873
1874    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProfilerStatus, D>
1875        for &ProfilerStatus
1876    {
1877        unsafe fn encode(
1878            self,
1879            encoder: &mut fidl::encoding::Encoder<'_, D>,
1880            offset: usize,
1881            mut depth: fidl::encoding::Depth,
1882        ) -> fidl::Result<()> {
1883            encoder.debug_check_bounds::<ProfilerStatus>(offset);
1884            // Vector header
1885            let max_ordinal: u64 = self.max_ordinal_present();
1886            encoder.write_num(max_ordinal, offset);
1887            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1888            // Calling encoder.out_of_line_offset(0) is not allowed.
1889            if max_ordinal == 0 {
1890                return Ok(());
1891            }
1892            depth.increment()?;
1893            let envelope_size = 8;
1894            let bytes_len = max_ordinal as usize * envelope_size;
1895            #[allow(unused_variables)]
1896            let offset = encoder.out_of_line_offset(bytes_len);
1897            let mut _prev_end_offset: usize = 0;
1898            if 1 > max_ordinal {
1899                return Ok(());
1900            }
1901
1902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1903            // are envelope_size bytes.
1904            let cur_offset: usize = (1 - 1) * envelope_size;
1905
1906            // Zero reserved fields.
1907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1908
1909            // Safety:
1910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1912            //   envelope_size bytes, there is always sufficient room.
1913            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1914                self.task_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1915                encoder,
1916                offset + cur_offset,
1917                depth,
1918            )?;
1919
1920            _prev_end_offset = cur_offset + envelope_size;
1921
1922            Ok(())
1923        }
1924    }
1925
1926    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProfilerStatus {
1927        #[inline(always)]
1928        fn new_empty() -> Self {
1929            Self::default()
1930        }
1931
1932        unsafe fn decode(
1933            &mut self,
1934            decoder: &mut fidl::encoding::Decoder<'_, D>,
1935            offset: usize,
1936            mut depth: fidl::encoding::Depth,
1937        ) -> fidl::Result<()> {
1938            decoder.debug_check_bounds::<Self>(offset);
1939            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1940                None => return Err(fidl::Error::NotNullable),
1941                Some(len) => len,
1942            };
1943            // Calling decoder.out_of_line_offset(0) is not allowed.
1944            if len == 0 {
1945                return Ok(());
1946            };
1947            depth.increment()?;
1948            let envelope_size = 8;
1949            let bytes_len = len * envelope_size;
1950            let offset = decoder.out_of_line_offset(bytes_len)?;
1951            // Decode the envelope for each type.
1952            let mut _next_ordinal_to_read = 0;
1953            let mut next_offset = offset;
1954            let end_offset = offset + bytes_len;
1955            _next_ordinal_to_read += 1;
1956            if next_offset >= end_offset {
1957                return Ok(());
1958            }
1959
1960            // Decode unknown envelopes for gaps in ordinals.
1961            while _next_ordinal_to_read < 1 {
1962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1963                _next_ordinal_to_read += 1;
1964                next_offset += envelope_size;
1965            }
1966
1967            let next_out_of_line = decoder.next_out_of_line();
1968            let handles_before = decoder.remaining_handles();
1969            if let Some((inlined, num_bytes, num_handles)) =
1970                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1971            {
1972                let member_inline_size =
1973                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1974                if inlined != (member_inline_size <= 4) {
1975                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1976                }
1977                let inner_offset;
1978                let mut inner_depth = depth.clone();
1979                if inlined {
1980                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1981                    inner_offset = next_offset;
1982                } else {
1983                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1984                    inner_depth.increment()?;
1985                }
1986                let val_ref = self.task_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
1987                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1988                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1989                {
1990                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1991                }
1992                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1993                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1994                }
1995            }
1996
1997            next_offset += envelope_size;
1998
1999            // Decode the remaining unknown envelopes.
2000            while next_offset < end_offset {
2001                _next_ordinal_to_read += 1;
2002                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2003                next_offset += envelope_size;
2004            }
2005
2006            Ok(())
2007        }
2008    }
2009
2010    impl Sample {
2011        #[inline(always)]
2012        fn max_ordinal_present(&self) -> u64 {
2013            if let Some(_) = self.counters {
2014                return 2;
2015            }
2016            if let Some(_) = self.callgraph {
2017                return 1;
2018            }
2019            0
2020        }
2021    }
2022
2023    impl fidl::encoding::ValueTypeMarker for Sample {
2024        type Borrowed<'a> = &'a Self;
2025        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2026            value
2027        }
2028    }
2029
2030    unsafe impl fidl::encoding::TypeMarker for Sample {
2031        type Owned = Self;
2032
2033        #[inline(always)]
2034        fn inline_align(_context: fidl::encoding::Context) -> usize {
2035            8
2036        }
2037
2038        #[inline(always)]
2039        fn inline_size(_context: fidl::encoding::Context) -> usize {
2040            16
2041        }
2042    }
2043
2044    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Sample, D> for &Sample {
2045        unsafe fn encode(
2046            self,
2047            encoder: &mut fidl::encoding::Encoder<'_, D>,
2048            offset: usize,
2049            mut depth: fidl::encoding::Depth,
2050        ) -> fidl::Result<()> {
2051            encoder.debug_check_bounds::<Sample>(offset);
2052            // Vector header
2053            let max_ordinal: u64 = self.max_ordinal_present();
2054            encoder.write_num(max_ordinal, offset);
2055            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2056            // Calling encoder.out_of_line_offset(0) is not allowed.
2057            if max_ordinal == 0 {
2058                return Ok(());
2059            }
2060            depth.increment()?;
2061            let envelope_size = 8;
2062            let bytes_len = max_ordinal as usize * envelope_size;
2063            #[allow(unused_variables)]
2064            let offset = encoder.out_of_line_offset(bytes_len);
2065            let mut _prev_end_offset: usize = 0;
2066            if 1 > max_ordinal {
2067                return Ok(());
2068            }
2069
2070            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2071            // are envelope_size bytes.
2072            let cur_offset: usize = (1 - 1) * envelope_size;
2073
2074            // Zero reserved fields.
2075            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2076
2077            // Safety:
2078            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2079            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2080            //   envelope_size bytes, there is always sufficient room.
2081            fidl::encoding::encode_in_envelope_optional::<CallgraphConfig, D>(
2082                self.callgraph
2083                    .as_ref()
2084                    .map(<CallgraphConfig as fidl::encoding::ValueTypeMarker>::borrow),
2085                encoder,
2086                offset + cur_offset,
2087                depth,
2088            )?;
2089
2090            _prev_end_offset = cur_offset + envelope_size;
2091            if 2 > max_ordinal {
2092                return Ok(());
2093            }
2094
2095            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2096            // are envelope_size bytes.
2097            let cur_offset: usize = (2 - 1) * envelope_size;
2098
2099            // Zero reserved fields.
2100            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2101
2102            // Safety:
2103            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2104            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2105            //   envelope_size bytes, there is always sufficient room.
2106            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Counter, 64>, D>(
2107            self.counters.as_ref().map(<fidl::encoding::Vector<Counter, 64> as fidl::encoding::ValueTypeMarker>::borrow),
2108            encoder, offset + cur_offset, depth
2109        )?;
2110
2111            _prev_end_offset = cur_offset + envelope_size;
2112
2113            Ok(())
2114        }
2115    }
2116
2117    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Sample {
2118        #[inline(always)]
2119        fn new_empty() -> Self {
2120            Self::default()
2121        }
2122
2123        unsafe fn decode(
2124            &mut self,
2125            decoder: &mut fidl::encoding::Decoder<'_, D>,
2126            offset: usize,
2127            mut depth: fidl::encoding::Depth,
2128        ) -> fidl::Result<()> {
2129            decoder.debug_check_bounds::<Self>(offset);
2130            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2131                None => return Err(fidl::Error::NotNullable),
2132                Some(len) => len,
2133            };
2134            // Calling decoder.out_of_line_offset(0) is not allowed.
2135            if len == 0 {
2136                return Ok(());
2137            };
2138            depth.increment()?;
2139            let envelope_size = 8;
2140            let bytes_len = len * envelope_size;
2141            let offset = decoder.out_of_line_offset(bytes_len)?;
2142            // Decode the envelope for each type.
2143            let mut _next_ordinal_to_read = 0;
2144            let mut next_offset = offset;
2145            let end_offset = offset + bytes_len;
2146            _next_ordinal_to_read += 1;
2147            if next_offset >= end_offset {
2148                return Ok(());
2149            }
2150
2151            // Decode unknown envelopes for gaps in ordinals.
2152            while _next_ordinal_to_read < 1 {
2153                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2154                _next_ordinal_to_read += 1;
2155                next_offset += envelope_size;
2156            }
2157
2158            let next_out_of_line = decoder.next_out_of_line();
2159            let handles_before = decoder.remaining_handles();
2160            if let Some((inlined, num_bytes, num_handles)) =
2161                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2162            {
2163                let member_inline_size =
2164                    <CallgraphConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2165                if inlined != (member_inline_size <= 4) {
2166                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2167                }
2168                let inner_offset;
2169                let mut inner_depth = depth.clone();
2170                if inlined {
2171                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2172                    inner_offset = next_offset;
2173                } else {
2174                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2175                    inner_depth.increment()?;
2176                }
2177                let val_ref =
2178                    self.callgraph.get_or_insert_with(|| fidl::new_empty!(CallgraphConfig, D));
2179                fidl::decode!(CallgraphConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
2180                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2181                {
2182                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2183                }
2184                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2185                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2186                }
2187            }
2188
2189            next_offset += envelope_size;
2190            _next_ordinal_to_read += 1;
2191            if next_offset >= end_offset {
2192                return Ok(());
2193            }
2194
2195            // Decode unknown envelopes for gaps in ordinals.
2196            while _next_ordinal_to_read < 2 {
2197                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2198                _next_ordinal_to_read += 1;
2199                next_offset += envelope_size;
2200            }
2201
2202            let next_out_of_line = decoder.next_out_of_line();
2203            let handles_before = decoder.remaining_handles();
2204            if let Some((inlined, num_bytes, num_handles)) =
2205                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2206            {
2207                let member_inline_size = <fidl::encoding::Vector<Counter, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2208                if inlined != (member_inline_size <= 4) {
2209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2210                }
2211                let inner_offset;
2212                let mut inner_depth = depth.clone();
2213                if inlined {
2214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2215                    inner_offset = next_offset;
2216                } else {
2217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2218                    inner_depth.increment()?;
2219                }
2220                let val_ref = self.counters.get_or_insert_with(
2221                    || fidl::new_empty!(fidl::encoding::Vector<Counter, 64>, D),
2222                );
2223                fidl::decode!(fidl::encoding::Vector<Counter, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
2224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2225                {
2226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2227                }
2228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2230                }
2231            }
2232
2233            next_offset += envelope_size;
2234
2235            // Decode the remaining unknown envelopes.
2236            while next_offset < end_offset {
2237                _next_ordinal_to_read += 1;
2238                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2239                next_offset += envelope_size;
2240            }
2241
2242            Ok(())
2243        }
2244    }
2245
2246    impl SamplingConfig {
2247        #[inline(always)]
2248        fn max_ordinal_present(&self) -> u64 {
2249            if let Some(_) = self.sample {
2250                return 3;
2251            }
2252            if let Some(_) = self.timebase {
2253                return 2;
2254            }
2255            if let Some(_) = self.period {
2256                return 1;
2257            }
2258            0
2259        }
2260    }
2261
2262    impl fidl::encoding::ValueTypeMarker for SamplingConfig {
2263        type Borrowed<'a> = &'a Self;
2264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2265            value
2266        }
2267    }
2268
2269    unsafe impl fidl::encoding::TypeMarker for SamplingConfig {
2270        type Owned = Self;
2271
2272        #[inline(always)]
2273        fn inline_align(_context: fidl::encoding::Context) -> usize {
2274            8
2275        }
2276
2277        #[inline(always)]
2278        fn inline_size(_context: fidl::encoding::Context) -> usize {
2279            16
2280        }
2281    }
2282
2283    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SamplingConfig, D>
2284        for &SamplingConfig
2285    {
2286        unsafe fn encode(
2287            self,
2288            encoder: &mut fidl::encoding::Encoder<'_, D>,
2289            offset: usize,
2290            mut depth: fidl::encoding::Depth,
2291        ) -> fidl::Result<()> {
2292            encoder.debug_check_bounds::<SamplingConfig>(offset);
2293            // Vector header
2294            let max_ordinal: u64 = self.max_ordinal_present();
2295            encoder.write_num(max_ordinal, offset);
2296            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2297            // Calling encoder.out_of_line_offset(0) is not allowed.
2298            if max_ordinal == 0 {
2299                return Ok(());
2300            }
2301            depth.increment()?;
2302            let envelope_size = 8;
2303            let bytes_len = max_ordinal as usize * envelope_size;
2304            #[allow(unused_variables)]
2305            let offset = encoder.out_of_line_offset(bytes_len);
2306            let mut _prev_end_offset: usize = 0;
2307            if 1 > max_ordinal {
2308                return Ok(());
2309            }
2310
2311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2312            // are envelope_size bytes.
2313            let cur_offset: usize = (1 - 1) * envelope_size;
2314
2315            // Zero reserved fields.
2316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2317
2318            // Safety:
2319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2321            //   envelope_size bytes, there is always sufficient room.
2322            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2323                self.period.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2324                encoder,
2325                offset + cur_offset,
2326                depth,
2327            )?;
2328
2329            _prev_end_offset = cur_offset + envelope_size;
2330            if 2 > max_ordinal {
2331                return Ok(());
2332            }
2333
2334            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2335            // are envelope_size bytes.
2336            let cur_offset: usize = (2 - 1) * envelope_size;
2337
2338            // Zero reserved fields.
2339            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2340
2341            // Safety:
2342            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2343            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2344            //   envelope_size bytes, there is always sufficient room.
2345            fidl::encoding::encode_in_envelope_optional::<Counter, D>(
2346                self.timebase.as_ref().map(<Counter as fidl::encoding::ValueTypeMarker>::borrow),
2347                encoder,
2348                offset + cur_offset,
2349                depth,
2350            )?;
2351
2352            _prev_end_offset = cur_offset + envelope_size;
2353            if 3 > max_ordinal {
2354                return Ok(());
2355            }
2356
2357            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2358            // are envelope_size bytes.
2359            let cur_offset: usize = (3 - 1) * envelope_size;
2360
2361            // Zero reserved fields.
2362            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2363
2364            // Safety:
2365            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2366            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2367            //   envelope_size bytes, there is always sufficient room.
2368            fidl::encoding::encode_in_envelope_optional::<Sample, D>(
2369                self.sample.as_ref().map(<Sample as fidl::encoding::ValueTypeMarker>::borrow),
2370                encoder,
2371                offset + cur_offset,
2372                depth,
2373            )?;
2374
2375            _prev_end_offset = cur_offset + envelope_size;
2376
2377            Ok(())
2378        }
2379    }
2380
2381    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SamplingConfig {
2382        #[inline(always)]
2383        fn new_empty() -> Self {
2384            Self::default()
2385        }
2386
2387        unsafe fn decode(
2388            &mut self,
2389            decoder: &mut fidl::encoding::Decoder<'_, D>,
2390            offset: usize,
2391            mut depth: fidl::encoding::Depth,
2392        ) -> fidl::Result<()> {
2393            decoder.debug_check_bounds::<Self>(offset);
2394            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2395                None => return Err(fidl::Error::NotNullable),
2396                Some(len) => len,
2397            };
2398            // Calling decoder.out_of_line_offset(0) is not allowed.
2399            if len == 0 {
2400                return Ok(());
2401            };
2402            depth.increment()?;
2403            let envelope_size = 8;
2404            let bytes_len = len * envelope_size;
2405            let offset = decoder.out_of_line_offset(bytes_len)?;
2406            // Decode the envelope for each type.
2407            let mut _next_ordinal_to_read = 0;
2408            let mut next_offset = offset;
2409            let end_offset = offset + bytes_len;
2410            _next_ordinal_to_read += 1;
2411            if next_offset >= end_offset {
2412                return Ok(());
2413            }
2414
2415            // Decode unknown envelopes for gaps in ordinals.
2416            while _next_ordinal_to_read < 1 {
2417                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2418                _next_ordinal_to_read += 1;
2419                next_offset += envelope_size;
2420            }
2421
2422            let next_out_of_line = decoder.next_out_of_line();
2423            let handles_before = decoder.remaining_handles();
2424            if let Some((inlined, num_bytes, num_handles)) =
2425                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2426            {
2427                let member_inline_size =
2428                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2429                if inlined != (member_inline_size <= 4) {
2430                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2431                }
2432                let inner_offset;
2433                let mut inner_depth = depth.clone();
2434                if inlined {
2435                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2436                    inner_offset = next_offset;
2437                } else {
2438                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2439                    inner_depth.increment()?;
2440                }
2441                let val_ref = self.period.get_or_insert_with(|| fidl::new_empty!(u64, D));
2442                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2444                {
2445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2446                }
2447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2449                }
2450            }
2451
2452            next_offset += envelope_size;
2453            _next_ordinal_to_read += 1;
2454            if next_offset >= end_offset {
2455                return Ok(());
2456            }
2457
2458            // Decode unknown envelopes for gaps in ordinals.
2459            while _next_ordinal_to_read < 2 {
2460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2461                _next_ordinal_to_read += 1;
2462                next_offset += envelope_size;
2463            }
2464
2465            let next_out_of_line = decoder.next_out_of_line();
2466            let handles_before = decoder.remaining_handles();
2467            if let Some((inlined, num_bytes, num_handles)) =
2468                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2469            {
2470                let member_inline_size =
2471                    <Counter as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2472                if inlined != (member_inline_size <= 4) {
2473                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2474                }
2475                let inner_offset;
2476                let mut inner_depth = depth.clone();
2477                if inlined {
2478                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2479                    inner_offset = next_offset;
2480                } else {
2481                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2482                    inner_depth.increment()?;
2483                }
2484                let val_ref = self.timebase.get_or_insert_with(|| fidl::new_empty!(Counter, D));
2485                fidl::decode!(Counter, D, val_ref, decoder, inner_offset, inner_depth)?;
2486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2487                {
2488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2489                }
2490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2492                }
2493            }
2494
2495            next_offset += envelope_size;
2496            _next_ordinal_to_read += 1;
2497            if next_offset >= end_offset {
2498                return Ok(());
2499            }
2500
2501            // Decode unknown envelopes for gaps in ordinals.
2502            while _next_ordinal_to_read < 3 {
2503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2504                _next_ordinal_to_read += 1;
2505                next_offset += envelope_size;
2506            }
2507
2508            let next_out_of_line = decoder.next_out_of_line();
2509            let handles_before = decoder.remaining_handles();
2510            if let Some((inlined, num_bytes, num_handles)) =
2511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2512            {
2513                let member_inline_size =
2514                    <Sample as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2515                if inlined != (member_inline_size <= 4) {
2516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2517                }
2518                let inner_offset;
2519                let mut inner_depth = depth.clone();
2520                if inlined {
2521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2522                    inner_offset = next_offset;
2523                } else {
2524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2525                    inner_depth.increment()?;
2526                }
2527                let val_ref = self.sample.get_or_insert_with(|| fidl::new_empty!(Sample, D));
2528                fidl::decode!(Sample, D, val_ref, decoder, inner_offset, inner_depth)?;
2529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2530                {
2531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2532                }
2533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2535                }
2536            }
2537
2538            next_offset += envelope_size;
2539
2540            // Decode the remaining unknown envelopes.
2541            while next_offset < end_offset {
2542                _next_ordinal_to_read += 1;
2543                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2544                next_offset += envelope_size;
2545            }
2546
2547            Ok(())
2548        }
2549    }
2550
2551    impl SessionManagerAbortSessionRequest {
2552        #[inline(always)]
2553        fn max_ordinal_present(&self) -> u64 {
2554            if let Some(_) = self.task_id {
2555                return 1;
2556            }
2557            0
2558        }
2559    }
2560
2561    impl fidl::encoding::ValueTypeMarker for SessionManagerAbortSessionRequest {
2562        type Borrowed<'a> = &'a Self;
2563        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2564            value
2565        }
2566    }
2567
2568    unsafe impl fidl::encoding::TypeMarker for SessionManagerAbortSessionRequest {
2569        type Owned = Self;
2570
2571        #[inline(always)]
2572        fn inline_align(_context: fidl::encoding::Context) -> usize {
2573            8
2574        }
2575
2576        #[inline(always)]
2577        fn inline_size(_context: fidl::encoding::Context) -> usize {
2578            16
2579        }
2580    }
2581
2582    unsafe impl<D: fidl::encoding::ResourceDialect>
2583        fidl::encoding::Encode<SessionManagerAbortSessionRequest, D>
2584        for &SessionManagerAbortSessionRequest
2585    {
2586        unsafe fn encode(
2587            self,
2588            encoder: &mut fidl::encoding::Encoder<'_, D>,
2589            offset: usize,
2590            mut depth: fidl::encoding::Depth,
2591        ) -> fidl::Result<()> {
2592            encoder.debug_check_bounds::<SessionManagerAbortSessionRequest>(offset);
2593            // Vector header
2594            let max_ordinal: u64 = self.max_ordinal_present();
2595            encoder.write_num(max_ordinal, offset);
2596            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2597            // Calling encoder.out_of_line_offset(0) is not allowed.
2598            if max_ordinal == 0 {
2599                return Ok(());
2600            }
2601            depth.increment()?;
2602            let envelope_size = 8;
2603            let bytes_len = max_ordinal as usize * envelope_size;
2604            #[allow(unused_variables)]
2605            let offset = encoder.out_of_line_offset(bytes_len);
2606            let mut _prev_end_offset: usize = 0;
2607            if 1 > max_ordinal {
2608                return Ok(());
2609            }
2610
2611            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2612            // are envelope_size bytes.
2613            let cur_offset: usize = (1 - 1) * envelope_size;
2614
2615            // Zero reserved fields.
2616            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2617
2618            // Safety:
2619            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2620            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2621            //   envelope_size bytes, there is always sufficient room.
2622            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2623                self.task_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2624                encoder,
2625                offset + cur_offset,
2626                depth,
2627            )?;
2628
2629            _prev_end_offset = cur_offset + envelope_size;
2630
2631            Ok(())
2632        }
2633    }
2634
2635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2636        for SessionManagerAbortSessionRequest
2637    {
2638        #[inline(always)]
2639        fn new_empty() -> Self {
2640            Self::default()
2641        }
2642
2643        unsafe fn decode(
2644            &mut self,
2645            decoder: &mut fidl::encoding::Decoder<'_, D>,
2646            offset: usize,
2647            mut depth: fidl::encoding::Depth,
2648        ) -> fidl::Result<()> {
2649            decoder.debug_check_bounds::<Self>(offset);
2650            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2651                None => return Err(fidl::Error::NotNullable),
2652                Some(len) => len,
2653            };
2654            // Calling decoder.out_of_line_offset(0) is not allowed.
2655            if len == 0 {
2656                return Ok(());
2657            };
2658            depth.increment()?;
2659            let envelope_size = 8;
2660            let bytes_len = len * envelope_size;
2661            let offset = decoder.out_of_line_offset(bytes_len)?;
2662            // Decode the envelope for each type.
2663            let mut _next_ordinal_to_read = 0;
2664            let mut next_offset = offset;
2665            let end_offset = offset + bytes_len;
2666            _next_ordinal_to_read += 1;
2667            if next_offset >= end_offset {
2668                return Ok(());
2669            }
2670
2671            // Decode unknown envelopes for gaps in ordinals.
2672            while _next_ordinal_to_read < 1 {
2673                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2674                _next_ordinal_to_read += 1;
2675                next_offset += envelope_size;
2676            }
2677
2678            let next_out_of_line = decoder.next_out_of_line();
2679            let handles_before = decoder.remaining_handles();
2680            if let Some((inlined, num_bytes, num_handles)) =
2681                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2682            {
2683                let member_inline_size =
2684                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2685                if inlined != (member_inline_size <= 4) {
2686                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2687                }
2688                let inner_offset;
2689                let mut inner_depth = depth.clone();
2690                if inlined {
2691                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2692                    inner_offset = next_offset;
2693                } else {
2694                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2695                    inner_depth.increment()?;
2696                }
2697                let val_ref = self.task_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
2698                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2699                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2700                {
2701                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2702                }
2703                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2704                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2705                }
2706            }
2707
2708            next_offset += envelope_size;
2709
2710            // Decode the remaining unknown envelopes.
2711            while next_offset < end_offset {
2712                _next_ordinal_to_read += 1;
2713                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2714                next_offset += envelope_size;
2715            }
2716
2717            Ok(())
2718        }
2719    }
2720
2721    impl SessionManagerStartSessionOnBootRequest {
2722        #[inline(always)]
2723        fn max_ordinal_present(&self) -> u64 {
2724            if let Some(_) = self.config {
2725                return 1;
2726            }
2727            0
2728        }
2729    }
2730
2731    impl fidl::encoding::ValueTypeMarker for SessionManagerStartSessionOnBootRequest {
2732        type Borrowed<'a> = &'a Self;
2733        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2734            value
2735        }
2736    }
2737
2738    unsafe impl fidl::encoding::TypeMarker for SessionManagerStartSessionOnBootRequest {
2739        type Owned = Self;
2740
2741        #[inline(always)]
2742        fn inline_align(_context: fidl::encoding::Context) -> usize {
2743            8
2744        }
2745
2746        #[inline(always)]
2747        fn inline_size(_context: fidl::encoding::Context) -> usize {
2748            16
2749        }
2750    }
2751
2752    unsafe impl<D: fidl::encoding::ResourceDialect>
2753        fidl::encoding::Encode<SessionManagerStartSessionOnBootRequest, D>
2754        for &SessionManagerStartSessionOnBootRequest
2755    {
2756        unsafe fn encode(
2757            self,
2758            encoder: &mut fidl::encoding::Encoder<'_, D>,
2759            offset: usize,
2760            mut depth: fidl::encoding::Depth,
2761        ) -> fidl::Result<()> {
2762            encoder.debug_check_bounds::<SessionManagerStartSessionOnBootRequest>(offset);
2763            // Vector header
2764            let max_ordinal: u64 = self.max_ordinal_present();
2765            encoder.write_num(max_ordinal, offset);
2766            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2767            // Calling encoder.out_of_line_offset(0) is not allowed.
2768            if max_ordinal == 0 {
2769                return Ok(());
2770            }
2771            depth.increment()?;
2772            let envelope_size = 8;
2773            let bytes_len = max_ordinal as usize * envelope_size;
2774            #[allow(unused_variables)]
2775            let offset = encoder.out_of_line_offset(bytes_len);
2776            let mut _prev_end_offset: usize = 0;
2777            if 1 > max_ordinal {
2778                return Ok(());
2779            }
2780
2781            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2782            // are envelope_size bytes.
2783            let cur_offset: usize = (1 - 1) * envelope_size;
2784
2785            // Zero reserved fields.
2786            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2787
2788            // Safety:
2789            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2790            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2791            //   envelope_size bytes, there is always sufficient room.
2792            fidl::encoding::encode_in_envelope_optional::<OnBootConfig, D>(
2793                self.config.as_ref().map(<OnBootConfig as fidl::encoding::ValueTypeMarker>::borrow),
2794                encoder,
2795                offset + cur_offset,
2796                depth,
2797            )?;
2798
2799            _prev_end_offset = cur_offset + envelope_size;
2800
2801            Ok(())
2802        }
2803    }
2804
2805    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2806        for SessionManagerStartSessionOnBootRequest
2807    {
2808        #[inline(always)]
2809        fn new_empty() -> Self {
2810            Self::default()
2811        }
2812
2813        unsafe fn decode(
2814            &mut self,
2815            decoder: &mut fidl::encoding::Decoder<'_, D>,
2816            offset: usize,
2817            mut depth: fidl::encoding::Depth,
2818        ) -> fidl::Result<()> {
2819            decoder.debug_check_bounds::<Self>(offset);
2820            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2821                None => return Err(fidl::Error::NotNullable),
2822                Some(len) => len,
2823            };
2824            // Calling decoder.out_of_line_offset(0) is not allowed.
2825            if len == 0 {
2826                return Ok(());
2827            };
2828            depth.increment()?;
2829            let envelope_size = 8;
2830            let bytes_len = len * envelope_size;
2831            let offset = decoder.out_of_line_offset(bytes_len)?;
2832            // Decode the envelope for each type.
2833            let mut _next_ordinal_to_read = 0;
2834            let mut next_offset = offset;
2835            let end_offset = offset + bytes_len;
2836            _next_ordinal_to_read += 1;
2837            if next_offset >= end_offset {
2838                return Ok(());
2839            }
2840
2841            // Decode unknown envelopes for gaps in ordinals.
2842            while _next_ordinal_to_read < 1 {
2843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2844                _next_ordinal_to_read += 1;
2845                next_offset += envelope_size;
2846            }
2847
2848            let next_out_of_line = decoder.next_out_of_line();
2849            let handles_before = decoder.remaining_handles();
2850            if let Some((inlined, num_bytes, num_handles)) =
2851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2852            {
2853                let member_inline_size =
2854                    <OnBootConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2855                if inlined != (member_inline_size <= 4) {
2856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2857                }
2858                let inner_offset;
2859                let mut inner_depth = depth.clone();
2860                if inlined {
2861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2862                    inner_offset = next_offset;
2863                } else {
2864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2865                    inner_depth.increment()?;
2866                }
2867                let val_ref = self.config.get_or_insert_with(|| fidl::new_empty!(OnBootConfig, D));
2868                fidl::decode!(OnBootConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
2869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2870                {
2871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2872                }
2873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2875                }
2876            }
2877
2878            next_offset += envelope_size;
2879
2880            // Decode the remaining unknown envelopes.
2881            while next_offset < end_offset {
2882                _next_ordinal_to_read += 1;
2883                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2884                next_offset += envelope_size;
2885            }
2886
2887            Ok(())
2888        }
2889    }
2890
2891    impl SessionManagerStartSessionResponse {
2892        #[inline(always)]
2893        fn max_ordinal_present(&self) -> u64 {
2894            if let Some(_) = self.task_id {
2895                return 1;
2896            }
2897            0
2898        }
2899    }
2900
2901    impl fidl::encoding::ValueTypeMarker for SessionManagerStartSessionResponse {
2902        type Borrowed<'a> = &'a Self;
2903        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2904            value
2905        }
2906    }
2907
2908    unsafe impl fidl::encoding::TypeMarker for SessionManagerStartSessionResponse {
2909        type Owned = Self;
2910
2911        #[inline(always)]
2912        fn inline_align(_context: fidl::encoding::Context) -> usize {
2913            8
2914        }
2915
2916        #[inline(always)]
2917        fn inline_size(_context: fidl::encoding::Context) -> usize {
2918            16
2919        }
2920    }
2921
2922    unsafe impl<D: fidl::encoding::ResourceDialect>
2923        fidl::encoding::Encode<SessionManagerStartSessionResponse, D>
2924        for &SessionManagerStartSessionResponse
2925    {
2926        unsafe fn encode(
2927            self,
2928            encoder: &mut fidl::encoding::Encoder<'_, D>,
2929            offset: usize,
2930            mut depth: fidl::encoding::Depth,
2931        ) -> fidl::Result<()> {
2932            encoder.debug_check_bounds::<SessionManagerStartSessionResponse>(offset);
2933            // Vector header
2934            let max_ordinal: u64 = self.max_ordinal_present();
2935            encoder.write_num(max_ordinal, offset);
2936            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2937            // Calling encoder.out_of_line_offset(0) is not allowed.
2938            if max_ordinal == 0 {
2939                return Ok(());
2940            }
2941            depth.increment()?;
2942            let envelope_size = 8;
2943            let bytes_len = max_ordinal as usize * envelope_size;
2944            #[allow(unused_variables)]
2945            let offset = encoder.out_of_line_offset(bytes_len);
2946            let mut _prev_end_offset: usize = 0;
2947            if 1 > max_ordinal {
2948                return Ok(());
2949            }
2950
2951            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2952            // are envelope_size bytes.
2953            let cur_offset: usize = (1 - 1) * envelope_size;
2954
2955            // Zero reserved fields.
2956            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2957
2958            // Safety:
2959            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2960            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2961            //   envelope_size bytes, there is always sufficient room.
2962            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2963                self.task_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2964                encoder,
2965                offset + cur_offset,
2966                depth,
2967            )?;
2968
2969            _prev_end_offset = cur_offset + envelope_size;
2970
2971            Ok(())
2972        }
2973    }
2974
2975    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2976        for SessionManagerStartSessionResponse
2977    {
2978        #[inline(always)]
2979        fn new_empty() -> Self {
2980            Self::default()
2981        }
2982
2983        unsafe fn decode(
2984            &mut self,
2985            decoder: &mut fidl::encoding::Decoder<'_, D>,
2986            offset: usize,
2987            mut depth: fidl::encoding::Depth,
2988        ) -> fidl::Result<()> {
2989            decoder.debug_check_bounds::<Self>(offset);
2990            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2991                None => return Err(fidl::Error::NotNullable),
2992                Some(len) => len,
2993            };
2994            // Calling decoder.out_of_line_offset(0) is not allowed.
2995            if len == 0 {
2996                return Ok(());
2997            };
2998            depth.increment()?;
2999            let envelope_size = 8;
3000            let bytes_len = len * envelope_size;
3001            let offset = decoder.out_of_line_offset(bytes_len)?;
3002            // Decode the envelope for each type.
3003            let mut _next_ordinal_to_read = 0;
3004            let mut next_offset = offset;
3005            let end_offset = offset + bytes_len;
3006            _next_ordinal_to_read += 1;
3007            if next_offset >= end_offset {
3008                return Ok(());
3009            }
3010
3011            // Decode unknown envelopes for gaps in ordinals.
3012            while _next_ordinal_to_read < 1 {
3013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3014                _next_ordinal_to_read += 1;
3015                next_offset += envelope_size;
3016            }
3017
3018            let next_out_of_line = decoder.next_out_of_line();
3019            let handles_before = decoder.remaining_handles();
3020            if let Some((inlined, num_bytes, num_handles)) =
3021                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3022            {
3023                let member_inline_size =
3024                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3025                if inlined != (member_inline_size <= 4) {
3026                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3027                }
3028                let inner_offset;
3029                let mut inner_depth = depth.clone();
3030                if inlined {
3031                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3032                    inner_offset = next_offset;
3033                } else {
3034                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3035                    inner_depth.increment()?;
3036                }
3037                let val_ref = self.task_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
3038                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3039                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3040                {
3041                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3042                }
3043                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3044                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3045                }
3046            }
3047
3048            next_offset += envelope_size;
3049
3050            // Decode the remaining unknown envelopes.
3051            while next_offset < end_offset {
3052                _next_ordinal_to_read += 1;
3053                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3054                next_offset += envelope_size;
3055            }
3056
3057            Ok(())
3058        }
3059    }
3060
3061    impl SessionManagerStatusResponse {
3062        #[inline(always)]
3063        fn max_ordinal_present(&self) -> u64 {
3064            if let Some(_) = self.sessions {
3065                return 1;
3066            }
3067            0
3068        }
3069    }
3070
3071    impl fidl::encoding::ValueTypeMarker for SessionManagerStatusResponse {
3072        type Borrowed<'a> = &'a Self;
3073        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3074            value
3075        }
3076    }
3077
3078    unsafe impl fidl::encoding::TypeMarker for SessionManagerStatusResponse {
3079        type Owned = Self;
3080
3081        #[inline(always)]
3082        fn inline_align(_context: fidl::encoding::Context) -> usize {
3083            8
3084        }
3085
3086        #[inline(always)]
3087        fn inline_size(_context: fidl::encoding::Context) -> usize {
3088            16
3089        }
3090    }
3091
3092    unsafe impl<D: fidl::encoding::ResourceDialect>
3093        fidl::encoding::Encode<SessionManagerStatusResponse, D> for &SessionManagerStatusResponse
3094    {
3095        unsafe fn encode(
3096            self,
3097            encoder: &mut fidl::encoding::Encoder<'_, D>,
3098            offset: usize,
3099            mut depth: fidl::encoding::Depth,
3100        ) -> fidl::Result<()> {
3101            encoder.debug_check_bounds::<SessionManagerStatusResponse>(offset);
3102            // Vector header
3103            let max_ordinal: u64 = self.max_ordinal_present();
3104            encoder.write_num(max_ordinal, offset);
3105            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3106            // Calling encoder.out_of_line_offset(0) is not allowed.
3107            if max_ordinal == 0 {
3108                return Ok(());
3109            }
3110            depth.increment()?;
3111            let envelope_size = 8;
3112            let bytes_len = max_ordinal as usize * envelope_size;
3113            #[allow(unused_variables)]
3114            let offset = encoder.out_of_line_offset(bytes_len);
3115            let mut _prev_end_offset: usize = 0;
3116            if 1 > max_ordinal {
3117                return Ok(());
3118            }
3119
3120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3121            // are envelope_size bytes.
3122            let cur_offset: usize = (1 - 1) * envelope_size;
3123
3124            // Zero reserved fields.
3125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3126
3127            // Safety:
3128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3130            //   envelope_size bytes, there is always sufficient room.
3131            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ProfilerStatus>, D>(
3132            self.sessions.as_ref().map(<fidl::encoding::UnboundedVector<ProfilerStatus> as fidl::encoding::ValueTypeMarker>::borrow),
3133            encoder, offset + cur_offset, depth
3134        )?;
3135
3136            _prev_end_offset = cur_offset + envelope_size;
3137
3138            Ok(())
3139        }
3140    }
3141
3142    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3143        for SessionManagerStatusResponse
3144    {
3145        #[inline(always)]
3146        fn new_empty() -> Self {
3147            Self::default()
3148        }
3149
3150        unsafe fn decode(
3151            &mut self,
3152            decoder: &mut fidl::encoding::Decoder<'_, D>,
3153            offset: usize,
3154            mut depth: fidl::encoding::Depth,
3155        ) -> fidl::Result<()> {
3156            decoder.debug_check_bounds::<Self>(offset);
3157            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3158                None => return Err(fidl::Error::NotNullable),
3159                Some(len) => len,
3160            };
3161            // Calling decoder.out_of_line_offset(0) is not allowed.
3162            if len == 0 {
3163                return Ok(());
3164            };
3165            depth.increment()?;
3166            let envelope_size = 8;
3167            let bytes_len = len * envelope_size;
3168            let offset = decoder.out_of_line_offset(bytes_len)?;
3169            // Decode the envelope for each type.
3170            let mut _next_ordinal_to_read = 0;
3171            let mut next_offset = offset;
3172            let end_offset = offset + bytes_len;
3173            _next_ordinal_to_read += 1;
3174            if next_offset >= end_offset {
3175                return Ok(());
3176            }
3177
3178            // Decode unknown envelopes for gaps in ordinals.
3179            while _next_ordinal_to_read < 1 {
3180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3181                _next_ordinal_to_read += 1;
3182                next_offset += envelope_size;
3183            }
3184
3185            let next_out_of_line = decoder.next_out_of_line();
3186            let handles_before = decoder.remaining_handles();
3187            if let Some((inlined, num_bytes, num_handles)) =
3188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3189            {
3190                let member_inline_size = <fidl::encoding::UnboundedVector<ProfilerStatus> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3191                if inlined != (member_inline_size <= 4) {
3192                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3193                }
3194                let inner_offset;
3195                let mut inner_depth = depth.clone();
3196                if inlined {
3197                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3198                    inner_offset = next_offset;
3199                } else {
3200                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3201                    inner_depth.increment()?;
3202                }
3203                let val_ref = self.sessions.get_or_insert_with(|| {
3204                    fidl::new_empty!(fidl::encoding::UnboundedVector<ProfilerStatus>, D)
3205                });
3206                fidl::decode!(
3207                    fidl::encoding::UnboundedVector<ProfilerStatus>,
3208                    D,
3209                    val_ref,
3210                    decoder,
3211                    inner_offset,
3212                    inner_depth
3213                )?;
3214                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3215                {
3216                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3217                }
3218                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3219                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3220                }
3221            }
3222
3223            next_offset += envelope_size;
3224
3225            // Decode the remaining unknown envelopes.
3226            while next_offset < end_offset {
3227                _next_ordinal_to_read += 1;
3228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3229                next_offset += envelope_size;
3230            }
3231
3232            Ok(())
3233        }
3234    }
3235
3236    impl SessionResult {
3237        #[inline(always)]
3238        fn max_ordinal_present(&self) -> u64 {
3239            if let Some(_) = self.missing_process_mappings {
3240                return 6;
3241            }
3242            if let Some(_) = self.max_sample_time {
3243                return 5;
3244            }
3245            if let Some(_) = self.min_sample_time {
3246                return 4;
3247            }
3248            if let Some(_) = self.median_sample_time {
3249                return 3;
3250            }
3251            if let Some(_) = self.mean_sample_time {
3252                return 2;
3253            }
3254            if let Some(_) = self.samples_collected {
3255                return 1;
3256            }
3257            0
3258        }
3259    }
3260
3261    impl fidl::encoding::ValueTypeMarker for SessionResult {
3262        type Borrowed<'a> = &'a Self;
3263        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3264            value
3265        }
3266    }
3267
3268    unsafe impl fidl::encoding::TypeMarker for SessionResult {
3269        type Owned = Self;
3270
3271        #[inline(always)]
3272        fn inline_align(_context: fidl::encoding::Context) -> usize {
3273            8
3274        }
3275
3276        #[inline(always)]
3277        fn inline_size(_context: fidl::encoding::Context) -> usize {
3278            16
3279        }
3280    }
3281
3282    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SessionResult, D>
3283        for &SessionResult
3284    {
3285        unsafe fn encode(
3286            self,
3287            encoder: &mut fidl::encoding::Encoder<'_, D>,
3288            offset: usize,
3289            mut depth: fidl::encoding::Depth,
3290        ) -> fidl::Result<()> {
3291            encoder.debug_check_bounds::<SessionResult>(offset);
3292            // Vector header
3293            let max_ordinal: u64 = self.max_ordinal_present();
3294            encoder.write_num(max_ordinal, offset);
3295            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3296            // Calling encoder.out_of_line_offset(0) is not allowed.
3297            if max_ordinal == 0 {
3298                return Ok(());
3299            }
3300            depth.increment()?;
3301            let envelope_size = 8;
3302            let bytes_len = max_ordinal as usize * envelope_size;
3303            #[allow(unused_variables)]
3304            let offset = encoder.out_of_line_offset(bytes_len);
3305            let mut _prev_end_offset: usize = 0;
3306            if 1 > max_ordinal {
3307                return Ok(());
3308            }
3309
3310            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3311            // are envelope_size bytes.
3312            let cur_offset: usize = (1 - 1) * envelope_size;
3313
3314            // Zero reserved fields.
3315            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3316
3317            // Safety:
3318            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3319            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3320            //   envelope_size bytes, there is always sufficient room.
3321            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3322                self.samples_collected
3323                    .as_ref()
3324                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3325                encoder,
3326                offset + cur_offset,
3327                depth,
3328            )?;
3329
3330            _prev_end_offset = cur_offset + envelope_size;
3331            if 2 > max_ordinal {
3332                return Ok(());
3333            }
3334
3335            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3336            // are envelope_size bytes.
3337            let cur_offset: usize = (2 - 1) * envelope_size;
3338
3339            // Zero reserved fields.
3340            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3341
3342            // Safety:
3343            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3344            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3345            //   envelope_size bytes, there is always sufficient room.
3346            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3347                self.mean_sample_time
3348                    .as_ref()
3349                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3350                encoder,
3351                offset + cur_offset,
3352                depth,
3353            )?;
3354
3355            _prev_end_offset = cur_offset + envelope_size;
3356            if 3 > max_ordinal {
3357                return Ok(());
3358            }
3359
3360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3361            // are envelope_size bytes.
3362            let cur_offset: usize = (3 - 1) * envelope_size;
3363
3364            // Zero reserved fields.
3365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3366
3367            // Safety:
3368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3370            //   envelope_size bytes, there is always sufficient room.
3371            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3372                self.median_sample_time
3373                    .as_ref()
3374                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3375                encoder,
3376                offset + cur_offset,
3377                depth,
3378            )?;
3379
3380            _prev_end_offset = cur_offset + envelope_size;
3381            if 4 > max_ordinal {
3382                return Ok(());
3383            }
3384
3385            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3386            // are envelope_size bytes.
3387            let cur_offset: usize = (4 - 1) * envelope_size;
3388
3389            // Zero reserved fields.
3390            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3391
3392            // Safety:
3393            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3394            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3395            //   envelope_size bytes, there is always sufficient room.
3396            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3397                self.min_sample_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3398                encoder,
3399                offset + cur_offset,
3400                depth,
3401            )?;
3402
3403            _prev_end_offset = cur_offset + envelope_size;
3404            if 5 > max_ordinal {
3405                return Ok(());
3406            }
3407
3408            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3409            // are envelope_size bytes.
3410            let cur_offset: usize = (5 - 1) * envelope_size;
3411
3412            // Zero reserved fields.
3413            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3414
3415            // Safety:
3416            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3417            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3418            //   envelope_size bytes, there is always sufficient room.
3419            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3420                self.max_sample_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3421                encoder,
3422                offset + cur_offset,
3423                depth,
3424            )?;
3425
3426            _prev_end_offset = cur_offset + envelope_size;
3427            if 6 > max_ordinal {
3428                return Ok(());
3429            }
3430
3431            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3432            // are envelope_size bytes.
3433            let cur_offset: usize = (6 - 1) * envelope_size;
3434
3435            // Zero reserved fields.
3436            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3437
3438            // Safety:
3439            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3440            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3441            //   envelope_size bytes, there is always sufficient room.
3442            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
3443            self.missing_process_mappings.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
3444            encoder, offset + cur_offset, depth
3445        )?;
3446
3447            _prev_end_offset = cur_offset + envelope_size;
3448
3449            Ok(())
3450        }
3451    }
3452
3453    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SessionResult {
3454        #[inline(always)]
3455        fn new_empty() -> Self {
3456            Self::default()
3457        }
3458
3459        unsafe fn decode(
3460            &mut self,
3461            decoder: &mut fidl::encoding::Decoder<'_, D>,
3462            offset: usize,
3463            mut depth: fidl::encoding::Depth,
3464        ) -> fidl::Result<()> {
3465            decoder.debug_check_bounds::<Self>(offset);
3466            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3467                None => return Err(fidl::Error::NotNullable),
3468                Some(len) => len,
3469            };
3470            // Calling decoder.out_of_line_offset(0) is not allowed.
3471            if len == 0 {
3472                return Ok(());
3473            };
3474            depth.increment()?;
3475            let envelope_size = 8;
3476            let bytes_len = len * envelope_size;
3477            let offset = decoder.out_of_line_offset(bytes_len)?;
3478            // Decode the envelope for each type.
3479            let mut _next_ordinal_to_read = 0;
3480            let mut next_offset = offset;
3481            let end_offset = offset + bytes_len;
3482            _next_ordinal_to_read += 1;
3483            if next_offset >= end_offset {
3484                return Ok(());
3485            }
3486
3487            // Decode unknown envelopes for gaps in ordinals.
3488            while _next_ordinal_to_read < 1 {
3489                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3490                _next_ordinal_to_read += 1;
3491                next_offset += envelope_size;
3492            }
3493
3494            let next_out_of_line = decoder.next_out_of_line();
3495            let handles_before = decoder.remaining_handles();
3496            if let Some((inlined, num_bytes, num_handles)) =
3497                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3498            {
3499                let member_inline_size =
3500                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3501                if inlined != (member_inline_size <= 4) {
3502                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3503                }
3504                let inner_offset;
3505                let mut inner_depth = depth.clone();
3506                if inlined {
3507                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3508                    inner_offset = next_offset;
3509                } else {
3510                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3511                    inner_depth.increment()?;
3512                }
3513                let val_ref =
3514                    self.samples_collected.get_or_insert_with(|| fidl::new_empty!(u64, D));
3515                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3516                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3517                {
3518                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3519                }
3520                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3521                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3522                }
3523            }
3524
3525            next_offset += envelope_size;
3526            _next_ordinal_to_read += 1;
3527            if next_offset >= end_offset {
3528                return Ok(());
3529            }
3530
3531            // Decode unknown envelopes for gaps in ordinals.
3532            while _next_ordinal_to_read < 2 {
3533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3534                _next_ordinal_to_read += 1;
3535                next_offset += envelope_size;
3536            }
3537
3538            let next_out_of_line = decoder.next_out_of_line();
3539            let handles_before = decoder.remaining_handles();
3540            if let Some((inlined, num_bytes, num_handles)) =
3541                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3542            {
3543                let member_inline_size =
3544                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3545                if inlined != (member_inline_size <= 4) {
3546                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3547                }
3548                let inner_offset;
3549                let mut inner_depth = depth.clone();
3550                if inlined {
3551                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3552                    inner_offset = next_offset;
3553                } else {
3554                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3555                    inner_depth.increment()?;
3556                }
3557                let val_ref = self.mean_sample_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
3558                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3559                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3560                {
3561                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3562                }
3563                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3564                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3565                }
3566            }
3567
3568            next_offset += envelope_size;
3569            _next_ordinal_to_read += 1;
3570            if next_offset >= end_offset {
3571                return Ok(());
3572            }
3573
3574            // Decode unknown envelopes for gaps in ordinals.
3575            while _next_ordinal_to_read < 3 {
3576                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3577                _next_ordinal_to_read += 1;
3578                next_offset += envelope_size;
3579            }
3580
3581            let next_out_of_line = decoder.next_out_of_line();
3582            let handles_before = decoder.remaining_handles();
3583            if let Some((inlined, num_bytes, num_handles)) =
3584                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3585            {
3586                let member_inline_size =
3587                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3588                if inlined != (member_inline_size <= 4) {
3589                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3590                }
3591                let inner_offset;
3592                let mut inner_depth = depth.clone();
3593                if inlined {
3594                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3595                    inner_offset = next_offset;
3596                } else {
3597                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3598                    inner_depth.increment()?;
3599                }
3600                let val_ref =
3601                    self.median_sample_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
3602                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3603                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3604                {
3605                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3606                }
3607                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3608                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3609                }
3610            }
3611
3612            next_offset += envelope_size;
3613            _next_ordinal_to_read += 1;
3614            if next_offset >= end_offset {
3615                return Ok(());
3616            }
3617
3618            // Decode unknown envelopes for gaps in ordinals.
3619            while _next_ordinal_to_read < 4 {
3620                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3621                _next_ordinal_to_read += 1;
3622                next_offset += envelope_size;
3623            }
3624
3625            let next_out_of_line = decoder.next_out_of_line();
3626            let handles_before = decoder.remaining_handles();
3627            if let Some((inlined, num_bytes, num_handles)) =
3628                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3629            {
3630                let member_inline_size =
3631                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3632                if inlined != (member_inline_size <= 4) {
3633                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3634                }
3635                let inner_offset;
3636                let mut inner_depth = depth.clone();
3637                if inlined {
3638                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3639                    inner_offset = next_offset;
3640                } else {
3641                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3642                    inner_depth.increment()?;
3643                }
3644                let val_ref = self.min_sample_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
3645                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3646                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3647                {
3648                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3649                }
3650                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3651                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3652                }
3653            }
3654
3655            next_offset += envelope_size;
3656            _next_ordinal_to_read += 1;
3657            if next_offset >= end_offset {
3658                return Ok(());
3659            }
3660
3661            // Decode unknown envelopes for gaps in ordinals.
3662            while _next_ordinal_to_read < 5 {
3663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3664                _next_ordinal_to_read += 1;
3665                next_offset += envelope_size;
3666            }
3667
3668            let next_out_of_line = decoder.next_out_of_line();
3669            let handles_before = decoder.remaining_handles();
3670            if let Some((inlined, num_bytes, num_handles)) =
3671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3672            {
3673                let member_inline_size =
3674                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3675                if inlined != (member_inline_size <= 4) {
3676                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3677                }
3678                let inner_offset;
3679                let mut inner_depth = depth.clone();
3680                if inlined {
3681                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3682                    inner_offset = next_offset;
3683                } else {
3684                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3685                    inner_depth.increment()?;
3686                }
3687                let val_ref = self.max_sample_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
3688                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3690                {
3691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3692                }
3693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3695                }
3696            }
3697
3698            next_offset += envelope_size;
3699            _next_ordinal_to_read += 1;
3700            if next_offset >= end_offset {
3701                return Ok(());
3702            }
3703
3704            // Decode unknown envelopes for gaps in ordinals.
3705            while _next_ordinal_to_read < 6 {
3706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3707                _next_ordinal_to_read += 1;
3708                next_offset += envelope_size;
3709            }
3710
3711            let next_out_of_line = decoder.next_out_of_line();
3712            let handles_before = decoder.remaining_handles();
3713            if let Some((inlined, num_bytes, num_handles)) =
3714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3715            {
3716                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3717                if inlined != (member_inline_size <= 4) {
3718                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3719                }
3720                let inner_offset;
3721                let mut inner_depth = depth.clone();
3722                if inlined {
3723                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3724                    inner_offset = next_offset;
3725                } else {
3726                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3727                    inner_depth.increment()?;
3728                }
3729                let val_ref = self.missing_process_mappings.get_or_insert_with(|| {
3730                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
3731                });
3732                fidl::decode!(
3733                    fidl::encoding::UnboundedVector<u64>,
3734                    D,
3735                    val_ref,
3736                    decoder,
3737                    inner_offset,
3738                    inner_depth
3739                )?;
3740                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3741                {
3742                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3743                }
3744                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3745                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3746                }
3747            }
3748
3749            next_offset += envelope_size;
3750
3751            // Decode the remaining unknown envelopes.
3752            while next_offset < end_offset {
3753                _next_ordinal_to_read += 1;
3754                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3755                next_offset += envelope_size;
3756            }
3757
3758            Ok(())
3759        }
3760    }
3761
3762    impl SessionStartRequest {
3763        #[inline(always)]
3764        fn max_ordinal_present(&self) -> u64 {
3765            if let Some(_) = self.buffer_results {
3766                return 2;
3767            }
3768            if let Some(_) = self.buffer_size_mb {
3769                return 1;
3770            }
3771            0
3772        }
3773    }
3774
3775    impl fidl::encoding::ValueTypeMarker for SessionStartRequest {
3776        type Borrowed<'a> = &'a Self;
3777        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3778            value
3779        }
3780    }
3781
3782    unsafe impl fidl::encoding::TypeMarker for SessionStartRequest {
3783        type Owned = Self;
3784
3785        #[inline(always)]
3786        fn inline_align(_context: fidl::encoding::Context) -> usize {
3787            8
3788        }
3789
3790        #[inline(always)]
3791        fn inline_size(_context: fidl::encoding::Context) -> usize {
3792            16
3793        }
3794    }
3795
3796    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SessionStartRequest, D>
3797        for &SessionStartRequest
3798    {
3799        unsafe fn encode(
3800            self,
3801            encoder: &mut fidl::encoding::Encoder<'_, D>,
3802            offset: usize,
3803            mut depth: fidl::encoding::Depth,
3804        ) -> fidl::Result<()> {
3805            encoder.debug_check_bounds::<SessionStartRequest>(offset);
3806            // Vector header
3807            let max_ordinal: u64 = self.max_ordinal_present();
3808            encoder.write_num(max_ordinal, offset);
3809            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3810            // Calling encoder.out_of_line_offset(0) is not allowed.
3811            if max_ordinal == 0 {
3812                return Ok(());
3813            }
3814            depth.increment()?;
3815            let envelope_size = 8;
3816            let bytes_len = max_ordinal as usize * envelope_size;
3817            #[allow(unused_variables)]
3818            let offset = encoder.out_of_line_offset(bytes_len);
3819            let mut _prev_end_offset: usize = 0;
3820            if 1 > max_ordinal {
3821                return Ok(());
3822            }
3823
3824            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3825            // are envelope_size bytes.
3826            let cur_offset: usize = (1 - 1) * envelope_size;
3827
3828            // Zero reserved fields.
3829            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3830
3831            // Safety:
3832            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3833            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3834            //   envelope_size bytes, there is always sufficient room.
3835            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3836                self.buffer_size_mb.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3837                encoder,
3838                offset + cur_offset,
3839                depth,
3840            )?;
3841
3842            _prev_end_offset = cur_offset + envelope_size;
3843            if 2 > max_ordinal {
3844                return Ok(());
3845            }
3846
3847            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3848            // are envelope_size bytes.
3849            let cur_offset: usize = (2 - 1) * envelope_size;
3850
3851            // Zero reserved fields.
3852            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3853
3854            // Safety:
3855            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3856            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3857            //   envelope_size bytes, there is always sufficient room.
3858            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3859                self.buffer_results.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3860                encoder,
3861                offset + cur_offset,
3862                depth,
3863            )?;
3864
3865            _prev_end_offset = cur_offset + envelope_size;
3866
3867            Ok(())
3868        }
3869    }
3870
3871    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SessionStartRequest {
3872        #[inline(always)]
3873        fn new_empty() -> Self {
3874            Self::default()
3875        }
3876
3877        unsafe fn decode(
3878            &mut self,
3879            decoder: &mut fidl::encoding::Decoder<'_, D>,
3880            offset: usize,
3881            mut depth: fidl::encoding::Depth,
3882        ) -> fidl::Result<()> {
3883            decoder.debug_check_bounds::<Self>(offset);
3884            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3885                None => return Err(fidl::Error::NotNullable),
3886                Some(len) => len,
3887            };
3888            // Calling decoder.out_of_line_offset(0) is not allowed.
3889            if len == 0 {
3890                return Ok(());
3891            };
3892            depth.increment()?;
3893            let envelope_size = 8;
3894            let bytes_len = len * envelope_size;
3895            let offset = decoder.out_of_line_offset(bytes_len)?;
3896            // Decode the envelope for each type.
3897            let mut _next_ordinal_to_read = 0;
3898            let mut next_offset = offset;
3899            let end_offset = offset + bytes_len;
3900            _next_ordinal_to_read += 1;
3901            if next_offset >= end_offset {
3902                return Ok(());
3903            }
3904
3905            // Decode unknown envelopes for gaps in ordinals.
3906            while _next_ordinal_to_read < 1 {
3907                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3908                _next_ordinal_to_read += 1;
3909                next_offset += envelope_size;
3910            }
3911
3912            let next_out_of_line = decoder.next_out_of_line();
3913            let handles_before = decoder.remaining_handles();
3914            if let Some((inlined, num_bytes, num_handles)) =
3915                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3916            {
3917                let member_inline_size =
3918                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3919                if inlined != (member_inline_size <= 4) {
3920                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3921                }
3922                let inner_offset;
3923                let mut inner_depth = depth.clone();
3924                if inlined {
3925                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3926                    inner_offset = next_offset;
3927                } else {
3928                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3929                    inner_depth.increment()?;
3930                }
3931                let val_ref = self.buffer_size_mb.get_or_insert_with(|| fidl::new_empty!(u64, D));
3932                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3934                {
3935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3936                }
3937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3939                }
3940            }
3941
3942            next_offset += envelope_size;
3943            _next_ordinal_to_read += 1;
3944            if next_offset >= end_offset {
3945                return Ok(());
3946            }
3947
3948            // Decode unknown envelopes for gaps in ordinals.
3949            while _next_ordinal_to_read < 2 {
3950                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3951                _next_ordinal_to_read += 1;
3952                next_offset += envelope_size;
3953            }
3954
3955            let next_out_of_line = decoder.next_out_of_line();
3956            let handles_before = decoder.remaining_handles();
3957            if let Some((inlined, num_bytes, num_handles)) =
3958                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3959            {
3960                let member_inline_size =
3961                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3962                if inlined != (member_inline_size <= 4) {
3963                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3964                }
3965                let inner_offset;
3966                let mut inner_depth = depth.clone();
3967                if inlined {
3968                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3969                    inner_offset = next_offset;
3970                } else {
3971                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3972                    inner_depth.increment()?;
3973                }
3974                let val_ref = self.buffer_results.get_or_insert_with(|| fidl::new_empty!(bool, D));
3975                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3976                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3977                {
3978                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3979                }
3980                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3981                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3982                }
3983            }
3984
3985            next_offset += envelope_size;
3986
3987            // Decode the remaining unknown envelopes.
3988            while next_offset < end_offset {
3989                _next_ordinal_to_read += 1;
3990                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3991                next_offset += envelope_size;
3992            }
3993
3994            Ok(())
3995        }
3996    }
3997
3998    impl fidl::encoding::ValueTypeMarker for Counter {
3999        type Borrowed<'a> = &'a Self;
4000        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4001            value
4002        }
4003    }
4004
4005    unsafe impl fidl::encoding::TypeMarker for Counter {
4006        type Owned = Self;
4007
4008        #[inline(always)]
4009        fn inline_align(_context: fidl::encoding::Context) -> usize {
4010            8
4011        }
4012
4013        #[inline(always)]
4014        fn inline_size(_context: fidl::encoding::Context) -> usize {
4015            16
4016        }
4017    }
4018
4019    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Counter, D> for &Counter {
4020        #[inline]
4021        unsafe fn encode(
4022            self,
4023            encoder: &mut fidl::encoding::Encoder<'_, D>,
4024            offset: usize,
4025            _depth: fidl::encoding::Depth,
4026        ) -> fidl::Result<()> {
4027            encoder.debug_check_bounds::<Counter>(offset);
4028            encoder.write_num::<u64>(self.ordinal(), offset);
4029            match self {
4030                Counter::PlatformIndependent(ref val) => {
4031                    fidl::encoding::encode_in_envelope::<CounterId, D>(
4032                        <CounterId as fidl::encoding::ValueTypeMarker>::borrow(val),
4033                        encoder,
4034                        offset + 8,
4035                        _depth,
4036                    )
4037                }
4038                Counter::PlatformDependent(ref val) => {
4039                    fidl::encoding::encode_in_envelope::<u32, D>(
4040                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
4041                        encoder,
4042                        offset + 8,
4043                        _depth,
4044                    )
4045                }
4046                Counter::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4047            }
4048        }
4049    }
4050
4051    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Counter {
4052        #[inline(always)]
4053        fn new_empty() -> Self {
4054            Self::__SourceBreaking { unknown_ordinal: 0 }
4055        }
4056
4057        #[inline]
4058        unsafe fn decode(
4059            &mut self,
4060            decoder: &mut fidl::encoding::Decoder<'_, D>,
4061            offset: usize,
4062            mut depth: fidl::encoding::Depth,
4063        ) -> fidl::Result<()> {
4064            decoder.debug_check_bounds::<Self>(offset);
4065            #[allow(unused_variables)]
4066            let next_out_of_line = decoder.next_out_of_line();
4067            let handles_before = decoder.remaining_handles();
4068            let (ordinal, inlined, num_bytes, num_handles) =
4069                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4070
4071            let member_inline_size = match ordinal {
4072                1 => <CounterId as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4073                2 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4074                0 => return Err(fidl::Error::UnknownUnionTag),
4075                _ => num_bytes as usize,
4076            };
4077
4078            if inlined != (member_inline_size <= 4) {
4079                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4080            }
4081            let _inner_offset;
4082            if inlined {
4083                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4084                _inner_offset = offset + 8;
4085            } else {
4086                depth.increment()?;
4087                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4088            }
4089            match ordinal {
4090                1 => {
4091                    #[allow(irrefutable_let_patterns)]
4092                    if let Counter::PlatformIndependent(_) = self {
4093                        // Do nothing, read the value into the object
4094                    } else {
4095                        // Initialize `self` to the right variant
4096                        *self = Counter::PlatformIndependent(fidl::new_empty!(CounterId, D));
4097                    }
4098                    #[allow(irrefutable_let_patterns)]
4099                    if let Counter::PlatformIndependent(ref mut val) = self {
4100                        fidl::decode!(CounterId, D, val, decoder, _inner_offset, depth)?;
4101                    } else {
4102                        unreachable!()
4103                    }
4104                }
4105                2 => {
4106                    #[allow(irrefutable_let_patterns)]
4107                    if let Counter::PlatformDependent(_) = self {
4108                        // Do nothing, read the value into the object
4109                    } else {
4110                        // Initialize `self` to the right variant
4111                        *self = Counter::PlatformDependent(fidl::new_empty!(u32, D));
4112                    }
4113                    #[allow(irrefutable_let_patterns)]
4114                    if let Counter::PlatformDependent(ref mut val) = self {
4115                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
4116                    } else {
4117                        unreachable!()
4118                    }
4119                }
4120                #[allow(deprecated)]
4121                ordinal => {
4122                    for _ in 0..num_handles {
4123                        decoder.drop_next_handle()?;
4124                    }
4125                    *self = Counter::__SourceBreaking { unknown_ordinal: ordinal };
4126                }
4127            }
4128            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4129                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4130            }
4131            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4132                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4133            }
4134            Ok(())
4135        }
4136    }
4137
4138    impl fidl::encoding::ValueTypeMarker for OnBootAttachConfig {
4139        type Borrowed<'a> = &'a Self;
4140        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4141            value
4142        }
4143    }
4144
4145    unsafe impl fidl::encoding::TypeMarker for OnBootAttachConfig {
4146        type Owned = Self;
4147
4148        #[inline(always)]
4149        fn inline_align(_context: fidl::encoding::Context) -> usize {
4150            8
4151        }
4152
4153        #[inline(always)]
4154        fn inline_size(_context: fidl::encoding::Context) -> usize {
4155            16
4156        }
4157    }
4158
4159    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnBootAttachConfig, D>
4160        for &OnBootAttachConfig
4161    {
4162        #[inline]
4163        unsafe fn encode(
4164            self,
4165            encoder: &mut fidl::encoding::Encoder<'_, D>,
4166            offset: usize,
4167            _depth: fidl::encoding::Depth,
4168        ) -> fidl::Result<()> {
4169            encoder.debug_check_bounds::<OnBootAttachConfig>(offset);
4170            encoder.write_num::<u64>(self.ordinal(), offset);
4171            match self {
4172            OnBootAttachConfig::AttachToComponentMoniker(ref val) => {
4173                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4096>, D>(
4174                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(val),
4175                    encoder, offset + 8, _depth
4176                )
4177            }
4178            OnBootAttachConfig::AttachToComponentUrl(ref val) => {
4179                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4096>, D>(
4180                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(val),
4181                    encoder, offset + 8, _depth
4182                )
4183            }
4184            OnBootAttachConfig::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4185        }
4186        }
4187    }
4188
4189    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnBootAttachConfig {
4190        #[inline(always)]
4191        fn new_empty() -> Self {
4192            Self::__SourceBreaking { unknown_ordinal: 0 }
4193        }
4194
4195        #[inline]
4196        unsafe fn decode(
4197            &mut self,
4198            decoder: &mut fidl::encoding::Decoder<'_, D>,
4199            offset: usize,
4200            mut depth: fidl::encoding::Depth,
4201        ) -> fidl::Result<()> {
4202            decoder.debug_check_bounds::<Self>(offset);
4203            #[allow(unused_variables)]
4204            let next_out_of_line = decoder.next_out_of_line();
4205            let handles_before = decoder.remaining_handles();
4206            let (ordinal, inlined, num_bytes, num_handles) =
4207                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4208
4209            let member_inline_size = match ordinal {
4210                1 => {
4211                    <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(
4212                        decoder.context,
4213                    )
4214                }
4215                2 => {
4216                    <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(
4217                        decoder.context,
4218                    )
4219                }
4220                0 => return Err(fidl::Error::UnknownUnionTag),
4221                _ => num_bytes as usize,
4222            };
4223
4224            if inlined != (member_inline_size <= 4) {
4225                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4226            }
4227            let _inner_offset;
4228            if inlined {
4229                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4230                _inner_offset = offset + 8;
4231            } else {
4232                depth.increment()?;
4233                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4234            }
4235            match ordinal {
4236                1 => {
4237                    #[allow(irrefutable_let_patterns)]
4238                    if let OnBootAttachConfig::AttachToComponentMoniker(_) = self {
4239                        // Do nothing, read the value into the object
4240                    } else {
4241                        // Initialize `self` to the right variant
4242                        *self = OnBootAttachConfig::AttachToComponentMoniker(fidl::new_empty!(
4243                            fidl::encoding::BoundedString<4096>,
4244                            D
4245                        ));
4246                    }
4247                    #[allow(irrefutable_let_patterns)]
4248                    if let OnBootAttachConfig::AttachToComponentMoniker(ref mut val) = self {
4249                        fidl::decode!(
4250                            fidl::encoding::BoundedString<4096>,
4251                            D,
4252                            val,
4253                            decoder,
4254                            _inner_offset,
4255                            depth
4256                        )?;
4257                    } else {
4258                        unreachable!()
4259                    }
4260                }
4261                2 => {
4262                    #[allow(irrefutable_let_patterns)]
4263                    if let OnBootAttachConfig::AttachToComponentUrl(_) = self {
4264                        // Do nothing, read the value into the object
4265                    } else {
4266                        // Initialize `self` to the right variant
4267                        *self = OnBootAttachConfig::AttachToComponentUrl(fidl::new_empty!(
4268                            fidl::encoding::BoundedString<4096>,
4269                            D
4270                        ));
4271                    }
4272                    #[allow(irrefutable_let_patterns)]
4273                    if let OnBootAttachConfig::AttachToComponentUrl(ref mut val) = self {
4274                        fidl::decode!(
4275                            fidl::encoding::BoundedString<4096>,
4276                            D,
4277                            val,
4278                            decoder,
4279                            _inner_offset,
4280                            depth
4281                        )?;
4282                    } else {
4283                        unreachable!()
4284                    }
4285                }
4286                #[allow(deprecated)]
4287                ordinal => {
4288                    for _ in 0..num_handles {
4289                        decoder.drop_next_handle()?;
4290                    }
4291                    *self = OnBootAttachConfig::__SourceBreaking { unknown_ordinal: ordinal };
4292                }
4293            }
4294            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4295                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4296            }
4297            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4298                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4299            }
4300            Ok(())
4301        }
4302    }
4303
4304    impl fidl::encoding::ValueTypeMarker for OnBootTargetConfig {
4305        type Borrowed<'a> = &'a Self;
4306        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4307            value
4308        }
4309    }
4310
4311    unsafe impl fidl::encoding::TypeMarker for OnBootTargetConfig {
4312        type Owned = Self;
4313
4314        #[inline(always)]
4315        fn inline_align(_context: fidl::encoding::Context) -> usize {
4316            8
4317        }
4318
4319        #[inline(always)]
4320        fn inline_size(_context: fidl::encoding::Context) -> usize {
4321            16
4322        }
4323    }
4324
4325    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OnBootTargetConfig, D>
4326        for &OnBootTargetConfig
4327    {
4328        #[inline]
4329        unsafe fn encode(
4330            self,
4331            encoder: &mut fidl::encoding::Encoder<'_, D>,
4332            offset: usize,
4333            _depth: fidl::encoding::Depth,
4334        ) -> fidl::Result<()> {
4335            encoder.debug_check_bounds::<OnBootTargetConfig>(offset);
4336            encoder.write_num::<u64>(self.ordinal(), offset);
4337            match self {
4338                OnBootTargetConfig::Tasks(ref val) => fidl::encoding::encode_in_envelope::<
4339                    fidl::encoding::Vector<Task, 64>,
4340                    D,
4341                >(
4342                    <fidl::encoding::Vector<Task, 64> as fidl::encoding::ValueTypeMarker>::borrow(
4343                        val,
4344                    ),
4345                    encoder,
4346                    offset + 8,
4347                    _depth,
4348                ),
4349                OnBootTargetConfig::Component(ref val) => {
4350                    fidl::encoding::encode_in_envelope::<OnBootAttachConfig, D>(
4351                        <OnBootAttachConfig as fidl::encoding::ValueTypeMarker>::borrow(val),
4352                        encoder,
4353                        offset + 8,
4354                        _depth,
4355                    )
4356                }
4357                OnBootTargetConfig::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4358            }
4359        }
4360    }
4361
4362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OnBootTargetConfig {
4363        #[inline(always)]
4364        fn new_empty() -> Self {
4365            Self::__SourceBreaking { unknown_ordinal: 0 }
4366        }
4367
4368        #[inline]
4369        unsafe fn decode(
4370            &mut self,
4371            decoder: &mut fidl::encoding::Decoder<'_, D>,
4372            offset: usize,
4373            mut depth: fidl::encoding::Depth,
4374        ) -> fidl::Result<()> {
4375            decoder.debug_check_bounds::<Self>(offset);
4376            #[allow(unused_variables)]
4377            let next_out_of_line = decoder.next_out_of_line();
4378            let handles_before = decoder.remaining_handles();
4379            let (ordinal, inlined, num_bytes, num_handles) =
4380                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4381
4382            let member_inline_size = match ordinal {
4383                1 => <fidl::encoding::Vector<Task, 64> as fidl::encoding::TypeMarker>::inline_size(
4384                    decoder.context,
4385                ),
4386                2 => {
4387                    <OnBootAttachConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context)
4388                }
4389                0 => return Err(fidl::Error::UnknownUnionTag),
4390                _ => num_bytes as usize,
4391            };
4392
4393            if inlined != (member_inline_size <= 4) {
4394                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4395            }
4396            let _inner_offset;
4397            if inlined {
4398                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4399                _inner_offset = offset + 8;
4400            } else {
4401                depth.increment()?;
4402                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4403            }
4404            match ordinal {
4405                1 => {
4406                    #[allow(irrefutable_let_patterns)]
4407                    if let OnBootTargetConfig::Tasks(_) = self {
4408                        // Do nothing, read the value into the object
4409                    } else {
4410                        // Initialize `self` to the right variant
4411                        *self = OnBootTargetConfig::Tasks(
4412                            fidl::new_empty!(fidl::encoding::Vector<Task, 64>, D),
4413                        );
4414                    }
4415                    #[allow(irrefutable_let_patterns)]
4416                    if let OnBootTargetConfig::Tasks(ref mut val) = self {
4417                        fidl::decode!(fidl::encoding::Vector<Task, 64>, D, val, decoder, _inner_offset, depth)?;
4418                    } else {
4419                        unreachable!()
4420                    }
4421                }
4422                2 => {
4423                    #[allow(irrefutable_let_patterns)]
4424                    if let OnBootTargetConfig::Component(_) = self {
4425                        // Do nothing, read the value into the object
4426                    } else {
4427                        // Initialize `self` to the right variant
4428                        *self =
4429                            OnBootTargetConfig::Component(fidl::new_empty!(OnBootAttachConfig, D));
4430                    }
4431                    #[allow(irrefutable_let_patterns)]
4432                    if let OnBootTargetConfig::Component(ref mut val) = self {
4433                        fidl::decode!(OnBootAttachConfig, D, val, decoder, _inner_offset, depth)?;
4434                    } else {
4435                        unreachable!()
4436                    }
4437                }
4438                #[allow(deprecated)]
4439                ordinal => {
4440                    for _ in 0..num_handles {
4441                        decoder.drop_next_handle()?;
4442                    }
4443                    *self = OnBootTargetConfig::__SourceBreaking { unknown_ordinal: ordinal };
4444                }
4445            }
4446            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4447                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4448            }
4449            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4450                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4451            }
4452            Ok(())
4453        }
4454    }
4455
4456    impl fidl::encoding::ValueTypeMarker for Task {
4457        type Borrowed<'a> = &'a Self;
4458        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4459            value
4460        }
4461    }
4462
4463    unsafe impl fidl::encoding::TypeMarker for Task {
4464        type Owned = Self;
4465
4466        #[inline(always)]
4467        fn inline_align(_context: fidl::encoding::Context) -> usize {
4468            8
4469        }
4470
4471        #[inline(always)]
4472        fn inline_size(_context: fidl::encoding::Context) -> usize {
4473            16
4474        }
4475    }
4476
4477    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Task, D> for &Task {
4478        #[inline]
4479        unsafe fn encode(
4480            self,
4481            encoder: &mut fidl::encoding::Encoder<'_, D>,
4482            offset: usize,
4483            _depth: fidl::encoding::Depth,
4484        ) -> fidl::Result<()> {
4485            encoder.debug_check_bounds::<Task>(offset);
4486            encoder.write_num::<u64>(self.ordinal(), offset);
4487            match self {
4488                Task::Process(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
4489                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
4490                    encoder,
4491                    offset + 8,
4492                    _depth,
4493                ),
4494                Task::Thread(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
4495                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
4496                    encoder,
4497                    offset + 8,
4498                    _depth,
4499                ),
4500                Task::Job(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
4501                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
4502                    encoder,
4503                    offset + 8,
4504                    _depth,
4505                ),
4506                Task::SystemWide(ref val) => fidl::encoding::encode_in_envelope::<SystemWide, D>(
4507                    <SystemWide as fidl::encoding::ValueTypeMarker>::borrow(val),
4508                    encoder,
4509                    offset + 8,
4510                    _depth,
4511                ),
4512                Task::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4513            }
4514        }
4515    }
4516
4517    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Task {
4518        #[inline(always)]
4519        fn new_empty() -> Self {
4520            Self::__SourceBreaking { unknown_ordinal: 0 }
4521        }
4522
4523        #[inline]
4524        unsafe fn decode(
4525            &mut self,
4526            decoder: &mut fidl::encoding::Decoder<'_, D>,
4527            offset: usize,
4528            mut depth: fidl::encoding::Depth,
4529        ) -> fidl::Result<()> {
4530            decoder.debug_check_bounds::<Self>(offset);
4531            #[allow(unused_variables)]
4532            let next_out_of_line = decoder.next_out_of_line();
4533            let handles_before = decoder.remaining_handles();
4534            let (ordinal, inlined, num_bytes, num_handles) =
4535                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4536
4537            let member_inline_size = match ordinal {
4538                1 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4539                2 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4540                3 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4541                4 => <SystemWide as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4542                0 => return Err(fidl::Error::UnknownUnionTag),
4543                _ => num_bytes as usize,
4544            };
4545
4546            if inlined != (member_inline_size <= 4) {
4547                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4548            }
4549            let _inner_offset;
4550            if inlined {
4551                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4552                _inner_offset = offset + 8;
4553            } else {
4554                depth.increment()?;
4555                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4556            }
4557            match ordinal {
4558                1 => {
4559                    #[allow(irrefutable_let_patterns)]
4560                    if let Task::Process(_) = self {
4561                        // Do nothing, read the value into the object
4562                    } else {
4563                        // Initialize `self` to the right variant
4564                        *self = Task::Process(fidl::new_empty!(u64, D));
4565                    }
4566                    #[allow(irrefutable_let_patterns)]
4567                    if let Task::Process(ref mut val) = self {
4568                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
4569                    } else {
4570                        unreachable!()
4571                    }
4572                }
4573                2 => {
4574                    #[allow(irrefutable_let_patterns)]
4575                    if let Task::Thread(_) = self {
4576                        // Do nothing, read the value into the object
4577                    } else {
4578                        // Initialize `self` to the right variant
4579                        *self = Task::Thread(fidl::new_empty!(u64, D));
4580                    }
4581                    #[allow(irrefutable_let_patterns)]
4582                    if let Task::Thread(ref mut val) = self {
4583                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
4584                    } else {
4585                        unreachable!()
4586                    }
4587                }
4588                3 => {
4589                    #[allow(irrefutable_let_patterns)]
4590                    if let Task::Job(_) = self {
4591                        // Do nothing, read the value into the object
4592                    } else {
4593                        // Initialize `self` to the right variant
4594                        *self = Task::Job(fidl::new_empty!(u64, D));
4595                    }
4596                    #[allow(irrefutable_let_patterns)]
4597                    if let Task::Job(ref mut val) = self {
4598                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
4599                    } else {
4600                        unreachable!()
4601                    }
4602                }
4603                4 => {
4604                    #[allow(irrefutable_let_patterns)]
4605                    if let Task::SystemWide(_) = self {
4606                        // Do nothing, read the value into the object
4607                    } else {
4608                        // Initialize `self` to the right variant
4609                        *self = Task::SystemWide(fidl::new_empty!(SystemWide, D));
4610                    }
4611                    #[allow(irrefutable_let_patterns)]
4612                    if let Task::SystemWide(ref mut val) = self {
4613                        fidl::decode!(SystemWide, D, val, decoder, _inner_offset, depth)?;
4614                    } else {
4615                        unreachable!()
4616                    }
4617                }
4618                #[allow(deprecated)]
4619                ordinal => {
4620                    for _ in 0..num_handles {
4621                        decoder.drop_next_handle()?;
4622                    }
4623                    *self = Task::__SourceBreaking { unknown_ordinal: ordinal };
4624                }
4625            }
4626            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4627                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4628            }
4629            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4630                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4631            }
4632            Ok(())
4633        }
4634    }
4635}