1#![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
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12pub enum FilterError {
13    NoPattern,
15    UnknownType,
17    InvalidOptions,
19    #[doc(hidden)]
20    __SourceBreaking { unknown_ordinal: u32 },
21}
22
23#[macro_export]
25macro_rules! FilterErrorUnknown {
26    () => {
27        _
28    };
29}
30
31impl FilterError {
32    #[inline]
33    pub fn from_primitive(prim: u32) -> Option<Self> {
34        match prim {
35            1 => Some(Self::NoPattern),
36            2 => Some(Self::UnknownType),
37            3 => Some(Self::InvalidOptions),
38            _ => None,
39        }
40    }
41
42    #[inline]
43    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
44        match prim {
45            1 => Self::NoPattern,
46            2 => Self::UnknownType,
47            3 => Self::InvalidOptions,
48            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
49        }
50    }
51
52    #[inline]
53    pub fn unknown() -> Self {
54        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
55    }
56
57    #[inline]
58    pub const fn into_primitive(self) -> u32 {
59        match self {
60            Self::NoPattern => 1,
61            Self::UnknownType => 2,
62            Self::InvalidOptions => 3,
63            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
64        }
65    }
66
67    #[inline]
68    pub fn is_unknown(&self) -> bool {
69        match self {
70            Self::__SourceBreaking { unknown_ordinal: _ } => true,
71            _ => false,
72        }
73    }
74}
75
76#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
77pub enum FilterType {
78    Url,
82    Moniker,
84    MonikerPrefix,
86    MonikerSuffix,
88    #[doc(hidden)]
89    __SourceBreaking { unknown_ordinal: u8 },
90}
91
92#[macro_export]
94macro_rules! FilterTypeUnknown {
95    () => {
96        _
97    };
98}
99
100impl FilterType {
101    #[inline]
102    pub fn from_primitive(prim: u8) -> Option<Self> {
103        match prim {
104            0 => Some(Self::Url),
105            1 => Some(Self::Moniker),
106            2 => Some(Self::MonikerPrefix),
107            3 => Some(Self::MonikerSuffix),
108            _ => None,
109        }
110    }
111
112    #[inline]
113    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
114        match prim {
115            0 => Self::Url,
116            1 => Self::Moniker,
117            2 => Self::MonikerPrefix,
118            3 => Self::MonikerSuffix,
119            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
120        }
121    }
122
123    #[inline]
124    pub fn unknown() -> Self {
125        Self::__SourceBreaking { unknown_ordinal: 0xff }
126    }
127
128    #[inline]
129    pub const fn into_primitive(self) -> u8 {
130        match self {
131            Self::Url => 0,
132            Self::Moniker => 1,
133            Self::MonikerPrefix => 2,
134            Self::MonikerSuffix => 3,
135            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
136        }
137    }
138
139    #[inline]
140    pub fn is_unknown(&self) -> bool {
141        match self {
142            Self::__SourceBreaking { unknown_ordinal: _ } => true,
143            _ => false,
144        }
145    }
146}
147
148#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
149pub enum MinidumpError {
150    NoProcesses,
154    InternalError,
157    #[doc(hidden)]
158    __SourceBreaking { unknown_ordinal: u32 },
159}
160
161#[macro_export]
163macro_rules! MinidumpErrorUnknown {
164    () => {
165        _
166    };
167}
168
169impl MinidumpError {
170    #[inline]
171    pub fn from_primitive(prim: u32) -> Option<Self> {
172        match prim {
173            1 => Some(Self::NoProcesses),
174            2 => Some(Self::InternalError),
175            _ => None,
176        }
177    }
178
179    #[inline]
180    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
181        match prim {
182            1 => Self::NoProcesses,
183            2 => Self::InternalError,
184            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
185        }
186    }
187
188    #[inline]
189    pub fn unknown() -> Self {
190        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
191    }
192
193    #[inline]
194    pub const fn into_primitive(self) -> u32 {
195        match self {
196            Self::NoProcesses => 1,
197            Self::InternalError => 2,
198            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
199        }
200    }
201
202    #[inline]
203    pub fn is_unknown(&self) -> bool {
204        match self {
205            Self::__SourceBreaking { unknown_ordinal: _ } => true,
206            _ => false,
207        }
208    }
209}
210
211#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
212pub enum ProcessInfoError {
213    NoProcesses,
215    ProcessGone,
217    ThreadGone,
219    #[doc(hidden)]
220    __SourceBreaking { unknown_ordinal: u32 },
221}
222
223#[macro_export]
225macro_rules! ProcessInfoErrorUnknown {
226    () => {
227        _
228    };
229}
230
231impl ProcessInfoError {
232    #[inline]
233    pub fn from_primitive(prim: u32) -> Option<Self> {
234        match prim {
235            1 => Some(Self::NoProcesses),
236            2 => Some(Self::ProcessGone),
237            3 => Some(Self::ThreadGone),
238            _ => None,
239        }
240    }
241
242    #[inline]
243    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
244        match prim {
245            1 => Self::NoProcesses,
246            2 => Self::ProcessGone,
247            3 => Self::ThreadGone,
248            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
249        }
250    }
251
252    #[inline]
253    pub fn unknown() -> Self {
254        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
255    }
256
257    #[inline]
258    pub const fn into_primitive(self) -> u32 {
259        match self {
260            Self::NoProcesses => 1,
261            Self::ProcessGone => 2,
262            Self::ThreadGone => 3,
263            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
264        }
265    }
266
267    #[inline]
268    pub fn is_unknown(&self) -> bool {
269        match self {
270            Self::__SourceBreaking { unknown_ordinal: _ } => true,
271            _ => false,
272        }
273    }
274}
275
276#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
277pub struct AttachedProcessIteratorGetNextResponse {
278    pub process_names: Vec<String>,
279}
280
281impl fidl::Persistable for AttachedProcessIteratorGetNextResponse {}
282
283#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
284#[repr(C)]
285pub struct DebugAgentAttachToResponse {
286    pub num_matches: u32,
287}
288
289impl fidl::Persistable for DebugAgentAttachToResponse {}
290
291#[derive(Clone, Debug, PartialEq)]
298pub struct Filter {
299    pub pattern: String,
302    pub type_: FilterType,
304    pub options: FilterOptions,
306}
307
308impl fidl::Persistable for Filter {}
309
310#[derive(Clone, Debug, PartialEq)]
311pub struct ProcessInfo {
312    pub process: u64,
313    pub moniker: String,
314    pub thread: u64,
316    pub details: ThreadDetails,
319}
320
321impl fidl::Persistable for ProcessInfo {}
322
323#[derive(Clone, Debug, PartialEq)]
324pub struct ProcessInfoIteratorGetNextResponse {
325    pub info: Vec<ProcessInfo>,
326}
327
328impl fidl::Persistable for ProcessInfoIteratorGetNextResponse {}
329
330#[derive(Clone, Debug, Default, PartialEq)]
331pub struct DebugAgentOnFatalExceptionRequest {
332    pub thread: Option<u64>,
334    pub backtrace: Option<String>,
336    #[doc(hidden)]
337    pub __source_breaking: fidl::marker::SourceBreaking,
338}
339
340impl fidl::Persistable for DebugAgentOnFatalExceptionRequest {}
341
342#[derive(Clone, Debug, Default, PartialEq)]
343pub struct FilterOptions {
344    pub recursive: Option<bool>,
349    pub job_only: Option<bool>,
357    #[doc(hidden)]
358    pub __source_breaking: fidl::marker::SourceBreaking,
359}
360
361impl fidl::Persistable for FilterOptions {}
362
363#[derive(Clone, Debug, Default, PartialEq)]
364pub struct GetProcessInfoOptions {
365    pub filter: Option<Filter>,
371    pub interest: Option<ThreadDetailsInterest>,
375    #[doc(hidden)]
376    pub __source_breaking: fidl::marker::SourceBreaking,
377}
378
379impl fidl::Persistable for GetProcessInfoOptions {}
380
381#[derive(Clone, Debug, Default, PartialEq)]
382pub struct MinidumpOptions {
383    pub filter: Option<Filter>,
387    #[doc(hidden)]
388    pub __source_breaking: fidl::marker::SourceBreaking,
389}
390
391impl fidl::Persistable for MinidumpOptions {}
392
393#[derive(Clone, Debug, Default, PartialEq)]
397pub struct ThreadDetails {
398    pub backtrace: Option<String>,
400    #[doc(hidden)]
401    pub __source_breaking: fidl::marker::SourceBreaking,
402}
403
404impl fidl::Persistable for ThreadDetails {}
405
406#[derive(Clone, Debug, Default, PartialEq)]
407pub struct ThreadDetailsInterest {
408    pub backtrace: Option<bool>,
412    #[doc(hidden)]
413    pub __source_breaking: fidl::marker::SourceBreaking,
414}
415
416impl fidl::Persistable for ThreadDetailsInterest {}
417
418pub mod agent_iterator_ordinals {
419    pub const GET_NEXT: u64 = 0x40f8adb0c975fa41;
420}
421
422pub mod attached_process_iterator_ordinals {
423    pub const GET_NEXT: u64 = 0x47ef49b75f6133ab;
424}
425
426pub mod debug_agent_ordinals {
427    pub const CONNECT: u64 = 0x6f81c1e426ddf3f9;
428    pub const GET_ATTACHED_PROCESSES: u64 = 0x4a07b086a7deda56;
429    pub const ATTACH_TO: u64 = 0x2800c757fe52795f;
430    pub const GET_PROCESS_INFO: u64 = 0x4daf0a7366bb6d77;
431    pub const GET_MINIDUMPS: u64 = 0x4a4693aeecdb7deb;
432    pub const ON_FATAL_EXCEPTION: u64 = 0x254b534a4790d114;
433}
434
435pub mod launcher_ordinals {
436    pub const LAUNCH: u64 = 0x54420f44e79e5c0e;
437    pub const GET_AGENTS: u64 = 0x4e6a35bfa35ee8f4;
438}
439
440pub mod minidump_iterator_ordinals {
441    pub const GET_NEXT: u64 = 0x3db055b61b8482dc;
442}
443
444pub mod process_info_iterator_ordinals {
445    pub const GET_NEXT: u64 = 0x527e289fe635bcc;
446}
447
448mod internal {
449    use super::*;
450    unsafe impl fidl::encoding::TypeMarker for FilterError {
451        type Owned = Self;
452
453        #[inline(always)]
454        fn inline_align(_context: fidl::encoding::Context) -> usize {
455            std::mem::align_of::<u32>()
456        }
457
458        #[inline(always)]
459        fn inline_size(_context: fidl::encoding::Context) -> usize {
460            std::mem::size_of::<u32>()
461        }
462
463        #[inline(always)]
464        fn encode_is_copy() -> bool {
465            false
466        }
467
468        #[inline(always)]
469        fn decode_is_copy() -> bool {
470            false
471        }
472    }
473
474    impl fidl::encoding::ValueTypeMarker for FilterError {
475        type Borrowed<'a> = Self;
476        #[inline(always)]
477        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
478            *value
479        }
480    }
481
482    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for FilterError {
483        #[inline]
484        unsafe fn encode(
485            self,
486            encoder: &mut fidl::encoding::Encoder<'_, D>,
487            offset: usize,
488            _depth: fidl::encoding::Depth,
489        ) -> fidl::Result<()> {
490            encoder.debug_check_bounds::<Self>(offset);
491            encoder.write_num(self.into_primitive(), offset);
492            Ok(())
493        }
494    }
495
496    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FilterError {
497        #[inline(always)]
498        fn new_empty() -> Self {
499            Self::unknown()
500        }
501
502        #[inline]
503        unsafe fn decode(
504            &mut self,
505            decoder: &mut fidl::encoding::Decoder<'_, D>,
506            offset: usize,
507            _depth: fidl::encoding::Depth,
508        ) -> fidl::Result<()> {
509            decoder.debug_check_bounds::<Self>(offset);
510            let prim = decoder.read_num::<u32>(offset);
511
512            *self = Self::from_primitive_allow_unknown(prim);
513            Ok(())
514        }
515    }
516    unsafe impl fidl::encoding::TypeMarker for FilterType {
517        type Owned = Self;
518
519        #[inline(always)]
520        fn inline_align(_context: fidl::encoding::Context) -> usize {
521            std::mem::align_of::<u8>()
522        }
523
524        #[inline(always)]
525        fn inline_size(_context: fidl::encoding::Context) -> usize {
526            std::mem::size_of::<u8>()
527        }
528
529        #[inline(always)]
530        fn encode_is_copy() -> bool {
531            false
532        }
533
534        #[inline(always)]
535        fn decode_is_copy() -> bool {
536            false
537        }
538    }
539
540    impl fidl::encoding::ValueTypeMarker for FilterType {
541        type Borrowed<'a> = Self;
542        #[inline(always)]
543        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
544            *value
545        }
546    }
547
548    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for FilterType {
549        #[inline]
550        unsafe fn encode(
551            self,
552            encoder: &mut fidl::encoding::Encoder<'_, D>,
553            offset: usize,
554            _depth: fidl::encoding::Depth,
555        ) -> fidl::Result<()> {
556            encoder.debug_check_bounds::<Self>(offset);
557            encoder.write_num(self.into_primitive(), offset);
558            Ok(())
559        }
560    }
561
562    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FilterType {
563        #[inline(always)]
564        fn new_empty() -> Self {
565            Self::unknown()
566        }
567
568        #[inline]
569        unsafe fn decode(
570            &mut self,
571            decoder: &mut fidl::encoding::Decoder<'_, D>,
572            offset: usize,
573            _depth: fidl::encoding::Depth,
574        ) -> fidl::Result<()> {
575            decoder.debug_check_bounds::<Self>(offset);
576            let prim = decoder.read_num::<u8>(offset);
577
578            *self = Self::from_primitive_allow_unknown(prim);
579            Ok(())
580        }
581    }
582    unsafe impl fidl::encoding::TypeMarker for MinidumpError {
583        type Owned = Self;
584
585        #[inline(always)]
586        fn inline_align(_context: fidl::encoding::Context) -> usize {
587            std::mem::align_of::<u32>()
588        }
589
590        #[inline(always)]
591        fn inline_size(_context: fidl::encoding::Context) -> usize {
592            std::mem::size_of::<u32>()
593        }
594
595        #[inline(always)]
596        fn encode_is_copy() -> bool {
597            false
598        }
599
600        #[inline(always)]
601        fn decode_is_copy() -> bool {
602            false
603        }
604    }
605
606    impl fidl::encoding::ValueTypeMarker for MinidumpError {
607        type Borrowed<'a> = Self;
608        #[inline(always)]
609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
610            *value
611        }
612    }
613
614    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for MinidumpError {
615        #[inline]
616        unsafe fn encode(
617            self,
618            encoder: &mut fidl::encoding::Encoder<'_, D>,
619            offset: usize,
620            _depth: fidl::encoding::Depth,
621        ) -> fidl::Result<()> {
622            encoder.debug_check_bounds::<Self>(offset);
623            encoder.write_num(self.into_primitive(), offset);
624            Ok(())
625        }
626    }
627
628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MinidumpError {
629        #[inline(always)]
630        fn new_empty() -> Self {
631            Self::unknown()
632        }
633
634        #[inline]
635        unsafe fn decode(
636            &mut self,
637            decoder: &mut fidl::encoding::Decoder<'_, D>,
638            offset: usize,
639            _depth: fidl::encoding::Depth,
640        ) -> fidl::Result<()> {
641            decoder.debug_check_bounds::<Self>(offset);
642            let prim = decoder.read_num::<u32>(offset);
643
644            *self = Self::from_primitive_allow_unknown(prim);
645            Ok(())
646        }
647    }
648    unsafe impl fidl::encoding::TypeMarker for ProcessInfoError {
649        type Owned = Self;
650
651        #[inline(always)]
652        fn inline_align(_context: fidl::encoding::Context) -> usize {
653            std::mem::align_of::<u32>()
654        }
655
656        #[inline(always)]
657        fn inline_size(_context: fidl::encoding::Context) -> usize {
658            std::mem::size_of::<u32>()
659        }
660
661        #[inline(always)]
662        fn encode_is_copy() -> bool {
663            false
664        }
665
666        #[inline(always)]
667        fn decode_is_copy() -> bool {
668            false
669        }
670    }
671
672    impl fidl::encoding::ValueTypeMarker for ProcessInfoError {
673        type Borrowed<'a> = Self;
674        #[inline(always)]
675        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
676            *value
677        }
678    }
679
680    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
681        for ProcessInfoError
682    {
683        #[inline]
684        unsafe fn encode(
685            self,
686            encoder: &mut fidl::encoding::Encoder<'_, D>,
687            offset: usize,
688            _depth: fidl::encoding::Depth,
689        ) -> fidl::Result<()> {
690            encoder.debug_check_bounds::<Self>(offset);
691            encoder.write_num(self.into_primitive(), offset);
692            Ok(())
693        }
694    }
695
696    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessInfoError {
697        #[inline(always)]
698        fn new_empty() -> Self {
699            Self::unknown()
700        }
701
702        #[inline]
703        unsafe fn decode(
704            &mut self,
705            decoder: &mut fidl::encoding::Decoder<'_, D>,
706            offset: usize,
707            _depth: fidl::encoding::Depth,
708        ) -> fidl::Result<()> {
709            decoder.debug_check_bounds::<Self>(offset);
710            let prim = decoder.read_num::<u32>(offset);
711
712            *self = Self::from_primitive_allow_unknown(prim);
713            Ok(())
714        }
715    }
716
717    impl fidl::encoding::ValueTypeMarker for AttachedProcessIteratorGetNextResponse {
718        type Borrowed<'a> = &'a Self;
719        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
720            value
721        }
722    }
723
724    unsafe impl fidl::encoding::TypeMarker for AttachedProcessIteratorGetNextResponse {
725        type Owned = Self;
726
727        #[inline(always)]
728        fn inline_align(_context: fidl::encoding::Context) -> usize {
729            8
730        }
731
732        #[inline(always)]
733        fn inline_size(_context: fidl::encoding::Context) -> usize {
734            16
735        }
736    }
737
738    unsafe impl<D: fidl::encoding::ResourceDialect>
739        fidl::encoding::Encode<AttachedProcessIteratorGetNextResponse, D>
740        for &AttachedProcessIteratorGetNextResponse
741    {
742        #[inline]
743        unsafe fn encode(
744            self,
745            encoder: &mut fidl::encoding::Encoder<'_, D>,
746            offset: usize,
747            _depth: fidl::encoding::Depth,
748        ) -> fidl::Result<()> {
749            encoder.debug_check_bounds::<AttachedProcessIteratorGetNextResponse>(offset);
750            fidl::encoding::Encode::<AttachedProcessIteratorGetNextResponse, D>::encode(
752                (
753                    <fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<32>> as fidl::encoding::ValueTypeMarker>::borrow(&self.process_names),
754                ),
755                encoder, offset, _depth
756            )
757        }
758    }
759    unsafe impl<
760        D: fidl::encoding::ResourceDialect,
761        T0: fidl::encoding::Encode<
762                fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<32>>,
763                D,
764            >,
765    > fidl::encoding::Encode<AttachedProcessIteratorGetNextResponse, D> for (T0,)
766    {
767        #[inline]
768        unsafe fn encode(
769            self,
770            encoder: &mut fidl::encoding::Encoder<'_, D>,
771            offset: usize,
772            depth: fidl::encoding::Depth,
773        ) -> fidl::Result<()> {
774            encoder.debug_check_bounds::<AttachedProcessIteratorGetNextResponse>(offset);
775            self.0.encode(encoder, offset + 0, depth)?;
779            Ok(())
780        }
781    }
782
783    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
784        for AttachedProcessIteratorGetNextResponse
785    {
786        #[inline(always)]
787        fn new_empty() -> Self {
788            Self {
789                process_names: fidl::new_empty!(
790                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<32>>,
791                    D
792                ),
793            }
794        }
795
796        #[inline]
797        unsafe fn decode(
798            &mut self,
799            decoder: &mut fidl::encoding::Decoder<'_, D>,
800            offset: usize,
801            _depth: fidl::encoding::Depth,
802        ) -> fidl::Result<()> {
803            decoder.debug_check_bounds::<Self>(offset);
804            fidl::decode!(
806                fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<32>>,
807                D,
808                &mut self.process_names,
809                decoder,
810                offset + 0,
811                _depth
812            )?;
813            Ok(())
814        }
815    }
816
817    impl fidl::encoding::ValueTypeMarker for DebugAgentAttachToResponse {
818        type Borrowed<'a> = &'a Self;
819        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
820            value
821        }
822    }
823
824    unsafe impl fidl::encoding::TypeMarker for DebugAgentAttachToResponse {
825        type Owned = Self;
826
827        #[inline(always)]
828        fn inline_align(_context: fidl::encoding::Context) -> usize {
829            4
830        }
831
832        #[inline(always)]
833        fn inline_size(_context: fidl::encoding::Context) -> usize {
834            4
835        }
836        #[inline(always)]
837        fn encode_is_copy() -> bool {
838            true
839        }
840
841        #[inline(always)]
842        fn decode_is_copy() -> bool {
843            true
844        }
845    }
846
847    unsafe impl<D: fidl::encoding::ResourceDialect>
848        fidl::encoding::Encode<DebugAgentAttachToResponse, D> for &DebugAgentAttachToResponse
849    {
850        #[inline]
851        unsafe fn encode(
852            self,
853            encoder: &mut fidl::encoding::Encoder<'_, D>,
854            offset: usize,
855            _depth: fidl::encoding::Depth,
856        ) -> fidl::Result<()> {
857            encoder.debug_check_bounds::<DebugAgentAttachToResponse>(offset);
858            unsafe {
859                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
861                (buf_ptr as *mut DebugAgentAttachToResponse)
862                    .write_unaligned((self as *const DebugAgentAttachToResponse).read());
863                }
866            Ok(())
867        }
868    }
869    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
870        fidl::encoding::Encode<DebugAgentAttachToResponse, D> for (T0,)
871    {
872        #[inline]
873        unsafe fn encode(
874            self,
875            encoder: &mut fidl::encoding::Encoder<'_, D>,
876            offset: usize,
877            depth: fidl::encoding::Depth,
878        ) -> fidl::Result<()> {
879            encoder.debug_check_bounds::<DebugAgentAttachToResponse>(offset);
880            self.0.encode(encoder, offset + 0, depth)?;
884            Ok(())
885        }
886    }
887
888    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
889        for DebugAgentAttachToResponse
890    {
891        #[inline(always)]
892        fn new_empty() -> Self {
893            Self { num_matches: fidl::new_empty!(u32, D) }
894        }
895
896        #[inline]
897        unsafe fn decode(
898            &mut self,
899            decoder: &mut fidl::encoding::Decoder<'_, D>,
900            offset: usize,
901            _depth: fidl::encoding::Depth,
902        ) -> fidl::Result<()> {
903            decoder.debug_check_bounds::<Self>(offset);
904            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
905            unsafe {
908                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
909            }
910            Ok(())
911        }
912    }
913
914    impl fidl::encoding::ValueTypeMarker for Filter {
915        type Borrowed<'a> = &'a Self;
916        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
917            value
918        }
919    }
920
921    unsafe impl fidl::encoding::TypeMarker for Filter {
922        type Owned = Self;
923
924        #[inline(always)]
925        fn inline_align(_context: fidl::encoding::Context) -> usize {
926            8
927        }
928
929        #[inline(always)]
930        fn inline_size(_context: fidl::encoding::Context) -> usize {
931            40
932        }
933    }
934
935    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Filter, D> for &Filter {
936        #[inline]
937        unsafe fn encode(
938            self,
939            encoder: &mut fidl::encoding::Encoder<'_, D>,
940            offset: usize,
941            _depth: fidl::encoding::Depth,
942        ) -> fidl::Result<()> {
943            encoder.debug_check_bounds::<Filter>(offset);
944            fidl::encoding::Encode::<Filter, D>::encode(
946                (
947                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
948                        &self.pattern,
949                    ),
950                    <FilterType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
951                    <FilterOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),
952                ),
953                encoder,
954                offset,
955                _depth,
956            )
957        }
958    }
959    unsafe impl<
960        D: fidl::encoding::ResourceDialect,
961        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
962        T1: fidl::encoding::Encode<FilterType, D>,
963        T2: fidl::encoding::Encode<FilterOptions, D>,
964    > fidl::encoding::Encode<Filter, D> for (T0, T1, T2)
965    {
966        #[inline]
967        unsafe fn encode(
968            self,
969            encoder: &mut fidl::encoding::Encoder<'_, D>,
970            offset: usize,
971            depth: fidl::encoding::Depth,
972        ) -> fidl::Result<()> {
973            encoder.debug_check_bounds::<Filter>(offset);
974            unsafe {
977                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
978                (ptr as *mut u64).write_unaligned(0);
979            }
980            self.0.encode(encoder, offset + 0, depth)?;
982            self.1.encode(encoder, offset + 16, depth)?;
983            self.2.encode(encoder, offset + 24, depth)?;
984            Ok(())
985        }
986    }
987
988    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Filter {
989        #[inline(always)]
990        fn new_empty() -> Self {
991            Self {
992                pattern: fidl::new_empty!(fidl::encoding::UnboundedString, D),
993                type_: fidl::new_empty!(FilterType, D),
994                options: fidl::new_empty!(FilterOptions, D),
995            }
996        }
997
998        #[inline]
999        unsafe fn decode(
1000            &mut self,
1001            decoder: &mut fidl::encoding::Decoder<'_, D>,
1002            offset: usize,
1003            _depth: fidl::encoding::Depth,
1004        ) -> fidl::Result<()> {
1005            decoder.debug_check_bounds::<Self>(offset);
1006            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1008            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1009            let mask = 0xffffffffffffff00u64;
1010            let maskedval = padval & mask;
1011            if maskedval != 0 {
1012                return Err(fidl::Error::NonZeroPadding {
1013                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1014                });
1015            }
1016            fidl::decode!(
1017                fidl::encoding::UnboundedString,
1018                D,
1019                &mut self.pattern,
1020                decoder,
1021                offset + 0,
1022                _depth
1023            )?;
1024            fidl::decode!(FilterType, D, &mut self.type_, decoder, offset + 16, _depth)?;
1025            fidl::decode!(FilterOptions, D, &mut self.options, decoder, offset + 24, _depth)?;
1026            Ok(())
1027        }
1028    }
1029
1030    impl fidl::encoding::ValueTypeMarker for ProcessInfo {
1031        type Borrowed<'a> = &'a Self;
1032        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1033            value
1034        }
1035    }
1036
1037    unsafe impl fidl::encoding::TypeMarker for ProcessInfo {
1038        type Owned = Self;
1039
1040        #[inline(always)]
1041        fn inline_align(_context: fidl::encoding::Context) -> usize {
1042            8
1043        }
1044
1045        #[inline(always)]
1046        fn inline_size(_context: fidl::encoding::Context) -> usize {
1047            48
1048        }
1049    }
1050
1051    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProcessInfo, D>
1052        for &ProcessInfo
1053    {
1054        #[inline]
1055        unsafe fn encode(
1056            self,
1057            encoder: &mut fidl::encoding::Encoder<'_, D>,
1058            offset: usize,
1059            _depth: fidl::encoding::Depth,
1060        ) -> fidl::Result<()> {
1061            encoder.debug_check_bounds::<ProcessInfo>(offset);
1062            fidl::encoding::Encode::<ProcessInfo, D>::encode(
1064                (
1065                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.process),
1066                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.moniker),
1067                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.thread),
1068                    <ThreadDetails as fidl::encoding::ValueTypeMarker>::borrow(&self.details),
1069                ),
1070                encoder, offset, _depth
1071            )
1072        }
1073    }
1074    unsafe impl<
1075        D: fidl::encoding::ResourceDialect,
1076        T0: fidl::encoding::Encode<u64, D>,
1077        T1: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1078        T2: fidl::encoding::Encode<u64, D>,
1079        T3: fidl::encoding::Encode<ThreadDetails, D>,
1080    > fidl::encoding::Encode<ProcessInfo, D> for (T0, T1, T2, T3)
1081    {
1082        #[inline]
1083        unsafe fn encode(
1084            self,
1085            encoder: &mut fidl::encoding::Encoder<'_, D>,
1086            offset: usize,
1087            depth: fidl::encoding::Depth,
1088        ) -> fidl::Result<()> {
1089            encoder.debug_check_bounds::<ProcessInfo>(offset);
1090            self.0.encode(encoder, offset + 0, depth)?;
1094            self.1.encode(encoder, offset + 8, depth)?;
1095            self.2.encode(encoder, offset + 24, depth)?;
1096            self.3.encode(encoder, offset + 32, depth)?;
1097            Ok(())
1098        }
1099    }
1100
1101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessInfo {
1102        #[inline(always)]
1103        fn new_empty() -> Self {
1104            Self {
1105                process: fidl::new_empty!(u64, D),
1106                moniker: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1107                thread: fidl::new_empty!(u64, D),
1108                details: fidl::new_empty!(ThreadDetails, D),
1109            }
1110        }
1111
1112        #[inline]
1113        unsafe fn decode(
1114            &mut self,
1115            decoder: &mut fidl::encoding::Decoder<'_, D>,
1116            offset: usize,
1117            _depth: fidl::encoding::Depth,
1118        ) -> fidl::Result<()> {
1119            decoder.debug_check_bounds::<Self>(offset);
1120            fidl::decode!(u64, D, &mut self.process, decoder, offset + 0, _depth)?;
1122            fidl::decode!(
1123                fidl::encoding::BoundedString<4096>,
1124                D,
1125                &mut self.moniker,
1126                decoder,
1127                offset + 8,
1128                _depth
1129            )?;
1130            fidl::decode!(u64, D, &mut self.thread, decoder, offset + 24, _depth)?;
1131            fidl::decode!(ThreadDetails, D, &mut self.details, decoder, offset + 32, _depth)?;
1132            Ok(())
1133        }
1134    }
1135
1136    impl fidl::encoding::ValueTypeMarker for ProcessInfoIteratorGetNextResponse {
1137        type Borrowed<'a> = &'a Self;
1138        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1139            value
1140        }
1141    }
1142
1143    unsafe impl fidl::encoding::TypeMarker for ProcessInfoIteratorGetNextResponse {
1144        type Owned = Self;
1145
1146        #[inline(always)]
1147        fn inline_align(_context: fidl::encoding::Context) -> usize {
1148            8
1149        }
1150
1151        #[inline(always)]
1152        fn inline_size(_context: fidl::encoding::Context) -> usize {
1153            16
1154        }
1155    }
1156
1157    unsafe impl<D: fidl::encoding::ResourceDialect>
1158        fidl::encoding::Encode<ProcessInfoIteratorGetNextResponse, D>
1159        for &ProcessInfoIteratorGetNextResponse
1160    {
1161        #[inline]
1162        unsafe fn encode(
1163            self,
1164            encoder: &mut fidl::encoding::Encoder<'_, D>,
1165            offset: usize,
1166            _depth: fidl::encoding::Depth,
1167        ) -> fidl::Result<()> {
1168            encoder.debug_check_bounds::<ProcessInfoIteratorGetNextResponse>(offset);
1169            fidl::encoding::Encode::<ProcessInfoIteratorGetNextResponse, D>::encode(
1171                (
1172                    <fidl::encoding::UnboundedVector<ProcessInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.info),
1173                ),
1174                encoder, offset, _depth
1175            )
1176        }
1177    }
1178    unsafe impl<
1179        D: fidl::encoding::ResourceDialect,
1180        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<ProcessInfo>, D>,
1181    > fidl::encoding::Encode<ProcessInfoIteratorGetNextResponse, D> for (T0,)
1182    {
1183        #[inline]
1184        unsafe fn encode(
1185            self,
1186            encoder: &mut fidl::encoding::Encoder<'_, D>,
1187            offset: usize,
1188            depth: fidl::encoding::Depth,
1189        ) -> fidl::Result<()> {
1190            encoder.debug_check_bounds::<ProcessInfoIteratorGetNextResponse>(offset);
1191            self.0.encode(encoder, offset + 0, depth)?;
1195            Ok(())
1196        }
1197    }
1198
1199    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1200        for ProcessInfoIteratorGetNextResponse
1201    {
1202        #[inline(always)]
1203        fn new_empty() -> Self {
1204            Self { info: fidl::new_empty!(fidl::encoding::UnboundedVector<ProcessInfo>, D) }
1205        }
1206
1207        #[inline]
1208        unsafe fn decode(
1209            &mut self,
1210            decoder: &mut fidl::encoding::Decoder<'_, D>,
1211            offset: usize,
1212            _depth: fidl::encoding::Depth,
1213        ) -> fidl::Result<()> {
1214            decoder.debug_check_bounds::<Self>(offset);
1215            fidl::decode!(
1217                fidl::encoding::UnboundedVector<ProcessInfo>,
1218                D,
1219                &mut self.info,
1220                decoder,
1221                offset + 0,
1222                _depth
1223            )?;
1224            Ok(())
1225        }
1226    }
1227
1228    impl DebugAgentOnFatalExceptionRequest {
1229        #[inline(always)]
1230        fn max_ordinal_present(&self) -> u64 {
1231            if let Some(_) = self.backtrace {
1232                return 2;
1233            }
1234            if let Some(_) = self.thread {
1235                return 1;
1236            }
1237            0
1238        }
1239    }
1240
1241    impl fidl::encoding::ValueTypeMarker for DebugAgentOnFatalExceptionRequest {
1242        type Borrowed<'a> = &'a Self;
1243        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1244            value
1245        }
1246    }
1247
1248    unsafe impl fidl::encoding::TypeMarker for DebugAgentOnFatalExceptionRequest {
1249        type Owned = Self;
1250
1251        #[inline(always)]
1252        fn inline_align(_context: fidl::encoding::Context) -> usize {
1253            8
1254        }
1255
1256        #[inline(always)]
1257        fn inline_size(_context: fidl::encoding::Context) -> usize {
1258            16
1259        }
1260    }
1261
1262    unsafe impl<D: fidl::encoding::ResourceDialect>
1263        fidl::encoding::Encode<DebugAgentOnFatalExceptionRequest, D>
1264        for &DebugAgentOnFatalExceptionRequest
1265    {
1266        unsafe fn encode(
1267            self,
1268            encoder: &mut fidl::encoding::Encoder<'_, D>,
1269            offset: usize,
1270            mut depth: fidl::encoding::Depth,
1271        ) -> fidl::Result<()> {
1272            encoder.debug_check_bounds::<DebugAgentOnFatalExceptionRequest>(offset);
1273            let max_ordinal: u64 = self.max_ordinal_present();
1275            encoder.write_num(max_ordinal, offset);
1276            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1277            if max_ordinal == 0 {
1279                return Ok(());
1280            }
1281            depth.increment()?;
1282            let envelope_size = 8;
1283            let bytes_len = max_ordinal as usize * envelope_size;
1284            #[allow(unused_variables)]
1285            let offset = encoder.out_of_line_offset(bytes_len);
1286            let mut _prev_end_offset: usize = 0;
1287            if 1 > max_ordinal {
1288                return Ok(());
1289            }
1290
1291            let cur_offset: usize = (1 - 1) * envelope_size;
1294
1295            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1297
1298            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1303                self.thread.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1304                encoder,
1305                offset + cur_offset,
1306                depth,
1307            )?;
1308
1309            _prev_end_offset = cur_offset + envelope_size;
1310            if 2 > max_ordinal {
1311                return Ok(());
1312            }
1313
1314            let cur_offset: usize = (2 - 1) * envelope_size;
1317
1318            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1320
1321            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1326                self.backtrace.as_ref().map(
1327                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1328                ),
1329                encoder,
1330                offset + cur_offset,
1331                depth,
1332            )?;
1333
1334            _prev_end_offset = cur_offset + envelope_size;
1335
1336            Ok(())
1337        }
1338    }
1339
1340    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1341        for DebugAgentOnFatalExceptionRequest
1342    {
1343        #[inline(always)]
1344        fn new_empty() -> Self {
1345            Self::default()
1346        }
1347
1348        unsafe fn decode(
1349            &mut self,
1350            decoder: &mut fidl::encoding::Decoder<'_, D>,
1351            offset: usize,
1352            mut depth: fidl::encoding::Depth,
1353        ) -> fidl::Result<()> {
1354            decoder.debug_check_bounds::<Self>(offset);
1355            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1356                None => return Err(fidl::Error::NotNullable),
1357                Some(len) => len,
1358            };
1359            if len == 0 {
1361                return Ok(());
1362            };
1363            depth.increment()?;
1364            let envelope_size = 8;
1365            let bytes_len = len * envelope_size;
1366            let offset = decoder.out_of_line_offset(bytes_len)?;
1367            let mut _next_ordinal_to_read = 0;
1369            let mut next_offset = offset;
1370            let end_offset = offset + bytes_len;
1371            _next_ordinal_to_read += 1;
1372            if next_offset >= end_offset {
1373                return Ok(());
1374            }
1375
1376            while _next_ordinal_to_read < 1 {
1378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1379                _next_ordinal_to_read += 1;
1380                next_offset += envelope_size;
1381            }
1382
1383            let next_out_of_line = decoder.next_out_of_line();
1384            let handles_before = decoder.remaining_handles();
1385            if let Some((inlined, num_bytes, num_handles)) =
1386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1387            {
1388                let member_inline_size =
1389                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1390                if inlined != (member_inline_size <= 4) {
1391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1392                }
1393                let inner_offset;
1394                let mut inner_depth = depth.clone();
1395                if inlined {
1396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1397                    inner_offset = next_offset;
1398                } else {
1399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1400                    inner_depth.increment()?;
1401                }
1402                let val_ref = self.thread.get_or_insert_with(|| fidl::new_empty!(u64, D));
1403                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1404                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1405                {
1406                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1407                }
1408                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1409                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1410                }
1411            }
1412
1413            next_offset += envelope_size;
1414            _next_ordinal_to_read += 1;
1415            if next_offset >= end_offset {
1416                return Ok(());
1417            }
1418
1419            while _next_ordinal_to_read < 2 {
1421                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1422                _next_ordinal_to_read += 1;
1423                next_offset += envelope_size;
1424            }
1425
1426            let next_out_of_line = decoder.next_out_of_line();
1427            let handles_before = decoder.remaining_handles();
1428            if let Some((inlined, num_bytes, num_handles)) =
1429                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1430            {
1431                let member_inline_size =
1432                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1433                        decoder.context,
1434                    );
1435                if inlined != (member_inline_size <= 4) {
1436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1437                }
1438                let inner_offset;
1439                let mut inner_depth = depth.clone();
1440                if inlined {
1441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1442                    inner_offset = next_offset;
1443                } else {
1444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1445                    inner_depth.increment()?;
1446                }
1447                let val_ref = self
1448                    .backtrace
1449                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1450                fidl::decode!(
1451                    fidl::encoding::UnboundedString,
1452                    D,
1453                    val_ref,
1454                    decoder,
1455                    inner_offset,
1456                    inner_depth
1457                )?;
1458                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1459                {
1460                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1461                }
1462                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1463                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1464                }
1465            }
1466
1467            next_offset += envelope_size;
1468
1469            while next_offset < end_offset {
1471                _next_ordinal_to_read += 1;
1472                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1473                next_offset += envelope_size;
1474            }
1475
1476            Ok(())
1477        }
1478    }
1479
1480    impl FilterOptions {
1481        #[inline(always)]
1482        fn max_ordinal_present(&self) -> u64 {
1483            if let Some(_) = self.job_only {
1484                return 2;
1485            }
1486            if let Some(_) = self.recursive {
1487                return 1;
1488            }
1489            0
1490        }
1491    }
1492
1493    impl fidl::encoding::ValueTypeMarker for FilterOptions {
1494        type Borrowed<'a> = &'a Self;
1495        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1496            value
1497        }
1498    }
1499
1500    unsafe impl fidl::encoding::TypeMarker for FilterOptions {
1501        type Owned = Self;
1502
1503        #[inline(always)]
1504        fn inline_align(_context: fidl::encoding::Context) -> usize {
1505            8
1506        }
1507
1508        #[inline(always)]
1509        fn inline_size(_context: fidl::encoding::Context) -> usize {
1510            16
1511        }
1512    }
1513
1514    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FilterOptions, D>
1515        for &FilterOptions
1516    {
1517        unsafe fn encode(
1518            self,
1519            encoder: &mut fidl::encoding::Encoder<'_, D>,
1520            offset: usize,
1521            mut depth: fidl::encoding::Depth,
1522        ) -> fidl::Result<()> {
1523            encoder.debug_check_bounds::<FilterOptions>(offset);
1524            let max_ordinal: u64 = self.max_ordinal_present();
1526            encoder.write_num(max_ordinal, offset);
1527            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1528            if max_ordinal == 0 {
1530                return Ok(());
1531            }
1532            depth.increment()?;
1533            let envelope_size = 8;
1534            let bytes_len = max_ordinal as usize * envelope_size;
1535            #[allow(unused_variables)]
1536            let offset = encoder.out_of_line_offset(bytes_len);
1537            let mut _prev_end_offset: usize = 0;
1538            if 1 > max_ordinal {
1539                return Ok(());
1540            }
1541
1542            let cur_offset: usize = (1 - 1) * envelope_size;
1545
1546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1548
1549            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1554                self.recursive.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1555                encoder,
1556                offset + cur_offset,
1557                depth,
1558            )?;
1559
1560            _prev_end_offset = cur_offset + envelope_size;
1561            if 2 > max_ordinal {
1562                return Ok(());
1563            }
1564
1565            let cur_offset: usize = (2 - 1) * envelope_size;
1568
1569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1571
1572            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1577                self.job_only.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1578                encoder,
1579                offset + cur_offset,
1580                depth,
1581            )?;
1582
1583            _prev_end_offset = cur_offset + envelope_size;
1584
1585            Ok(())
1586        }
1587    }
1588
1589    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FilterOptions {
1590        #[inline(always)]
1591        fn new_empty() -> Self {
1592            Self::default()
1593        }
1594
1595        unsafe fn decode(
1596            &mut self,
1597            decoder: &mut fidl::encoding::Decoder<'_, D>,
1598            offset: usize,
1599            mut depth: fidl::encoding::Depth,
1600        ) -> fidl::Result<()> {
1601            decoder.debug_check_bounds::<Self>(offset);
1602            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1603                None => return Err(fidl::Error::NotNullable),
1604                Some(len) => len,
1605            };
1606            if len == 0 {
1608                return Ok(());
1609            };
1610            depth.increment()?;
1611            let envelope_size = 8;
1612            let bytes_len = len * envelope_size;
1613            let offset = decoder.out_of_line_offset(bytes_len)?;
1614            let mut _next_ordinal_to_read = 0;
1616            let mut next_offset = offset;
1617            let end_offset = offset + bytes_len;
1618            _next_ordinal_to_read += 1;
1619            if next_offset >= end_offset {
1620                return Ok(());
1621            }
1622
1623            while _next_ordinal_to_read < 1 {
1625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1626                _next_ordinal_to_read += 1;
1627                next_offset += envelope_size;
1628            }
1629
1630            let next_out_of_line = decoder.next_out_of_line();
1631            let handles_before = decoder.remaining_handles();
1632            if let Some((inlined, num_bytes, num_handles)) =
1633                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1634            {
1635                let member_inline_size =
1636                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1637                if inlined != (member_inline_size <= 4) {
1638                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1639                }
1640                let inner_offset;
1641                let mut inner_depth = depth.clone();
1642                if inlined {
1643                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1644                    inner_offset = next_offset;
1645                } else {
1646                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1647                    inner_depth.increment()?;
1648                }
1649                let val_ref = self.recursive.get_or_insert_with(|| fidl::new_empty!(bool, D));
1650                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1651                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1652                {
1653                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1654                }
1655                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1656                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1657                }
1658            }
1659
1660            next_offset += envelope_size;
1661            _next_ordinal_to_read += 1;
1662            if next_offset >= end_offset {
1663                return Ok(());
1664            }
1665
1666            while _next_ordinal_to_read < 2 {
1668                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1669                _next_ordinal_to_read += 1;
1670                next_offset += envelope_size;
1671            }
1672
1673            let next_out_of_line = decoder.next_out_of_line();
1674            let handles_before = decoder.remaining_handles();
1675            if let Some((inlined, num_bytes, num_handles)) =
1676                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1677            {
1678                let member_inline_size =
1679                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1680                if inlined != (member_inline_size <= 4) {
1681                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1682                }
1683                let inner_offset;
1684                let mut inner_depth = depth.clone();
1685                if inlined {
1686                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1687                    inner_offset = next_offset;
1688                } else {
1689                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1690                    inner_depth.increment()?;
1691                }
1692                let val_ref = self.job_only.get_or_insert_with(|| fidl::new_empty!(bool, D));
1693                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1694                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1695                {
1696                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1697                }
1698                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1699                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1700                }
1701            }
1702
1703            next_offset += envelope_size;
1704
1705            while next_offset < end_offset {
1707                _next_ordinal_to_read += 1;
1708                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1709                next_offset += envelope_size;
1710            }
1711
1712            Ok(())
1713        }
1714    }
1715
1716    impl GetProcessInfoOptions {
1717        #[inline(always)]
1718        fn max_ordinal_present(&self) -> u64 {
1719            if let Some(_) = self.interest {
1720                return 2;
1721            }
1722            if let Some(_) = self.filter {
1723                return 1;
1724            }
1725            0
1726        }
1727    }
1728
1729    impl fidl::encoding::ValueTypeMarker for GetProcessInfoOptions {
1730        type Borrowed<'a> = &'a Self;
1731        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1732            value
1733        }
1734    }
1735
1736    unsafe impl fidl::encoding::TypeMarker for GetProcessInfoOptions {
1737        type Owned = Self;
1738
1739        #[inline(always)]
1740        fn inline_align(_context: fidl::encoding::Context) -> usize {
1741            8
1742        }
1743
1744        #[inline(always)]
1745        fn inline_size(_context: fidl::encoding::Context) -> usize {
1746            16
1747        }
1748    }
1749
1750    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GetProcessInfoOptions, D>
1751        for &GetProcessInfoOptions
1752    {
1753        unsafe fn encode(
1754            self,
1755            encoder: &mut fidl::encoding::Encoder<'_, D>,
1756            offset: usize,
1757            mut depth: fidl::encoding::Depth,
1758        ) -> fidl::Result<()> {
1759            encoder.debug_check_bounds::<GetProcessInfoOptions>(offset);
1760            let max_ordinal: u64 = self.max_ordinal_present();
1762            encoder.write_num(max_ordinal, offset);
1763            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1764            if max_ordinal == 0 {
1766                return Ok(());
1767            }
1768            depth.increment()?;
1769            let envelope_size = 8;
1770            let bytes_len = max_ordinal as usize * envelope_size;
1771            #[allow(unused_variables)]
1772            let offset = encoder.out_of_line_offset(bytes_len);
1773            let mut _prev_end_offset: usize = 0;
1774            if 1 > max_ordinal {
1775                return Ok(());
1776            }
1777
1778            let cur_offset: usize = (1 - 1) * envelope_size;
1781
1782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1784
1785            fidl::encoding::encode_in_envelope_optional::<Filter, D>(
1790                self.filter.as_ref().map(<Filter as fidl::encoding::ValueTypeMarker>::borrow),
1791                encoder,
1792                offset + cur_offset,
1793                depth,
1794            )?;
1795
1796            _prev_end_offset = cur_offset + envelope_size;
1797            if 2 > max_ordinal {
1798                return Ok(());
1799            }
1800
1801            let cur_offset: usize = (2 - 1) * envelope_size;
1804
1805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1807
1808            fidl::encoding::encode_in_envelope_optional::<ThreadDetailsInterest, D>(
1813                self.interest
1814                    .as_ref()
1815                    .map(<ThreadDetailsInterest as fidl::encoding::ValueTypeMarker>::borrow),
1816                encoder,
1817                offset + cur_offset,
1818                depth,
1819            )?;
1820
1821            _prev_end_offset = cur_offset + envelope_size;
1822
1823            Ok(())
1824        }
1825    }
1826
1827    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetProcessInfoOptions {
1828        #[inline(always)]
1829        fn new_empty() -> Self {
1830            Self::default()
1831        }
1832
1833        unsafe fn decode(
1834            &mut self,
1835            decoder: &mut fidl::encoding::Decoder<'_, D>,
1836            offset: usize,
1837            mut depth: fidl::encoding::Depth,
1838        ) -> fidl::Result<()> {
1839            decoder.debug_check_bounds::<Self>(offset);
1840            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1841                None => return Err(fidl::Error::NotNullable),
1842                Some(len) => len,
1843            };
1844            if len == 0 {
1846                return Ok(());
1847            };
1848            depth.increment()?;
1849            let envelope_size = 8;
1850            let bytes_len = len * envelope_size;
1851            let offset = decoder.out_of_line_offset(bytes_len)?;
1852            let mut _next_ordinal_to_read = 0;
1854            let mut next_offset = offset;
1855            let end_offset = offset + bytes_len;
1856            _next_ordinal_to_read += 1;
1857            if next_offset >= end_offset {
1858                return Ok(());
1859            }
1860
1861            while _next_ordinal_to_read < 1 {
1863                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1864                _next_ordinal_to_read += 1;
1865                next_offset += envelope_size;
1866            }
1867
1868            let next_out_of_line = decoder.next_out_of_line();
1869            let handles_before = decoder.remaining_handles();
1870            if let Some((inlined, num_bytes, num_handles)) =
1871                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1872            {
1873                let member_inline_size =
1874                    <Filter as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1875                if inlined != (member_inline_size <= 4) {
1876                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1877                }
1878                let inner_offset;
1879                let mut inner_depth = depth.clone();
1880                if inlined {
1881                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1882                    inner_offset = next_offset;
1883                } else {
1884                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1885                    inner_depth.increment()?;
1886                }
1887                let val_ref = self.filter.get_or_insert_with(|| fidl::new_empty!(Filter, D));
1888                fidl::decode!(Filter, D, val_ref, decoder, inner_offset, inner_depth)?;
1889                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1890                {
1891                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1892                }
1893                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1894                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1895                }
1896            }
1897
1898            next_offset += envelope_size;
1899            _next_ordinal_to_read += 1;
1900            if next_offset >= end_offset {
1901                return Ok(());
1902            }
1903
1904            while _next_ordinal_to_read < 2 {
1906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1907                _next_ordinal_to_read += 1;
1908                next_offset += envelope_size;
1909            }
1910
1911            let next_out_of_line = decoder.next_out_of_line();
1912            let handles_before = decoder.remaining_handles();
1913            if let Some((inlined, num_bytes, num_handles)) =
1914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1915            {
1916                let member_inline_size =
1917                    <ThreadDetailsInterest as fidl::encoding::TypeMarker>::inline_size(
1918                        decoder.context,
1919                    );
1920                if inlined != (member_inline_size <= 4) {
1921                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1922                }
1923                let inner_offset;
1924                let mut inner_depth = depth.clone();
1925                if inlined {
1926                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1927                    inner_offset = next_offset;
1928                } else {
1929                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1930                    inner_depth.increment()?;
1931                }
1932                let val_ref =
1933                    self.interest.get_or_insert_with(|| fidl::new_empty!(ThreadDetailsInterest, D));
1934                fidl::decode!(
1935                    ThreadDetailsInterest,
1936                    D,
1937                    val_ref,
1938                    decoder,
1939                    inner_offset,
1940                    inner_depth
1941                )?;
1942                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1943                {
1944                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1945                }
1946                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1947                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1948                }
1949            }
1950
1951            next_offset += envelope_size;
1952
1953            while next_offset < end_offset {
1955                _next_ordinal_to_read += 1;
1956                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1957                next_offset += envelope_size;
1958            }
1959
1960            Ok(())
1961        }
1962    }
1963
1964    impl MinidumpOptions {
1965        #[inline(always)]
1966        fn max_ordinal_present(&self) -> u64 {
1967            if let Some(_) = self.filter {
1968                return 1;
1969            }
1970            0
1971        }
1972    }
1973
1974    impl fidl::encoding::ValueTypeMarker for MinidumpOptions {
1975        type Borrowed<'a> = &'a Self;
1976        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1977            value
1978        }
1979    }
1980
1981    unsafe impl fidl::encoding::TypeMarker for MinidumpOptions {
1982        type Owned = Self;
1983
1984        #[inline(always)]
1985        fn inline_align(_context: fidl::encoding::Context) -> usize {
1986            8
1987        }
1988
1989        #[inline(always)]
1990        fn inline_size(_context: fidl::encoding::Context) -> usize {
1991            16
1992        }
1993    }
1994
1995    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MinidumpOptions, D>
1996        for &MinidumpOptions
1997    {
1998        unsafe fn encode(
1999            self,
2000            encoder: &mut fidl::encoding::Encoder<'_, D>,
2001            offset: usize,
2002            mut depth: fidl::encoding::Depth,
2003        ) -> fidl::Result<()> {
2004            encoder.debug_check_bounds::<MinidumpOptions>(offset);
2005            let max_ordinal: u64 = self.max_ordinal_present();
2007            encoder.write_num(max_ordinal, offset);
2008            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2009            if max_ordinal == 0 {
2011                return Ok(());
2012            }
2013            depth.increment()?;
2014            let envelope_size = 8;
2015            let bytes_len = max_ordinal as usize * envelope_size;
2016            #[allow(unused_variables)]
2017            let offset = encoder.out_of_line_offset(bytes_len);
2018            let mut _prev_end_offset: usize = 0;
2019            if 1 > max_ordinal {
2020                return Ok(());
2021            }
2022
2023            let cur_offset: usize = (1 - 1) * envelope_size;
2026
2027            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2029
2030            fidl::encoding::encode_in_envelope_optional::<Filter, D>(
2035                self.filter.as_ref().map(<Filter as fidl::encoding::ValueTypeMarker>::borrow),
2036                encoder,
2037                offset + cur_offset,
2038                depth,
2039            )?;
2040
2041            _prev_end_offset = cur_offset + envelope_size;
2042
2043            Ok(())
2044        }
2045    }
2046
2047    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MinidumpOptions {
2048        #[inline(always)]
2049        fn new_empty() -> Self {
2050            Self::default()
2051        }
2052
2053        unsafe fn decode(
2054            &mut self,
2055            decoder: &mut fidl::encoding::Decoder<'_, D>,
2056            offset: usize,
2057            mut depth: fidl::encoding::Depth,
2058        ) -> fidl::Result<()> {
2059            decoder.debug_check_bounds::<Self>(offset);
2060            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2061                None => return Err(fidl::Error::NotNullable),
2062                Some(len) => len,
2063            };
2064            if len == 0 {
2066                return Ok(());
2067            };
2068            depth.increment()?;
2069            let envelope_size = 8;
2070            let bytes_len = len * envelope_size;
2071            let offset = decoder.out_of_line_offset(bytes_len)?;
2072            let mut _next_ordinal_to_read = 0;
2074            let mut next_offset = offset;
2075            let end_offset = offset + bytes_len;
2076            _next_ordinal_to_read += 1;
2077            if next_offset >= end_offset {
2078                return Ok(());
2079            }
2080
2081            while _next_ordinal_to_read < 1 {
2083                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2084                _next_ordinal_to_read += 1;
2085                next_offset += envelope_size;
2086            }
2087
2088            let next_out_of_line = decoder.next_out_of_line();
2089            let handles_before = decoder.remaining_handles();
2090            if let Some((inlined, num_bytes, num_handles)) =
2091                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2092            {
2093                let member_inline_size =
2094                    <Filter as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2095                if inlined != (member_inline_size <= 4) {
2096                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2097                }
2098                let inner_offset;
2099                let mut inner_depth = depth.clone();
2100                if inlined {
2101                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2102                    inner_offset = next_offset;
2103                } else {
2104                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2105                    inner_depth.increment()?;
2106                }
2107                let val_ref = self.filter.get_or_insert_with(|| fidl::new_empty!(Filter, D));
2108                fidl::decode!(Filter, D, val_ref, decoder, inner_offset, inner_depth)?;
2109                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2110                {
2111                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2112                }
2113                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2114                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2115                }
2116            }
2117
2118            next_offset += envelope_size;
2119
2120            while next_offset < end_offset {
2122                _next_ordinal_to_read += 1;
2123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2124                next_offset += envelope_size;
2125            }
2126
2127            Ok(())
2128        }
2129    }
2130
2131    impl ThreadDetails {
2132        #[inline(always)]
2133        fn max_ordinal_present(&self) -> u64 {
2134            if let Some(_) = self.backtrace {
2135                return 1;
2136            }
2137            0
2138        }
2139    }
2140
2141    impl fidl::encoding::ValueTypeMarker for ThreadDetails {
2142        type Borrowed<'a> = &'a Self;
2143        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2144            value
2145        }
2146    }
2147
2148    unsafe impl fidl::encoding::TypeMarker for ThreadDetails {
2149        type Owned = Self;
2150
2151        #[inline(always)]
2152        fn inline_align(_context: fidl::encoding::Context) -> usize {
2153            8
2154        }
2155
2156        #[inline(always)]
2157        fn inline_size(_context: fidl::encoding::Context) -> usize {
2158            16
2159        }
2160    }
2161
2162    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadDetails, D>
2163        for &ThreadDetails
2164    {
2165        unsafe fn encode(
2166            self,
2167            encoder: &mut fidl::encoding::Encoder<'_, D>,
2168            offset: usize,
2169            mut depth: fidl::encoding::Depth,
2170        ) -> fidl::Result<()> {
2171            encoder.debug_check_bounds::<ThreadDetails>(offset);
2172            let max_ordinal: u64 = self.max_ordinal_present();
2174            encoder.write_num(max_ordinal, offset);
2175            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2176            if max_ordinal == 0 {
2178                return Ok(());
2179            }
2180            depth.increment()?;
2181            let envelope_size = 8;
2182            let bytes_len = max_ordinal as usize * envelope_size;
2183            #[allow(unused_variables)]
2184            let offset = encoder.out_of_line_offset(bytes_len);
2185            let mut _prev_end_offset: usize = 0;
2186            if 1 > max_ordinal {
2187                return Ok(());
2188            }
2189
2190            let cur_offset: usize = (1 - 1) * envelope_size;
2193
2194            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2196
2197            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2202                self.backtrace.as_ref().map(
2203                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2204                ),
2205                encoder,
2206                offset + cur_offset,
2207                depth,
2208            )?;
2209
2210            _prev_end_offset = cur_offset + envelope_size;
2211
2212            Ok(())
2213        }
2214    }
2215
2216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadDetails {
2217        #[inline(always)]
2218        fn new_empty() -> Self {
2219            Self::default()
2220        }
2221
2222        unsafe fn decode(
2223            &mut self,
2224            decoder: &mut fidl::encoding::Decoder<'_, D>,
2225            offset: usize,
2226            mut depth: fidl::encoding::Depth,
2227        ) -> fidl::Result<()> {
2228            decoder.debug_check_bounds::<Self>(offset);
2229            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2230                None => return Err(fidl::Error::NotNullable),
2231                Some(len) => len,
2232            };
2233            if len == 0 {
2235                return Ok(());
2236            };
2237            depth.increment()?;
2238            let envelope_size = 8;
2239            let bytes_len = len * envelope_size;
2240            let offset = decoder.out_of_line_offset(bytes_len)?;
2241            let mut _next_ordinal_to_read = 0;
2243            let mut next_offset = offset;
2244            let end_offset = offset + bytes_len;
2245            _next_ordinal_to_read += 1;
2246            if next_offset >= end_offset {
2247                return Ok(());
2248            }
2249
2250            while _next_ordinal_to_read < 1 {
2252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2253                _next_ordinal_to_read += 1;
2254                next_offset += envelope_size;
2255            }
2256
2257            let next_out_of_line = decoder.next_out_of_line();
2258            let handles_before = decoder.remaining_handles();
2259            if let Some((inlined, num_bytes, num_handles)) =
2260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2261            {
2262                let member_inline_size =
2263                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2264                        decoder.context,
2265                    );
2266                if inlined != (member_inline_size <= 4) {
2267                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2268                }
2269                let inner_offset;
2270                let mut inner_depth = depth.clone();
2271                if inlined {
2272                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2273                    inner_offset = next_offset;
2274                } else {
2275                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2276                    inner_depth.increment()?;
2277                }
2278                let val_ref = self
2279                    .backtrace
2280                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2281                fidl::decode!(
2282                    fidl::encoding::UnboundedString,
2283                    D,
2284                    val_ref,
2285                    decoder,
2286                    inner_offset,
2287                    inner_depth
2288                )?;
2289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2290                {
2291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2292                }
2293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2295                }
2296            }
2297
2298            next_offset += envelope_size;
2299
2300            while next_offset < end_offset {
2302                _next_ordinal_to_read += 1;
2303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2304                next_offset += envelope_size;
2305            }
2306
2307            Ok(())
2308        }
2309    }
2310
2311    impl ThreadDetailsInterest {
2312        #[inline(always)]
2313        fn max_ordinal_present(&self) -> u64 {
2314            if let Some(_) = self.backtrace {
2315                return 1;
2316            }
2317            0
2318        }
2319    }
2320
2321    impl fidl::encoding::ValueTypeMarker for ThreadDetailsInterest {
2322        type Borrowed<'a> = &'a Self;
2323        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2324            value
2325        }
2326    }
2327
2328    unsafe impl fidl::encoding::TypeMarker for ThreadDetailsInterest {
2329        type Owned = Self;
2330
2331        #[inline(always)]
2332        fn inline_align(_context: fidl::encoding::Context) -> usize {
2333            8
2334        }
2335
2336        #[inline(always)]
2337        fn inline_size(_context: fidl::encoding::Context) -> usize {
2338            16
2339        }
2340    }
2341
2342    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadDetailsInterest, D>
2343        for &ThreadDetailsInterest
2344    {
2345        unsafe fn encode(
2346            self,
2347            encoder: &mut fidl::encoding::Encoder<'_, D>,
2348            offset: usize,
2349            mut depth: fidl::encoding::Depth,
2350        ) -> fidl::Result<()> {
2351            encoder.debug_check_bounds::<ThreadDetailsInterest>(offset);
2352            let max_ordinal: u64 = self.max_ordinal_present();
2354            encoder.write_num(max_ordinal, offset);
2355            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2356            if max_ordinal == 0 {
2358                return Ok(());
2359            }
2360            depth.increment()?;
2361            let envelope_size = 8;
2362            let bytes_len = max_ordinal as usize * envelope_size;
2363            #[allow(unused_variables)]
2364            let offset = encoder.out_of_line_offset(bytes_len);
2365            let mut _prev_end_offset: usize = 0;
2366            if 1 > max_ordinal {
2367                return Ok(());
2368            }
2369
2370            let cur_offset: usize = (1 - 1) * envelope_size;
2373
2374            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2376
2377            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2382                self.backtrace.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2383                encoder,
2384                offset + cur_offset,
2385                depth,
2386            )?;
2387
2388            _prev_end_offset = cur_offset + envelope_size;
2389
2390            Ok(())
2391        }
2392    }
2393
2394    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadDetailsInterest {
2395        #[inline(always)]
2396        fn new_empty() -> Self {
2397            Self::default()
2398        }
2399
2400        unsafe fn decode(
2401            &mut self,
2402            decoder: &mut fidl::encoding::Decoder<'_, D>,
2403            offset: usize,
2404            mut depth: fidl::encoding::Depth,
2405        ) -> fidl::Result<()> {
2406            decoder.debug_check_bounds::<Self>(offset);
2407            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2408                None => return Err(fidl::Error::NotNullable),
2409                Some(len) => len,
2410            };
2411            if len == 0 {
2413                return Ok(());
2414            };
2415            depth.increment()?;
2416            let envelope_size = 8;
2417            let bytes_len = len * envelope_size;
2418            let offset = decoder.out_of_line_offset(bytes_len)?;
2419            let mut _next_ordinal_to_read = 0;
2421            let mut next_offset = offset;
2422            let end_offset = offset + bytes_len;
2423            _next_ordinal_to_read += 1;
2424            if next_offset >= end_offset {
2425                return Ok(());
2426            }
2427
2428            while _next_ordinal_to_read < 1 {
2430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2431                _next_ordinal_to_read += 1;
2432                next_offset += envelope_size;
2433            }
2434
2435            let next_out_of_line = decoder.next_out_of_line();
2436            let handles_before = decoder.remaining_handles();
2437            if let Some((inlined, num_bytes, num_handles)) =
2438                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2439            {
2440                let member_inline_size =
2441                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2442                if inlined != (member_inline_size <= 4) {
2443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2444                }
2445                let inner_offset;
2446                let mut inner_depth = depth.clone();
2447                if inlined {
2448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2449                    inner_offset = next_offset;
2450                } else {
2451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2452                    inner_depth.increment()?;
2453                }
2454                let val_ref = self.backtrace.get_or_insert_with(|| fidl::new_empty!(bool, D));
2455                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2457                {
2458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2459                }
2460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2462                }
2463            }
2464
2465            next_offset += envelope_size;
2466
2467            while next_offset < end_offset {
2469                _next_ordinal_to_read += 1;
2470                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2471                next_offset += envelope_size;
2472            }
2473
2474            Ok(())
2475        }
2476    }
2477}