Skip to main content

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