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