Skip to main content

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