Skip to main content

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