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