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