fidl_fuchsia_tracing_controller__common/
fidl_fuchsia_tracing_controller__common.rs

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