Skip to main content

fidl_fuchsia_diagnostics__common/
fidl_fuchsia_diagnostics__common.rs

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