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