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