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