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