fidl_test_detect_factory/
fidl_test_detect_factory.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::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_test_detect_factory_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct RealmFactoryCreateRealmRequest {
16    pub options: RealmOptions,
17    pub realm_server: fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
18}
19
20impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
21    for RealmFactoryCreateRealmRequest
22{
23}
24
25#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
26pub struct RealmFactoryGetTriageDetectEventsResponse {
27    pub client_end: fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
28}
29
30impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
31    for RealmFactoryGetTriageDetectEventsResponse
32{
33}
34
35/// RealmOptions tells the RealmFactory protocol how to create the test realm.
36///
37/// Note that there is a limit of 64 handles in a single channel write.
38/// Keep in mind that when initializing these RealmOptions, 64 is the combined
39/// limit for all handles in the message.
40#[derive(Debug, Default, PartialEq)]
41pub struct RealmOptions {
42    /// The JSON configuration for the triage-detect component.
43    ///
44    /// Values in this config may override `enable_crash_reporting`.
45    /// This is exposed to allow the tests to see how the compnent behaves if e.g.
46    /// the config file is corrupted.
47    pub program_config: Option<fidl::Vmo>,
48    /// Triage config contents.
49    ///
50    /// Triage configs are JSON objects that tell the component which diagnostic data
51    /// to fetch and what to do in response to that data. The schema of this JSON
52    /// can be found at //src/diagnostics/lib/triage/src/config.rs.
53    pub triage_configs: Option<Vec<fidl::Vmo>>,
54    /// A list of a canned JSON responses to send when triage-detect fetches inspect data.
55    ///
56    /// The data are sent in the order they appear in this vector.
57    pub inspect_data: Option<Vec<fidl::Vmo>>,
58    #[doc(hidden)]
59    pub __source_breaking: fidl::marker::SourceBreaking,
60}
61
62impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for RealmOptions {}
63
64#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
65pub struct RealmFactoryMarker;
66
67impl fidl::endpoints::ProtocolMarker for RealmFactoryMarker {
68    type Proxy = RealmFactoryProxy;
69    type RequestStream = RealmFactoryRequestStream;
70    #[cfg(target_os = "fuchsia")]
71    type SynchronousProxy = RealmFactorySynchronousProxy;
72
73    const DEBUG_NAME: &'static str = "test.detect.factory.RealmFactory";
74}
75impl fidl::endpoints::DiscoverableProtocolMarker for RealmFactoryMarker {}
76pub type RealmFactoryCreateRealmResult = Result<(), fidl_fuchsia_testing_harness::OperationError>;
77
78pub trait RealmFactoryProxyInterface: Send + Sync {
79    type CreateRealmResponseFut: std::future::Future<Output = Result<RealmFactoryCreateRealmResult, fidl::Error>>
80        + Send;
81    fn r#create_realm(
82        &self,
83        options: RealmOptions,
84        realm_server: fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
85    ) -> Self::CreateRealmResponseFut;
86    type GetTriageDetectEventsResponseFut: std::future::Future<
87            Output = Result<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>, fidl::Error>,
88        > + Send;
89    fn r#get_triage_detect_events(&self) -> Self::GetTriageDetectEventsResponseFut;
90}
91#[derive(Debug)]
92#[cfg(target_os = "fuchsia")]
93pub struct RealmFactorySynchronousProxy {
94    client: fidl::client::sync::Client,
95}
96
97#[cfg(target_os = "fuchsia")]
98impl fidl::endpoints::SynchronousProxy for RealmFactorySynchronousProxy {
99    type Proxy = RealmFactoryProxy;
100    type Protocol = RealmFactoryMarker;
101
102    fn from_channel(inner: fidl::Channel) -> Self {
103        Self::new(inner)
104    }
105
106    fn into_channel(self) -> fidl::Channel {
107        self.client.into_channel()
108    }
109
110    fn as_channel(&self) -> &fidl::Channel {
111        self.client.as_channel()
112    }
113}
114
115#[cfg(target_os = "fuchsia")]
116impl RealmFactorySynchronousProxy {
117    pub fn new(channel: fidl::Channel) -> Self {
118        let protocol_name = <RealmFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
119        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
120    }
121
122    pub fn into_channel(self) -> fidl::Channel {
123        self.client.into_channel()
124    }
125
126    /// Waits until an event arrives and returns it. It is safe for other
127    /// threads to make concurrent requests while waiting for an event.
128    pub fn wait_for_event(
129        &self,
130        deadline: zx::MonotonicInstant,
131    ) -> Result<RealmFactoryEvent, fidl::Error> {
132        RealmFactoryEvent::decode(self.client.wait_for_event(deadline)?)
133    }
134
135    /// Specifies the options to use when creating the realm.
136    ///
137    /// Returns OperationError.INVALID if called more than once.
138    pub fn r#create_realm(
139        &self,
140        mut options: RealmOptions,
141        mut realm_server: fidl::endpoints::ServerEnd<
142            fidl_fuchsia_testing_harness::RealmProxy_Marker,
143        >,
144        ___deadline: zx::MonotonicInstant,
145    ) -> Result<RealmFactoryCreateRealmResult, fidl::Error> {
146        let _response = self
147            .client
148            .send_query::<RealmFactoryCreateRealmRequest, fidl::encoding::FlexibleResultType<
149                fidl::encoding::EmptyStruct,
150                fidl_fuchsia_testing_harness::OperationError,
151            >>(
152                (&mut options, realm_server),
153                0x12d4b5c7c9d9801a,
154                fidl::encoding::DynamicFlags::FLEXIBLE,
155                ___deadline,
156            )?
157            .into_result::<RealmFactoryMarker>("create_realm")?;
158        Ok(_response.map(|x| x))
159    }
160
161    /// Returns a client end to the `Realm` protocol.
162    ///
163    /// The test can use this client end to listen for events.
164    /// It is a fatal error to call this more than once or before the test realm
165    /// is started.
166    pub fn r#get_triage_detect_events(
167        &self,
168        ___deadline: zx::MonotonicInstant,
169    ) -> Result<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>, fidl::Error> {
170        let _response = self
171            .client
172            .send_query::<fidl::encoding::EmptyPayload, RealmFactoryGetTriageDetectEventsResponse>(
173                (),
174                0x7be53256487c35fd,
175                fidl::encoding::DynamicFlags::empty(),
176                ___deadline,
177            )?;
178        Ok(_response.client_end)
179    }
180}
181
182#[derive(Debug, Clone)]
183pub struct RealmFactoryProxy {
184    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
185}
186
187impl fidl::endpoints::Proxy for RealmFactoryProxy {
188    type Protocol = RealmFactoryMarker;
189
190    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
191        Self::new(inner)
192    }
193
194    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
195        self.client.into_channel().map_err(|client| Self { client })
196    }
197
198    fn as_channel(&self) -> &::fidl::AsyncChannel {
199        self.client.as_channel()
200    }
201}
202
203impl RealmFactoryProxy {
204    /// Create a new Proxy for test.detect.factory/RealmFactory.
205    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
206        let protocol_name = <RealmFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
207        Self { client: fidl::client::Client::new(channel, protocol_name) }
208    }
209
210    /// Get a Stream of events from the remote end of the protocol.
211    ///
212    /// # Panics
213    ///
214    /// Panics if the event stream was already taken.
215    pub fn take_event_stream(&self) -> RealmFactoryEventStream {
216        RealmFactoryEventStream { event_receiver: self.client.take_event_receiver() }
217    }
218
219    /// Specifies the options to use when creating the realm.
220    ///
221    /// Returns OperationError.INVALID if called more than once.
222    pub fn r#create_realm(
223        &self,
224        mut options: RealmOptions,
225        mut realm_server: fidl::endpoints::ServerEnd<
226            fidl_fuchsia_testing_harness::RealmProxy_Marker,
227        >,
228    ) -> fidl::client::QueryResponseFut<
229        RealmFactoryCreateRealmResult,
230        fidl::encoding::DefaultFuchsiaResourceDialect,
231    > {
232        RealmFactoryProxyInterface::r#create_realm(self, options, realm_server)
233    }
234
235    /// Returns a client end to the `Realm` protocol.
236    ///
237    /// The test can use this client end to listen for events.
238    /// It is a fatal error to call this more than once or before the test realm
239    /// is started.
240    pub fn r#get_triage_detect_events(
241        &self,
242    ) -> fidl::client::QueryResponseFut<
243        fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
244        fidl::encoding::DefaultFuchsiaResourceDialect,
245    > {
246        RealmFactoryProxyInterface::r#get_triage_detect_events(self)
247    }
248}
249
250impl RealmFactoryProxyInterface for RealmFactoryProxy {
251    type CreateRealmResponseFut = fidl::client::QueryResponseFut<
252        RealmFactoryCreateRealmResult,
253        fidl::encoding::DefaultFuchsiaResourceDialect,
254    >;
255    fn r#create_realm(
256        &self,
257        mut options: RealmOptions,
258        mut realm_server: fidl::endpoints::ServerEnd<
259            fidl_fuchsia_testing_harness::RealmProxy_Marker,
260        >,
261    ) -> Self::CreateRealmResponseFut {
262        fn _decode(
263            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
264        ) -> Result<RealmFactoryCreateRealmResult, fidl::Error> {
265            let _response = fidl::client::decode_transaction_body::<
266                fidl::encoding::FlexibleResultType<
267                    fidl::encoding::EmptyStruct,
268                    fidl_fuchsia_testing_harness::OperationError,
269                >,
270                fidl::encoding::DefaultFuchsiaResourceDialect,
271                0x12d4b5c7c9d9801a,
272            >(_buf?)?
273            .into_result::<RealmFactoryMarker>("create_realm")?;
274            Ok(_response.map(|x| x))
275        }
276        self.client
277            .send_query_and_decode::<RealmFactoryCreateRealmRequest, RealmFactoryCreateRealmResult>(
278                (&mut options, realm_server),
279                0x12d4b5c7c9d9801a,
280                fidl::encoding::DynamicFlags::FLEXIBLE,
281                _decode,
282            )
283    }
284
285    type GetTriageDetectEventsResponseFut = fidl::client::QueryResponseFut<
286        fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
287        fidl::encoding::DefaultFuchsiaResourceDialect,
288    >;
289    fn r#get_triage_detect_events(&self) -> Self::GetTriageDetectEventsResponseFut {
290        fn _decode(
291            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
292        ) -> Result<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>, fidl::Error> {
293            let _response = fidl::client::decode_transaction_body::<
294                RealmFactoryGetTriageDetectEventsResponse,
295                fidl::encoding::DefaultFuchsiaResourceDialect,
296                0x7be53256487c35fd,
297            >(_buf?)?;
298            Ok(_response.client_end)
299        }
300        self.client.send_query_and_decode::<
301            fidl::encoding::EmptyPayload,
302            fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
303        >(
304            (),
305            0x7be53256487c35fd,
306            fidl::encoding::DynamicFlags::empty(),
307            _decode,
308        )
309    }
310}
311
312pub struct RealmFactoryEventStream {
313    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
314}
315
316impl std::marker::Unpin for RealmFactoryEventStream {}
317
318impl futures::stream::FusedStream for RealmFactoryEventStream {
319    fn is_terminated(&self) -> bool {
320        self.event_receiver.is_terminated()
321    }
322}
323
324impl futures::Stream for RealmFactoryEventStream {
325    type Item = Result<RealmFactoryEvent, fidl::Error>;
326
327    fn poll_next(
328        mut self: std::pin::Pin<&mut Self>,
329        cx: &mut std::task::Context<'_>,
330    ) -> std::task::Poll<Option<Self::Item>> {
331        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
332            &mut self.event_receiver,
333            cx
334        )?) {
335            Some(buf) => std::task::Poll::Ready(Some(RealmFactoryEvent::decode(buf))),
336            None => std::task::Poll::Ready(None),
337        }
338    }
339}
340
341#[derive(Debug)]
342pub enum RealmFactoryEvent {
343    #[non_exhaustive]
344    _UnknownEvent {
345        /// Ordinal of the event that was sent.
346        ordinal: u64,
347    },
348}
349
350impl RealmFactoryEvent {
351    /// Decodes a message buffer as a [`RealmFactoryEvent`].
352    fn decode(
353        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
354    ) -> Result<RealmFactoryEvent, fidl::Error> {
355        let (bytes, _handles) = buf.split_mut();
356        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
357        debug_assert_eq!(tx_header.tx_id, 0);
358        match tx_header.ordinal {
359            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
360                Ok(RealmFactoryEvent::_UnknownEvent { ordinal: tx_header.ordinal })
361            }
362            _ => Err(fidl::Error::UnknownOrdinal {
363                ordinal: tx_header.ordinal,
364                protocol_name: <RealmFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
365            }),
366        }
367    }
368}
369
370/// A Stream of incoming requests for test.detect.factory/RealmFactory.
371pub struct RealmFactoryRequestStream {
372    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
373    is_terminated: bool,
374}
375
376impl std::marker::Unpin for RealmFactoryRequestStream {}
377
378impl futures::stream::FusedStream for RealmFactoryRequestStream {
379    fn is_terminated(&self) -> bool {
380        self.is_terminated
381    }
382}
383
384impl fidl::endpoints::RequestStream for RealmFactoryRequestStream {
385    type Protocol = RealmFactoryMarker;
386    type ControlHandle = RealmFactoryControlHandle;
387
388    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
389        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
390    }
391
392    fn control_handle(&self) -> Self::ControlHandle {
393        RealmFactoryControlHandle { inner: self.inner.clone() }
394    }
395
396    fn into_inner(
397        self,
398    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
399    {
400        (self.inner, self.is_terminated)
401    }
402
403    fn from_inner(
404        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
405        is_terminated: bool,
406    ) -> Self {
407        Self { inner, is_terminated }
408    }
409}
410
411impl futures::Stream for RealmFactoryRequestStream {
412    type Item = Result<RealmFactoryRequest, fidl::Error>;
413
414    fn poll_next(
415        mut self: std::pin::Pin<&mut Self>,
416        cx: &mut std::task::Context<'_>,
417    ) -> std::task::Poll<Option<Self::Item>> {
418        let this = &mut *self;
419        if this.inner.check_shutdown(cx) {
420            this.is_terminated = true;
421            return std::task::Poll::Ready(None);
422        }
423        if this.is_terminated {
424            panic!("polled RealmFactoryRequestStream after completion");
425        }
426        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
427            |bytes, handles| {
428                match this.inner.channel().read_etc(cx, bytes, handles) {
429                    std::task::Poll::Ready(Ok(())) => {}
430                    std::task::Poll::Pending => return std::task::Poll::Pending,
431                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
432                        this.is_terminated = true;
433                        return std::task::Poll::Ready(None);
434                    }
435                    std::task::Poll::Ready(Err(e)) => {
436                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
437                            e.into(),
438                        ))))
439                    }
440                }
441
442                // A message has been received from the channel
443                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
444
445                std::task::Poll::Ready(Some(match header.ordinal {
446                    0x12d4b5c7c9d9801a => {
447                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
448                        let mut req = fidl::new_empty!(
449                            RealmFactoryCreateRealmRequest,
450                            fidl::encoding::DefaultFuchsiaResourceDialect
451                        );
452                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<RealmFactoryCreateRealmRequest>(&header, _body_bytes, handles, &mut req)?;
453                        let control_handle =
454                            RealmFactoryControlHandle { inner: this.inner.clone() };
455                        Ok(RealmFactoryRequest::CreateRealm {
456                            options: req.options,
457                            realm_server: req.realm_server,
458
459                            responder: RealmFactoryCreateRealmResponder {
460                                control_handle: std::mem::ManuallyDrop::new(control_handle),
461                                tx_id: header.tx_id,
462                            },
463                        })
464                    }
465                    0x7be53256487c35fd => {
466                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
467                        let mut req = fidl::new_empty!(
468                            fidl::encoding::EmptyPayload,
469                            fidl::encoding::DefaultFuchsiaResourceDialect
470                        );
471                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
472                        let control_handle =
473                            RealmFactoryControlHandle { inner: this.inner.clone() };
474                        Ok(RealmFactoryRequest::GetTriageDetectEvents {
475                            responder: RealmFactoryGetTriageDetectEventsResponder {
476                                control_handle: std::mem::ManuallyDrop::new(control_handle),
477                                tx_id: header.tx_id,
478                            },
479                        })
480                    }
481                    _ if header.tx_id == 0
482                        && header
483                            .dynamic_flags()
484                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
485                    {
486                        Ok(RealmFactoryRequest::_UnknownMethod {
487                            ordinal: header.ordinal,
488                            control_handle: RealmFactoryControlHandle { inner: this.inner.clone() },
489                            method_type: fidl::MethodType::OneWay,
490                        })
491                    }
492                    _ if header
493                        .dynamic_flags()
494                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
495                    {
496                        this.inner.send_framework_err(
497                            fidl::encoding::FrameworkErr::UnknownMethod,
498                            header.tx_id,
499                            header.ordinal,
500                            header.dynamic_flags(),
501                            (bytes, handles),
502                        )?;
503                        Ok(RealmFactoryRequest::_UnknownMethod {
504                            ordinal: header.ordinal,
505                            control_handle: RealmFactoryControlHandle { inner: this.inner.clone() },
506                            method_type: fidl::MethodType::TwoWay,
507                        })
508                    }
509                    _ => Err(fidl::Error::UnknownOrdinal {
510                        ordinal: header.ordinal,
511                        protocol_name:
512                            <RealmFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
513                    }),
514                }))
515            },
516        )
517    }
518}
519
520/// This protocol is used to write integration tests for the triage-detect component.
521///
522/// Each test case should create a new connection to this protocol, and call
523/// CreateRealm only after all other methods have been called to setup the test realm.
524///
525/// # The triage-detect component
526///
527/// The triage-detect component's job is to file crash reports whenever inspect data
528/// reveals that some component in the system has produced an error.
529///
530/// # FIDL Interactions
531///
532/// At startup, the triage-detect component tells the CrashReportingProductRegister
533/// to file all crash reports sent by triage-detect under the "FuchsiaDetect" crash
534/// product.
535///
536/// Periodically, the triage-detect component will fetch inspect data and file
537/// crash reports for all of the data it receives. Tests can control how reports
538/// are filed by providing any number of *.triage configuration files using
539/// `AddConfigFile`.
540#[derive(Debug)]
541pub enum RealmFactoryRequest {
542    /// Specifies the options to use when creating the realm.
543    ///
544    /// Returns OperationError.INVALID if called more than once.
545    CreateRealm {
546        options: RealmOptions,
547        realm_server: fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
548        responder: RealmFactoryCreateRealmResponder,
549    },
550    /// Returns a client end to the `Realm` protocol.
551    ///
552    /// The test can use this client end to listen for events.
553    /// It is a fatal error to call this more than once or before the test realm
554    /// is started.
555    GetTriageDetectEvents { responder: RealmFactoryGetTriageDetectEventsResponder },
556    /// An interaction was received which does not match any known method.
557    #[non_exhaustive]
558    _UnknownMethod {
559        /// Ordinal of the method that was called.
560        ordinal: u64,
561        control_handle: RealmFactoryControlHandle,
562        method_type: fidl::MethodType,
563    },
564}
565
566impl RealmFactoryRequest {
567    #[allow(irrefutable_let_patterns)]
568    pub fn into_create_realm(
569        self,
570    ) -> Option<(
571        RealmOptions,
572        fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
573        RealmFactoryCreateRealmResponder,
574    )> {
575        if let RealmFactoryRequest::CreateRealm { options, realm_server, responder } = self {
576            Some((options, realm_server, responder))
577        } else {
578            None
579        }
580    }
581
582    #[allow(irrefutable_let_patterns)]
583    pub fn into_get_triage_detect_events(
584        self,
585    ) -> Option<(RealmFactoryGetTriageDetectEventsResponder)> {
586        if let RealmFactoryRequest::GetTriageDetectEvents { responder } = self {
587            Some((responder))
588        } else {
589            None
590        }
591    }
592
593    /// Name of the method defined in FIDL
594    pub fn method_name(&self) -> &'static str {
595        match *self {
596            RealmFactoryRequest::CreateRealm { .. } => "create_realm",
597            RealmFactoryRequest::GetTriageDetectEvents { .. } => "get_triage_detect_events",
598            RealmFactoryRequest::_UnknownMethod {
599                method_type: fidl::MethodType::OneWay, ..
600            } => "unknown one-way method",
601            RealmFactoryRequest::_UnknownMethod {
602                method_type: fidl::MethodType::TwoWay, ..
603            } => "unknown two-way method",
604        }
605    }
606}
607
608#[derive(Debug, Clone)]
609pub struct RealmFactoryControlHandle {
610    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
611}
612
613impl fidl::endpoints::ControlHandle for RealmFactoryControlHandle {
614    fn shutdown(&self) {
615        self.inner.shutdown()
616    }
617    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
618        self.inner.shutdown_with_epitaph(status)
619    }
620
621    fn is_closed(&self) -> bool {
622        self.inner.channel().is_closed()
623    }
624    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
625        self.inner.channel().on_closed()
626    }
627
628    #[cfg(target_os = "fuchsia")]
629    fn signal_peer(
630        &self,
631        clear_mask: zx::Signals,
632        set_mask: zx::Signals,
633    ) -> Result<(), zx_status::Status> {
634        use fidl::Peered;
635        self.inner.channel().signal_peer(clear_mask, set_mask)
636    }
637}
638
639impl RealmFactoryControlHandle {}
640
641#[must_use = "FIDL methods require a response to be sent"]
642#[derive(Debug)]
643pub struct RealmFactoryCreateRealmResponder {
644    control_handle: std::mem::ManuallyDrop<RealmFactoryControlHandle>,
645    tx_id: u32,
646}
647
648/// Set the the channel to be shutdown (see [`RealmFactoryControlHandle::shutdown`])
649/// if the responder is dropped without sending a response, so that the client
650/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
651impl std::ops::Drop for RealmFactoryCreateRealmResponder {
652    fn drop(&mut self) {
653        self.control_handle.shutdown();
654        // Safety: drops once, never accessed again
655        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
656    }
657}
658
659impl fidl::endpoints::Responder for RealmFactoryCreateRealmResponder {
660    type ControlHandle = RealmFactoryControlHandle;
661
662    fn control_handle(&self) -> &RealmFactoryControlHandle {
663        &self.control_handle
664    }
665
666    fn drop_without_shutdown(mut self) {
667        // Safety: drops once, never accessed again due to mem::forget
668        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
669        // Prevent Drop from running (which would shut down the channel)
670        std::mem::forget(self);
671    }
672}
673
674impl RealmFactoryCreateRealmResponder {
675    /// Sends a response to the FIDL transaction.
676    ///
677    /// Sets the channel to shutdown if an error occurs.
678    pub fn send(
679        self,
680        mut result: Result<(), fidl_fuchsia_testing_harness::OperationError>,
681    ) -> Result<(), fidl::Error> {
682        let _result = self.send_raw(result);
683        if _result.is_err() {
684            self.control_handle.shutdown();
685        }
686        self.drop_without_shutdown();
687        _result
688    }
689
690    /// Similar to "send" but does not shutdown the channel if an error occurs.
691    pub fn send_no_shutdown_on_err(
692        self,
693        mut result: Result<(), fidl_fuchsia_testing_harness::OperationError>,
694    ) -> Result<(), fidl::Error> {
695        let _result = self.send_raw(result);
696        self.drop_without_shutdown();
697        _result
698    }
699
700    fn send_raw(
701        &self,
702        mut result: Result<(), fidl_fuchsia_testing_harness::OperationError>,
703    ) -> Result<(), fidl::Error> {
704        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
705            fidl::encoding::EmptyStruct,
706            fidl_fuchsia_testing_harness::OperationError,
707        >>(
708            fidl::encoding::FlexibleResult::new(result),
709            self.tx_id,
710            0x12d4b5c7c9d9801a,
711            fidl::encoding::DynamicFlags::FLEXIBLE,
712        )
713    }
714}
715
716#[must_use = "FIDL methods require a response to be sent"]
717#[derive(Debug)]
718pub struct RealmFactoryGetTriageDetectEventsResponder {
719    control_handle: std::mem::ManuallyDrop<RealmFactoryControlHandle>,
720    tx_id: u32,
721}
722
723/// Set the the channel to be shutdown (see [`RealmFactoryControlHandle::shutdown`])
724/// if the responder is dropped without sending a response, so that the client
725/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
726impl std::ops::Drop for RealmFactoryGetTriageDetectEventsResponder {
727    fn drop(&mut self) {
728        self.control_handle.shutdown();
729        // Safety: drops once, never accessed again
730        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
731    }
732}
733
734impl fidl::endpoints::Responder for RealmFactoryGetTriageDetectEventsResponder {
735    type ControlHandle = RealmFactoryControlHandle;
736
737    fn control_handle(&self) -> &RealmFactoryControlHandle {
738        &self.control_handle
739    }
740
741    fn drop_without_shutdown(mut self) {
742        // Safety: drops once, never accessed again due to mem::forget
743        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
744        // Prevent Drop from running (which would shut down the channel)
745        std::mem::forget(self);
746    }
747}
748
749impl RealmFactoryGetTriageDetectEventsResponder {
750    /// Sends a response to the FIDL transaction.
751    ///
752    /// Sets the channel to shutdown if an error occurs.
753    pub fn send(
754        self,
755        mut client_end: fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
756    ) -> Result<(), fidl::Error> {
757        let _result = self.send_raw(client_end);
758        if _result.is_err() {
759            self.control_handle.shutdown();
760        }
761        self.drop_without_shutdown();
762        _result
763    }
764
765    /// Similar to "send" but does not shutdown the channel if an error occurs.
766    pub fn send_no_shutdown_on_err(
767        self,
768        mut client_end: fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
769    ) -> Result<(), fidl::Error> {
770        let _result = self.send_raw(client_end);
771        self.drop_without_shutdown();
772        _result
773    }
774
775    fn send_raw(
776        &self,
777        mut client_end: fidl::endpoints::ClientEnd<TriageDetectEventsMarker>,
778    ) -> Result<(), fidl::Error> {
779        self.control_handle.inner.send::<RealmFactoryGetTriageDetectEventsResponse>(
780            (client_end,),
781            self.tx_id,
782            0x7be53256487c35fd,
783            fidl::encoding::DynamicFlags::empty(),
784        )
785    }
786}
787
788#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
789pub struct TriageDetectEventsMarker;
790
791impl fidl::endpoints::ProtocolMarker for TriageDetectEventsMarker {
792    type Proxy = TriageDetectEventsProxy;
793    type RequestStream = TriageDetectEventsRequestStream;
794    #[cfg(target_os = "fuchsia")]
795    type SynchronousProxy = TriageDetectEventsSynchronousProxy;
796
797    const DEBUG_NAME: &'static str = "test.detect.factory.TriageDetectEvents";
798}
799impl fidl::endpoints::DiscoverableProtocolMarker for TriageDetectEventsMarker {}
800
801pub trait TriageDetectEventsProxyInterface: Send + Sync {}
802#[derive(Debug)]
803#[cfg(target_os = "fuchsia")]
804pub struct TriageDetectEventsSynchronousProxy {
805    client: fidl::client::sync::Client,
806}
807
808#[cfg(target_os = "fuchsia")]
809impl fidl::endpoints::SynchronousProxy for TriageDetectEventsSynchronousProxy {
810    type Proxy = TriageDetectEventsProxy;
811    type Protocol = TriageDetectEventsMarker;
812
813    fn from_channel(inner: fidl::Channel) -> Self {
814        Self::new(inner)
815    }
816
817    fn into_channel(self) -> fidl::Channel {
818        self.client.into_channel()
819    }
820
821    fn as_channel(&self) -> &fidl::Channel {
822        self.client.as_channel()
823    }
824}
825
826#[cfg(target_os = "fuchsia")]
827impl TriageDetectEventsSynchronousProxy {
828    pub fn new(channel: fidl::Channel) -> Self {
829        let protocol_name =
830            <TriageDetectEventsMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
831        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
832    }
833
834    pub fn into_channel(self) -> fidl::Channel {
835        self.client.into_channel()
836    }
837
838    /// Waits until an event arrives and returns it. It is safe for other
839    /// threads to make concurrent requests while waiting for an event.
840    pub fn wait_for_event(
841        &self,
842        deadline: zx::MonotonicInstant,
843    ) -> Result<TriageDetectEventsEvent, fidl::Error> {
844        TriageDetectEventsEvent::decode(self.client.wait_for_event(deadline)?)
845    }
846}
847
848#[derive(Debug, Clone)]
849pub struct TriageDetectEventsProxy {
850    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
851}
852
853impl fidl::endpoints::Proxy for TriageDetectEventsProxy {
854    type Protocol = TriageDetectEventsMarker;
855
856    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
857        Self::new(inner)
858    }
859
860    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
861        self.client.into_channel().map_err(|client| Self { client })
862    }
863
864    fn as_channel(&self) -> &::fidl::AsyncChannel {
865        self.client.as_channel()
866    }
867}
868
869impl TriageDetectEventsProxy {
870    /// Create a new Proxy for test.detect.factory/TriageDetectEvents.
871    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
872        let protocol_name =
873            <TriageDetectEventsMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
874        Self { client: fidl::client::Client::new(channel, protocol_name) }
875    }
876
877    /// Get a Stream of events from the remote end of the protocol.
878    ///
879    /// # Panics
880    ///
881    /// Panics if the event stream was already taken.
882    pub fn take_event_stream(&self) -> TriageDetectEventsEventStream {
883        TriageDetectEventsEventStream { event_receiver: self.client.take_event_receiver() }
884    }
885}
886
887impl TriageDetectEventsProxyInterface for TriageDetectEventsProxy {}
888
889pub struct TriageDetectEventsEventStream {
890    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
891}
892
893impl std::marker::Unpin for TriageDetectEventsEventStream {}
894
895impl futures::stream::FusedStream for TriageDetectEventsEventStream {
896    fn is_terminated(&self) -> bool {
897        self.event_receiver.is_terminated()
898    }
899}
900
901impl futures::Stream for TriageDetectEventsEventStream {
902    type Item = Result<TriageDetectEventsEvent, fidl::Error>;
903
904    fn poll_next(
905        mut self: std::pin::Pin<&mut Self>,
906        cx: &mut std::task::Context<'_>,
907    ) -> std::task::Poll<Option<Self::Item>> {
908        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
909            &mut self.event_receiver,
910            cx
911        )?) {
912            Some(buf) => std::task::Poll::Ready(Some(TriageDetectEventsEvent::decode(buf))),
913            None => std::task::Poll::Ready(None),
914        }
915    }
916}
917
918#[derive(Debug)]
919pub enum TriageDetectEventsEvent {
920    OnDone {},
921    OnBail {},
922    OnDiagnosticFetch {},
923    OnCrashReport {
924        crash_signature: String,
925        crash_program_name: String,
926    },
927    OnCrashReportingProductRegistration {
928        product_name: String,
929        program_name: String,
930    },
931    #[non_exhaustive]
932    _UnknownEvent {
933        /// Ordinal of the event that was sent.
934        ordinal: u64,
935    },
936}
937
938impl TriageDetectEventsEvent {
939    #[allow(irrefutable_let_patterns)]
940    pub fn into_on_done(self) -> Option<()> {
941        if let TriageDetectEventsEvent::OnDone {} = self {
942            Some(())
943        } else {
944            None
945        }
946    }
947    #[allow(irrefutable_let_patterns)]
948    pub fn into_on_bail(self) -> Option<()> {
949        if let TriageDetectEventsEvent::OnBail {} = self {
950            Some(())
951        } else {
952            None
953        }
954    }
955    #[allow(irrefutable_let_patterns)]
956    pub fn into_on_diagnostic_fetch(self) -> Option<()> {
957        if let TriageDetectEventsEvent::OnDiagnosticFetch {} = self {
958            Some(())
959        } else {
960            None
961        }
962    }
963    #[allow(irrefutable_let_patterns)]
964    pub fn into_on_crash_report(self) -> Option<(String, String)> {
965        if let TriageDetectEventsEvent::OnCrashReport { crash_signature, crash_program_name } = self
966        {
967            Some((crash_signature, crash_program_name))
968        } else {
969            None
970        }
971    }
972    #[allow(irrefutable_let_patterns)]
973    pub fn into_on_crash_reporting_product_registration(self) -> Option<(String, String)> {
974        if let TriageDetectEventsEvent::OnCrashReportingProductRegistration {
975            product_name,
976            program_name,
977        } = self
978        {
979            Some((product_name, program_name))
980        } else {
981            None
982        }
983    }
984
985    /// Decodes a message buffer as a [`TriageDetectEventsEvent`].
986    fn decode(
987        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
988    ) -> Result<TriageDetectEventsEvent, fidl::Error> {
989        let (bytes, _handles) = buf.split_mut();
990        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
991        debug_assert_eq!(tx_header.tx_id, 0);
992        match tx_header.ordinal {
993            0x66b129b2110cfda9 => {
994                let mut out = fidl::new_empty!(
995                    fidl::encoding::EmptyPayload,
996                    fidl::encoding::DefaultFuchsiaResourceDialect
997                );
998                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&tx_header, _body_bytes, _handles, &mut out)?;
999                Ok((TriageDetectEventsEvent::OnDone {}))
1000            }
1001            0x353ae45fe8b3ba1f => {
1002                let mut out = fidl::new_empty!(
1003                    fidl::encoding::EmptyPayload,
1004                    fidl::encoding::DefaultFuchsiaResourceDialect
1005                );
1006                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&tx_header, _body_bytes, _handles, &mut out)?;
1007                Ok((TriageDetectEventsEvent::OnBail {}))
1008            }
1009            0x4143229dae6d22cd => {
1010                let mut out = fidl::new_empty!(
1011                    fidl::encoding::EmptyPayload,
1012                    fidl::encoding::DefaultFuchsiaResourceDialect
1013                );
1014                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&tx_header, _body_bytes, _handles, &mut out)?;
1015                Ok((TriageDetectEventsEvent::OnDiagnosticFetch {}))
1016            }
1017            0x5906712c264a59a0 => {
1018                let mut out = fidl::new_empty!(
1019                    TriageDetectEventsOnCrashReportRequest,
1020                    fidl::encoding::DefaultFuchsiaResourceDialect
1021                );
1022                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<TriageDetectEventsOnCrashReportRequest>(&tx_header, _body_bytes, _handles, &mut out)?;
1023                Ok((TriageDetectEventsEvent::OnCrashReport {
1024                    crash_signature: out.crash_signature,
1025                    crash_program_name: out.crash_program_name,
1026                }))
1027            }
1028            0x4646fa5654da3de9 => {
1029                let mut out = fidl::new_empty!(
1030                    TriageDetectEventsOnCrashReportingProductRegistrationRequest,
1031                    fidl::encoding::DefaultFuchsiaResourceDialect
1032                );
1033                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<TriageDetectEventsOnCrashReportingProductRegistrationRequest>(&tx_header, _body_bytes, _handles, &mut out)?;
1034                Ok((TriageDetectEventsEvent::OnCrashReportingProductRegistration {
1035                    product_name: out.product_name,
1036                    program_name: out.program_name,
1037                }))
1038            }
1039            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1040                Ok(TriageDetectEventsEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1041            }
1042            _ => Err(fidl::Error::UnknownOrdinal {
1043                ordinal: tx_header.ordinal,
1044                protocol_name:
1045                    <TriageDetectEventsMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1046            }),
1047        }
1048    }
1049}
1050
1051/// A Stream of incoming requests for test.detect.factory/TriageDetectEvents.
1052pub struct TriageDetectEventsRequestStream {
1053    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1054    is_terminated: bool,
1055}
1056
1057impl std::marker::Unpin for TriageDetectEventsRequestStream {}
1058
1059impl futures::stream::FusedStream for TriageDetectEventsRequestStream {
1060    fn is_terminated(&self) -> bool {
1061        self.is_terminated
1062    }
1063}
1064
1065impl fidl::endpoints::RequestStream for TriageDetectEventsRequestStream {
1066    type Protocol = TriageDetectEventsMarker;
1067    type ControlHandle = TriageDetectEventsControlHandle;
1068
1069    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1070        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1071    }
1072
1073    fn control_handle(&self) -> Self::ControlHandle {
1074        TriageDetectEventsControlHandle { inner: self.inner.clone() }
1075    }
1076
1077    fn into_inner(
1078        self,
1079    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1080    {
1081        (self.inner, self.is_terminated)
1082    }
1083
1084    fn from_inner(
1085        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1086        is_terminated: bool,
1087    ) -> Self {
1088        Self { inner, is_terminated }
1089    }
1090}
1091
1092impl futures::Stream for TriageDetectEventsRequestStream {
1093    type Item = Result<TriageDetectEventsRequest, fidl::Error>;
1094
1095    fn poll_next(
1096        mut self: std::pin::Pin<&mut Self>,
1097        cx: &mut std::task::Context<'_>,
1098    ) -> std::task::Poll<Option<Self::Item>> {
1099        let this = &mut *self;
1100        if this.inner.check_shutdown(cx) {
1101            this.is_terminated = true;
1102            return std::task::Poll::Ready(None);
1103        }
1104        if this.is_terminated {
1105            panic!("polled TriageDetectEventsRequestStream after completion");
1106        }
1107        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1108            |bytes, handles| {
1109                match this.inner.channel().read_etc(cx, bytes, handles) {
1110                    std::task::Poll::Ready(Ok(())) => {}
1111                    std::task::Poll::Pending => return std::task::Poll::Pending,
1112                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1113                        this.is_terminated = true;
1114                        return std::task::Poll::Ready(None);
1115                    }
1116                    std::task::Poll::Ready(Err(e)) => {
1117                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1118                            e.into(),
1119                        ))))
1120                    }
1121                }
1122
1123                // A message has been received from the channel
1124                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1125
1126                std::task::Poll::Ready(Some(match header.ordinal {
1127                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1128                    Ok(TriageDetectEventsRequest::_UnknownMethod {
1129                        ordinal: header.ordinal,
1130                        control_handle: TriageDetectEventsControlHandle { inner: this.inner.clone() },
1131                        method_type: fidl::MethodType::OneWay,
1132                    })
1133                }
1134                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1135                    this.inner.send_framework_err(
1136                        fidl::encoding::FrameworkErr::UnknownMethod,
1137                        header.tx_id,
1138                        header.ordinal,
1139                        header.dynamic_flags(),
1140                        (bytes, handles),
1141                    )?;
1142                    Ok(TriageDetectEventsRequest::_UnknownMethod {
1143                        ordinal: header.ordinal,
1144                        control_handle: TriageDetectEventsControlHandle { inner: this.inner.clone() },
1145                        method_type: fidl::MethodType::TwoWay,
1146                    })
1147                }
1148                _ => Err(fidl::Error::UnknownOrdinal {
1149                    ordinal: header.ordinal,
1150                    protocol_name: <TriageDetectEventsMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1151                }),
1152            }))
1153            },
1154        )
1155    }
1156}
1157
1158/// Events sent from the test realm.
1159#[derive(Debug)]
1160pub enum TriageDetectEventsRequest {
1161    /// An interaction was received which does not match any known method.
1162    #[non_exhaustive]
1163    _UnknownMethod {
1164        /// Ordinal of the method that was called.
1165        ordinal: u64,
1166        control_handle: TriageDetectEventsControlHandle,
1167        method_type: fidl::MethodType,
1168    },
1169}
1170
1171impl TriageDetectEventsRequest {
1172    /// Name of the method defined in FIDL
1173    pub fn method_name(&self) -> &'static str {
1174        match *self {
1175            TriageDetectEventsRequest::_UnknownMethod {
1176                method_type: fidl::MethodType::OneWay,
1177                ..
1178            } => "unknown one-way method",
1179            TriageDetectEventsRequest::_UnknownMethod {
1180                method_type: fidl::MethodType::TwoWay,
1181                ..
1182            } => "unknown two-way method",
1183        }
1184    }
1185}
1186
1187#[derive(Debug, Clone)]
1188pub struct TriageDetectEventsControlHandle {
1189    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1190}
1191
1192impl fidl::endpoints::ControlHandle for TriageDetectEventsControlHandle {
1193    fn shutdown(&self) {
1194        self.inner.shutdown()
1195    }
1196    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1197        self.inner.shutdown_with_epitaph(status)
1198    }
1199
1200    fn is_closed(&self) -> bool {
1201        self.inner.channel().is_closed()
1202    }
1203    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1204        self.inner.channel().on_closed()
1205    }
1206
1207    #[cfg(target_os = "fuchsia")]
1208    fn signal_peer(
1209        &self,
1210        clear_mask: zx::Signals,
1211        set_mask: zx::Signals,
1212    ) -> Result<(), zx_status::Status> {
1213        use fidl::Peered;
1214        self.inner.channel().signal_peer(clear_mask, set_mask)
1215    }
1216}
1217
1218impl TriageDetectEventsControlHandle {
1219    pub fn send_on_done(&self) -> Result<(), fidl::Error> {
1220        self.inner.send::<fidl::encoding::EmptyPayload>(
1221            (),
1222            0,
1223            0x66b129b2110cfda9,
1224            fidl::encoding::DynamicFlags::FLEXIBLE,
1225        )
1226    }
1227
1228    pub fn send_on_bail(&self) -> Result<(), fidl::Error> {
1229        self.inner.send::<fidl::encoding::EmptyPayload>(
1230            (),
1231            0,
1232            0x353ae45fe8b3ba1f,
1233            fidl::encoding::DynamicFlags::FLEXIBLE,
1234        )
1235    }
1236
1237    pub fn send_on_diagnostic_fetch(&self) -> Result<(), fidl::Error> {
1238        self.inner.send::<fidl::encoding::EmptyPayload>(
1239            (),
1240            0,
1241            0x4143229dae6d22cd,
1242            fidl::encoding::DynamicFlags::FLEXIBLE,
1243        )
1244    }
1245
1246    pub fn send_on_crash_report(
1247        &self,
1248        mut crash_signature: &str,
1249        mut crash_program_name: &str,
1250    ) -> Result<(), fidl::Error> {
1251        self.inner.send::<TriageDetectEventsOnCrashReportRequest>(
1252            (crash_signature, crash_program_name),
1253            0,
1254            0x5906712c264a59a0,
1255            fidl::encoding::DynamicFlags::FLEXIBLE,
1256        )
1257    }
1258
1259    pub fn send_on_crash_reporting_product_registration(
1260        &self,
1261        mut product_name: &str,
1262        mut program_name: &str,
1263    ) -> Result<(), fidl::Error> {
1264        self.inner.send::<TriageDetectEventsOnCrashReportingProductRegistrationRequest>(
1265            (product_name, program_name),
1266            0,
1267            0x4646fa5654da3de9,
1268            fidl::encoding::DynamicFlags::FLEXIBLE,
1269        )
1270    }
1271}
1272
1273mod internal {
1274    use super::*;
1275
1276    impl fidl::encoding::ResourceTypeMarker for RealmFactoryCreateRealmRequest {
1277        type Borrowed<'a> = &'a mut Self;
1278        fn take_or_borrow<'a>(
1279            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1280        ) -> Self::Borrowed<'a> {
1281            value
1282        }
1283    }
1284
1285    unsafe impl fidl::encoding::TypeMarker for RealmFactoryCreateRealmRequest {
1286        type Owned = Self;
1287
1288        #[inline(always)]
1289        fn inline_align(_context: fidl::encoding::Context) -> usize {
1290            8
1291        }
1292
1293        #[inline(always)]
1294        fn inline_size(_context: fidl::encoding::Context) -> usize {
1295            24
1296        }
1297    }
1298
1299    unsafe impl
1300        fidl::encoding::Encode<
1301            RealmFactoryCreateRealmRequest,
1302            fidl::encoding::DefaultFuchsiaResourceDialect,
1303        > for &mut RealmFactoryCreateRealmRequest
1304    {
1305        #[inline]
1306        unsafe fn encode(
1307            self,
1308            encoder: &mut fidl::encoding::Encoder<
1309                '_,
1310                fidl::encoding::DefaultFuchsiaResourceDialect,
1311            >,
1312            offset: usize,
1313            _depth: fidl::encoding::Depth,
1314        ) -> fidl::Result<()> {
1315            encoder.debug_check_bounds::<RealmFactoryCreateRealmRequest>(offset);
1316            // Delegate to tuple encoding.
1317            fidl::encoding::Encode::<
1318                RealmFactoryCreateRealmRequest,
1319                fidl::encoding::DefaultFuchsiaResourceDialect,
1320            >::encode(
1321                (
1322                    <RealmOptions as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1323                        &mut self.options,
1324                    ),
1325                    <fidl::encoding::Endpoint<
1326                        fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
1327                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1328                        &mut self.realm_server,
1329                    ),
1330                ),
1331                encoder,
1332                offset,
1333                _depth,
1334            )
1335        }
1336    }
1337    unsafe impl<
1338            T0: fidl::encoding::Encode<RealmOptions, fidl::encoding::DefaultFuchsiaResourceDialect>,
1339            T1: fidl::encoding::Encode<
1340                fidl::encoding::Endpoint<
1341                    fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
1342                >,
1343                fidl::encoding::DefaultFuchsiaResourceDialect,
1344            >,
1345        >
1346        fidl::encoding::Encode<
1347            RealmFactoryCreateRealmRequest,
1348            fidl::encoding::DefaultFuchsiaResourceDialect,
1349        > for (T0, T1)
1350    {
1351        #[inline]
1352        unsafe fn encode(
1353            self,
1354            encoder: &mut fidl::encoding::Encoder<
1355                '_,
1356                fidl::encoding::DefaultFuchsiaResourceDialect,
1357            >,
1358            offset: usize,
1359            depth: fidl::encoding::Depth,
1360        ) -> fidl::Result<()> {
1361            encoder.debug_check_bounds::<RealmFactoryCreateRealmRequest>(offset);
1362            // Zero out padding regions. There's no need to apply masks
1363            // because the unmasked parts will be overwritten by fields.
1364            unsafe {
1365                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1366                (ptr as *mut u64).write_unaligned(0);
1367            }
1368            // Write the fields.
1369            self.0.encode(encoder, offset + 0, depth)?;
1370            self.1.encode(encoder, offset + 16, depth)?;
1371            Ok(())
1372        }
1373    }
1374
1375    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1376        for RealmFactoryCreateRealmRequest
1377    {
1378        #[inline(always)]
1379        fn new_empty() -> Self {
1380            Self {
1381                options: fidl::new_empty!(
1382                    RealmOptions,
1383                    fidl::encoding::DefaultFuchsiaResourceDialect
1384                ),
1385                realm_server: fidl::new_empty!(
1386                    fidl::encoding::Endpoint<
1387                        fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
1388                    >,
1389                    fidl::encoding::DefaultFuchsiaResourceDialect
1390                ),
1391            }
1392        }
1393
1394        #[inline]
1395        unsafe fn decode(
1396            &mut self,
1397            decoder: &mut fidl::encoding::Decoder<
1398                '_,
1399                fidl::encoding::DefaultFuchsiaResourceDialect,
1400            >,
1401            offset: usize,
1402            _depth: fidl::encoding::Depth,
1403        ) -> fidl::Result<()> {
1404            decoder.debug_check_bounds::<Self>(offset);
1405            // Verify that padding bytes are zero.
1406            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1407            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1408            let mask = 0xffffffff00000000u64;
1409            let maskedval = padval & mask;
1410            if maskedval != 0 {
1411                return Err(fidl::Error::NonZeroPadding {
1412                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1413                });
1414            }
1415            fidl::decode!(
1416                RealmOptions,
1417                fidl::encoding::DefaultFuchsiaResourceDialect,
1418                &mut self.options,
1419                decoder,
1420                offset + 0,
1421                _depth
1422            )?;
1423            fidl::decode!(
1424                fidl::encoding::Endpoint<
1425                    fidl::endpoints::ServerEnd<fidl_fuchsia_testing_harness::RealmProxy_Marker>,
1426                >,
1427                fidl::encoding::DefaultFuchsiaResourceDialect,
1428                &mut self.realm_server,
1429                decoder,
1430                offset + 16,
1431                _depth
1432            )?;
1433            Ok(())
1434        }
1435    }
1436
1437    impl fidl::encoding::ResourceTypeMarker for RealmFactoryGetTriageDetectEventsResponse {
1438        type Borrowed<'a> = &'a mut Self;
1439        fn take_or_borrow<'a>(
1440            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1441        ) -> Self::Borrowed<'a> {
1442            value
1443        }
1444    }
1445
1446    unsafe impl fidl::encoding::TypeMarker for RealmFactoryGetTriageDetectEventsResponse {
1447        type Owned = Self;
1448
1449        #[inline(always)]
1450        fn inline_align(_context: fidl::encoding::Context) -> usize {
1451            4
1452        }
1453
1454        #[inline(always)]
1455        fn inline_size(_context: fidl::encoding::Context) -> usize {
1456            4
1457        }
1458    }
1459
1460    unsafe impl
1461        fidl::encoding::Encode<
1462            RealmFactoryGetTriageDetectEventsResponse,
1463            fidl::encoding::DefaultFuchsiaResourceDialect,
1464        > for &mut RealmFactoryGetTriageDetectEventsResponse
1465    {
1466        #[inline]
1467        unsafe fn encode(
1468            self,
1469            encoder: &mut fidl::encoding::Encoder<
1470                '_,
1471                fidl::encoding::DefaultFuchsiaResourceDialect,
1472            >,
1473            offset: usize,
1474            _depth: fidl::encoding::Depth,
1475        ) -> fidl::Result<()> {
1476            encoder.debug_check_bounds::<RealmFactoryGetTriageDetectEventsResponse>(offset);
1477            // Delegate to tuple encoding.
1478            fidl::encoding::Encode::<RealmFactoryGetTriageDetectEventsResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1479                (
1480                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.client_end),
1481                ),
1482                encoder, offset, _depth
1483            )
1484        }
1485    }
1486    unsafe impl<
1487            T0: fidl::encoding::Encode<
1488                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>>,
1489                fidl::encoding::DefaultFuchsiaResourceDialect,
1490            >,
1491        >
1492        fidl::encoding::Encode<
1493            RealmFactoryGetTriageDetectEventsResponse,
1494            fidl::encoding::DefaultFuchsiaResourceDialect,
1495        > for (T0,)
1496    {
1497        #[inline]
1498        unsafe fn encode(
1499            self,
1500            encoder: &mut fidl::encoding::Encoder<
1501                '_,
1502                fidl::encoding::DefaultFuchsiaResourceDialect,
1503            >,
1504            offset: usize,
1505            depth: fidl::encoding::Depth,
1506        ) -> fidl::Result<()> {
1507            encoder.debug_check_bounds::<RealmFactoryGetTriageDetectEventsResponse>(offset);
1508            // Zero out padding regions. There's no need to apply masks
1509            // because the unmasked parts will be overwritten by fields.
1510            // Write the fields.
1511            self.0.encode(encoder, offset + 0, depth)?;
1512            Ok(())
1513        }
1514    }
1515
1516    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1517        for RealmFactoryGetTriageDetectEventsResponse
1518    {
1519        #[inline(always)]
1520        fn new_empty() -> Self {
1521            Self {
1522                client_end: fidl::new_empty!(
1523                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>>,
1524                    fidl::encoding::DefaultFuchsiaResourceDialect
1525                ),
1526            }
1527        }
1528
1529        #[inline]
1530        unsafe fn decode(
1531            &mut self,
1532            decoder: &mut fidl::encoding::Decoder<
1533                '_,
1534                fidl::encoding::DefaultFuchsiaResourceDialect,
1535            >,
1536            offset: usize,
1537            _depth: fidl::encoding::Depth,
1538        ) -> fidl::Result<()> {
1539            decoder.debug_check_bounds::<Self>(offset);
1540            // Verify that padding bytes are zero.
1541            fidl::decode!(
1542                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<TriageDetectEventsMarker>>,
1543                fidl::encoding::DefaultFuchsiaResourceDialect,
1544                &mut self.client_end,
1545                decoder,
1546                offset + 0,
1547                _depth
1548            )?;
1549            Ok(())
1550        }
1551    }
1552
1553    impl RealmOptions {
1554        #[inline(always)]
1555        fn max_ordinal_present(&self) -> u64 {
1556            if let Some(_) = self.inspect_data {
1557                return 3;
1558            }
1559            if let Some(_) = self.triage_configs {
1560                return 2;
1561            }
1562            if let Some(_) = self.program_config {
1563                return 1;
1564            }
1565            0
1566        }
1567    }
1568
1569    impl fidl::encoding::ResourceTypeMarker for RealmOptions {
1570        type Borrowed<'a> = &'a mut Self;
1571        fn take_or_borrow<'a>(
1572            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1573        ) -> Self::Borrowed<'a> {
1574            value
1575        }
1576    }
1577
1578    unsafe impl fidl::encoding::TypeMarker for RealmOptions {
1579        type Owned = Self;
1580
1581        #[inline(always)]
1582        fn inline_align(_context: fidl::encoding::Context) -> usize {
1583            8
1584        }
1585
1586        #[inline(always)]
1587        fn inline_size(_context: fidl::encoding::Context) -> usize {
1588            16
1589        }
1590    }
1591
1592    unsafe impl fidl::encoding::Encode<RealmOptions, fidl::encoding::DefaultFuchsiaResourceDialect>
1593        for &mut RealmOptions
1594    {
1595        unsafe fn encode(
1596            self,
1597            encoder: &mut fidl::encoding::Encoder<
1598                '_,
1599                fidl::encoding::DefaultFuchsiaResourceDialect,
1600            >,
1601            offset: usize,
1602            mut depth: fidl::encoding::Depth,
1603        ) -> fidl::Result<()> {
1604            encoder.debug_check_bounds::<RealmOptions>(offset);
1605            // Vector header
1606            let max_ordinal: u64 = self.max_ordinal_present();
1607            encoder.write_num(max_ordinal, offset);
1608            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1609            // Calling encoder.out_of_line_offset(0) is not allowed.
1610            if max_ordinal == 0 {
1611                return Ok(());
1612            }
1613            depth.increment()?;
1614            let envelope_size = 8;
1615            let bytes_len = max_ordinal as usize * envelope_size;
1616            #[allow(unused_variables)]
1617            let offset = encoder.out_of_line_offset(bytes_len);
1618            let mut _prev_end_offset: usize = 0;
1619            if 1 > max_ordinal {
1620                return Ok(());
1621            }
1622
1623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1624            // are envelope_size bytes.
1625            let cur_offset: usize = (1 - 1) * envelope_size;
1626
1627            // Zero reserved fields.
1628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1629
1630            // Safety:
1631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1633            //   envelope_size bytes, there is always sufficient room.
1634            fidl::encoding::encode_in_envelope_optional::<
1635                fidl::encoding::HandleType<
1636                    fidl::Vmo,
1637                    { fidl::ObjectType::VMO.into_raw() },
1638                    2147483648,
1639                >,
1640                fidl::encoding::DefaultFuchsiaResourceDialect,
1641            >(
1642                self.program_config.as_mut().map(
1643                    <fidl::encoding::HandleType<
1644                        fidl::Vmo,
1645                        { fidl::ObjectType::VMO.into_raw() },
1646                        2147483648,
1647                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1648                ),
1649                encoder,
1650                offset + cur_offset,
1651                depth,
1652            )?;
1653
1654            _prev_end_offset = cur_offset + envelope_size;
1655            if 2 > max_ordinal {
1656                return Ok(());
1657            }
1658
1659            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1660            // are envelope_size bytes.
1661            let cur_offset: usize = (2 - 1) * envelope_size;
1662
1663            // Zero reserved fields.
1664            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1665
1666            // Safety:
1667            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1668            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1669            //   envelope_size bytes, there is always sufficient room.
1670            fidl::encoding::encode_in_envelope_optional::<
1671                fidl::encoding::Vector<
1672                    fidl::encoding::HandleType<
1673                        fidl::Vmo,
1674                        { fidl::ObjectType::VMO.into_raw() },
1675                        2147483648,
1676                    >,
1677                    64,
1678                >,
1679                fidl::encoding::DefaultFuchsiaResourceDialect,
1680            >(
1681                self.triage_configs.as_mut().map(
1682                    <fidl::encoding::Vector<
1683                        fidl::encoding::HandleType<
1684                            fidl::Vmo,
1685                            { fidl::ObjectType::VMO.into_raw() },
1686                            2147483648,
1687                        >,
1688                        64,
1689                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1690                ),
1691                encoder,
1692                offset + cur_offset,
1693                depth,
1694            )?;
1695
1696            _prev_end_offset = cur_offset + envelope_size;
1697            if 3 > max_ordinal {
1698                return Ok(());
1699            }
1700
1701            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1702            // are envelope_size bytes.
1703            let cur_offset: usize = (3 - 1) * envelope_size;
1704
1705            // Zero reserved fields.
1706            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1707
1708            // Safety:
1709            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1710            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1711            //   envelope_size bytes, there is always sufficient room.
1712            fidl::encoding::encode_in_envelope_optional::<
1713                fidl::encoding::Vector<
1714                    fidl::encoding::HandleType<
1715                        fidl::Vmo,
1716                        { fidl::ObjectType::VMO.into_raw() },
1717                        2147483648,
1718                    >,
1719                    64,
1720                >,
1721                fidl::encoding::DefaultFuchsiaResourceDialect,
1722            >(
1723                self.inspect_data.as_mut().map(
1724                    <fidl::encoding::Vector<
1725                        fidl::encoding::HandleType<
1726                            fidl::Vmo,
1727                            { fidl::ObjectType::VMO.into_raw() },
1728                            2147483648,
1729                        >,
1730                        64,
1731                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1732                ),
1733                encoder,
1734                offset + cur_offset,
1735                depth,
1736            )?;
1737
1738            _prev_end_offset = cur_offset + envelope_size;
1739
1740            Ok(())
1741        }
1742    }
1743
1744    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for RealmOptions {
1745        #[inline(always)]
1746        fn new_empty() -> Self {
1747            Self::default()
1748        }
1749
1750        unsafe fn decode(
1751            &mut self,
1752            decoder: &mut fidl::encoding::Decoder<
1753                '_,
1754                fidl::encoding::DefaultFuchsiaResourceDialect,
1755            >,
1756            offset: usize,
1757            mut depth: fidl::encoding::Depth,
1758        ) -> fidl::Result<()> {
1759            decoder.debug_check_bounds::<Self>(offset);
1760            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1761                None => return Err(fidl::Error::NotNullable),
1762                Some(len) => len,
1763            };
1764            // Calling decoder.out_of_line_offset(0) is not allowed.
1765            if len == 0 {
1766                return Ok(());
1767            };
1768            depth.increment()?;
1769            let envelope_size = 8;
1770            let bytes_len = len * envelope_size;
1771            let offset = decoder.out_of_line_offset(bytes_len)?;
1772            // Decode the envelope for each type.
1773            let mut _next_ordinal_to_read = 0;
1774            let mut next_offset = offset;
1775            let end_offset = offset + bytes_len;
1776            _next_ordinal_to_read += 1;
1777            if next_offset >= end_offset {
1778                return Ok(());
1779            }
1780
1781            // Decode unknown envelopes for gaps in ordinals.
1782            while _next_ordinal_to_read < 1 {
1783                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1784                _next_ordinal_to_read += 1;
1785                next_offset += envelope_size;
1786            }
1787
1788            let next_out_of_line = decoder.next_out_of_line();
1789            let handles_before = decoder.remaining_handles();
1790            if let Some((inlined, num_bytes, num_handles)) =
1791                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1792            {
1793                let member_inline_size = <fidl::encoding::HandleType<
1794                    fidl::Vmo,
1795                    { fidl::ObjectType::VMO.into_raw() },
1796                    2147483648,
1797                > as fidl::encoding::TypeMarker>::inline_size(
1798                    decoder.context
1799                );
1800                if inlined != (member_inline_size <= 4) {
1801                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1802                }
1803                let inner_offset;
1804                let mut inner_depth = depth.clone();
1805                if inlined {
1806                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1807                    inner_offset = next_offset;
1808                } else {
1809                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1810                    inner_depth.increment()?;
1811                }
1812                let val_ref =
1813                self.program_config.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
1814                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
1815                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1816                {
1817                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1818                }
1819                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1820                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1821                }
1822            }
1823
1824            next_offset += envelope_size;
1825            _next_ordinal_to_read += 1;
1826            if next_offset >= end_offset {
1827                return Ok(());
1828            }
1829
1830            // Decode unknown envelopes for gaps in ordinals.
1831            while _next_ordinal_to_read < 2 {
1832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1833                _next_ordinal_to_read += 1;
1834                next_offset += envelope_size;
1835            }
1836
1837            let next_out_of_line = decoder.next_out_of_line();
1838            let handles_before = decoder.remaining_handles();
1839            if let Some((inlined, num_bytes, num_handles)) =
1840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1841            {
1842                let member_inline_size = <fidl::encoding::Vector<
1843                    fidl::encoding::HandleType<
1844                        fidl::Vmo,
1845                        { fidl::ObjectType::VMO.into_raw() },
1846                        2147483648,
1847                    >,
1848                    64,
1849                > as fidl::encoding::TypeMarker>::inline_size(
1850                    decoder.context
1851                );
1852                if inlined != (member_inline_size <= 4) {
1853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1854                }
1855                let inner_offset;
1856                let mut inner_depth = depth.clone();
1857                if inlined {
1858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1859                    inner_offset = next_offset;
1860                } else {
1861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1862                    inner_depth.increment()?;
1863                }
1864                let val_ref = self.triage_configs.get_or_insert_with(|| {
1865                    fidl::new_empty!(
1866                        fidl::encoding::Vector<
1867                            fidl::encoding::HandleType<
1868                                fidl::Vmo,
1869                                { fidl::ObjectType::VMO.into_raw() },
1870                                2147483648,
1871                            >,
1872                            64,
1873                        >,
1874                        fidl::encoding::DefaultFuchsiaResourceDialect
1875                    )
1876                });
1877                fidl::decode!(
1878                    fidl::encoding::Vector<
1879                        fidl::encoding::HandleType<
1880                            fidl::Vmo,
1881                            { fidl::ObjectType::VMO.into_raw() },
1882                            2147483648,
1883                        >,
1884                        64,
1885                    >,
1886                    fidl::encoding::DefaultFuchsiaResourceDialect,
1887                    val_ref,
1888                    decoder,
1889                    inner_offset,
1890                    inner_depth
1891                )?;
1892                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1893                {
1894                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1895                }
1896                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1897                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1898                }
1899            }
1900
1901            next_offset += envelope_size;
1902            _next_ordinal_to_read += 1;
1903            if next_offset >= end_offset {
1904                return Ok(());
1905            }
1906
1907            // Decode unknown envelopes for gaps in ordinals.
1908            while _next_ordinal_to_read < 3 {
1909                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1910                _next_ordinal_to_read += 1;
1911                next_offset += envelope_size;
1912            }
1913
1914            let next_out_of_line = decoder.next_out_of_line();
1915            let handles_before = decoder.remaining_handles();
1916            if let Some((inlined, num_bytes, num_handles)) =
1917                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1918            {
1919                let member_inline_size = <fidl::encoding::Vector<
1920                    fidl::encoding::HandleType<
1921                        fidl::Vmo,
1922                        { fidl::ObjectType::VMO.into_raw() },
1923                        2147483648,
1924                    >,
1925                    64,
1926                > as fidl::encoding::TypeMarker>::inline_size(
1927                    decoder.context
1928                );
1929                if inlined != (member_inline_size <= 4) {
1930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1931                }
1932                let inner_offset;
1933                let mut inner_depth = depth.clone();
1934                if inlined {
1935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1936                    inner_offset = next_offset;
1937                } else {
1938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1939                    inner_depth.increment()?;
1940                }
1941                let val_ref = self.inspect_data.get_or_insert_with(|| {
1942                    fidl::new_empty!(
1943                        fidl::encoding::Vector<
1944                            fidl::encoding::HandleType<
1945                                fidl::Vmo,
1946                                { fidl::ObjectType::VMO.into_raw() },
1947                                2147483648,
1948                            >,
1949                            64,
1950                        >,
1951                        fidl::encoding::DefaultFuchsiaResourceDialect
1952                    )
1953                });
1954                fidl::decode!(
1955                    fidl::encoding::Vector<
1956                        fidl::encoding::HandleType<
1957                            fidl::Vmo,
1958                            { fidl::ObjectType::VMO.into_raw() },
1959                            2147483648,
1960                        >,
1961                        64,
1962                    >,
1963                    fidl::encoding::DefaultFuchsiaResourceDialect,
1964                    val_ref,
1965                    decoder,
1966                    inner_offset,
1967                    inner_depth
1968                )?;
1969                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1970                {
1971                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1972                }
1973                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1974                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1975                }
1976            }
1977
1978            next_offset += envelope_size;
1979
1980            // Decode the remaining unknown envelopes.
1981            while next_offset < end_offset {
1982                _next_ordinal_to_read += 1;
1983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1984                next_offset += envelope_size;
1985            }
1986
1987            Ok(())
1988        }
1989    }
1990}