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