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