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