Skip to main content

fidl_fuchsia_ui_test_conformance/
fidl_fuchsia_ui_test_conformance.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_conformance_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14/// Used to create a puppet instance.
15#[derive(Debug, Default, PartialEq)]
16pub struct PuppetCreationArgs {
17    pub server_end: Option<fidl::endpoints::ServerEnd<PuppetMarker>>,
18    pub view_token: Option<fidl_fuchsia_ui_views::ViewCreationToken>,
19    pub touch_listener:
20        Option<fidl::endpoints::ClientEnd<fidl_fuchsia_ui_test_input::TouchInputListenerMarker>>,
21    pub mouse_listener:
22        Option<fidl::endpoints::ClientEnd<fidl_fuchsia_ui_test_input::MouseInputListenerMarker>>,
23    pub keyboard_listener:
24        Option<fidl::endpoints::ClientEnd<fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker>>,
25    pub flatland_client:
26        Option<fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>>,
27    pub keyboard_client: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>>,
28    pub device_pixel_ratio: Option<f32>,
29    pub focuser: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>>,
30    #[doc(hidden)]
31    pub __source_breaking: fidl::marker::SourceBreaking,
32}
33
34impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for PuppetCreationArgs {}
35
36#[derive(Debug, Default, PartialEq)]
37pub struct PuppetEmbedRemoteViewResponse {
38    pub result: Option<Result_>,
39    pub view_creation_token: Option<fidl_fuchsia_ui_views::ViewCreationToken>,
40    #[doc(hidden)]
41    pub __source_breaking: fidl::marker::SourceBreaking,
42}
43
44impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
45    for PuppetEmbedRemoteViewResponse
46{
47}
48
49#[derive(Debug, Default, PartialEq)]
50pub struct PuppetFactoryCreateResponse {
51    pub result: Option<Result_>,
52    /// view_ref of the created view.
53    pub view_ref: Option<fidl_fuchsia_ui_views::ViewRef>,
54    #[doc(hidden)]
55    pub __source_breaking: fidl::marker::SourceBreaking,
56}
57
58impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
59    for PuppetFactoryCreateResponse
60{
61}
62
63#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
64pub struct PuppetMarker;
65
66impl fidl::endpoints::ProtocolMarker for PuppetMarker {
67    type Proxy = PuppetProxy;
68    type RequestStream = PuppetRequestStream;
69    #[cfg(target_os = "fuchsia")]
70    type SynchronousProxy = PuppetSynchronousProxy;
71
72    const DEBUG_NAME: &'static str = "(anonymous) Puppet";
73}
74
75pub trait PuppetProxyInterface: Send + Sync {
76    type EmbedRemoteViewResponseFut: std::future::Future<Output = Result<PuppetEmbedRemoteViewResponse, fidl::Error>>
77        + Send;
78    fn r#embed_remote_view(
79        &self,
80        payload: &PuppetEmbedRemoteViewRequest,
81    ) -> Self::EmbedRemoteViewResponseFut;
82    type SetEmbeddedViewPropertiesResponseFut: std::future::Future<Output = Result<PuppetSetEmbeddedViewPropertiesResponse, fidl::Error>>
83        + Send;
84    fn r#set_embedded_view_properties(
85        &self,
86        payload: &PuppetSetEmbeddedViewPropertiesRequest,
87    ) -> Self::SetEmbeddedViewPropertiesResponseFut;
88    type DrawImageResponseFut: std::future::Future<Output = Result<PuppetDrawImageResponse, fidl::Error>>
89        + Send;
90    fn r#draw_image(&self, payload: &PuppetDrawImageRequest) -> Self::DrawImageResponseFut;
91    type SetImagePropertiesResponseFut: std::future::Future<Output = Result<PuppetSetImagePropertiesResponse, fidl::Error>>
92        + Send;
93    fn r#set_image_properties(
94        &self,
95        payload: &PuppetSetImagePropertiesRequest,
96    ) -> Self::SetImagePropertiesResponseFut;
97}
98#[derive(Debug)]
99#[cfg(target_os = "fuchsia")]
100pub struct PuppetSynchronousProxy {
101    client: fidl::client::sync::Client,
102}
103
104#[cfg(target_os = "fuchsia")]
105impl fidl::endpoints::SynchronousProxy for PuppetSynchronousProxy {
106    type Proxy = PuppetProxy;
107    type Protocol = PuppetMarker;
108
109    fn from_channel(inner: fidl::Channel) -> Self {
110        Self::new(inner)
111    }
112
113    fn into_channel(self) -> fidl::Channel {
114        self.client.into_channel()
115    }
116
117    fn as_channel(&self) -> &fidl::Channel {
118        self.client.as_channel()
119    }
120}
121
122#[cfg(target_os = "fuchsia")]
123impl PuppetSynchronousProxy {
124    pub fn new(channel: fidl::Channel) -> Self {
125        Self { client: fidl::client::sync::Client::new(channel) }
126    }
127
128    pub fn into_channel(self) -> fidl::Channel {
129        self.client.into_channel()
130    }
131
132    /// Waits until an event arrives and returns it. It is safe for other
133    /// threads to make concurrent requests while waiting for an event.
134    pub fn wait_for_event(
135        &self,
136        deadline: zx::MonotonicInstant,
137    ) -> Result<PuppetEvent, fidl::Error> {
138        PuppetEvent::decode(self.client.wait_for_event::<PuppetMarker>(deadline)?)
139    }
140
141    /// Embeds a view owned elsewhere.
142    ///
143    /// The puppet should create a (ViewportCreationToken, ViewCreationToken) pair
144    /// and use the former to create a viewport with the specified `properties`.
145    /// Once the puppet has presented a frame containing the new viewport, it should
146    /// return the view creation token to the caller.
147    pub fn r#embed_remote_view(
148        &self,
149        mut payload: &PuppetEmbedRemoteViewRequest,
150        ___deadline: zx::MonotonicInstant,
151    ) -> Result<PuppetEmbedRemoteViewResponse, fidl::Error> {
152        let _response = self.client.send_query::<
153            PuppetEmbedRemoteViewRequest,
154            PuppetEmbedRemoteViewResponse,
155            PuppetMarker,
156        >(
157            payload,
158            0x5bb2325a988aa137,
159            fidl::encoding::DynamicFlags::empty(),
160            ___deadline,
161        )?;
162        Ok(_response)
163    }
164
165    /// Updates the properties of an embedded view.
166    pub fn r#set_embedded_view_properties(
167        &self,
168        mut payload: &PuppetSetEmbeddedViewPropertiesRequest,
169        ___deadline: zx::MonotonicInstant,
170    ) -> Result<PuppetSetEmbeddedViewPropertiesResponse, fidl::Error> {
171        let _response = self.client.send_query::<
172            PuppetSetEmbeddedViewPropertiesRequest,
173            PuppetSetEmbeddedViewPropertiesResponse,
174            PuppetMarker,
175        >(
176            payload,
177            0x409a7f3de135c709,
178            fidl::encoding::DynamicFlags::empty(),
179            ___deadline,
180        )?;
181        Ok(_response)
182    }
183
184    /// Draws an image composed of solid, monochrome-filled rectangles.
185    pub fn r#draw_image(
186        &self,
187        mut payload: &PuppetDrawImageRequest,
188        ___deadline: zx::MonotonicInstant,
189    ) -> Result<PuppetDrawImageResponse, fidl::Error> {
190        let _response = self
191            .client
192            .send_query::<PuppetDrawImageRequest, PuppetDrawImageResponse, PuppetMarker>(
193                payload,
194                0x6d736daa48b835cc,
195                fidl::encoding::DynamicFlags::empty(),
196                ___deadline,
197            )?;
198        Ok(_response)
199    }
200
201    /// Updates the properties of an image.
202    pub fn r#set_image_properties(
203        &self,
204        mut payload: &PuppetSetImagePropertiesRequest,
205        ___deadline: zx::MonotonicInstant,
206    ) -> Result<PuppetSetImagePropertiesResponse, fidl::Error> {
207        let _response = self.client.send_query::<
208            PuppetSetImagePropertiesRequest,
209            PuppetSetImagePropertiesResponse,
210            PuppetMarker,
211        >(
212            payload,
213            0x2683795408d033ff,
214            fidl::encoding::DynamicFlags::empty(),
215            ___deadline,
216        )?;
217        Ok(_response)
218    }
219}
220
221#[cfg(target_os = "fuchsia")]
222impl From<PuppetSynchronousProxy> for zx::NullableHandle {
223    fn from(value: PuppetSynchronousProxy) -> Self {
224        value.into_channel().into()
225    }
226}
227
228#[cfg(target_os = "fuchsia")]
229impl From<fidl::Channel> for PuppetSynchronousProxy {
230    fn from(value: fidl::Channel) -> Self {
231        Self::new(value)
232    }
233}
234
235#[cfg(target_os = "fuchsia")]
236impl fidl::endpoints::FromClient for PuppetSynchronousProxy {
237    type Protocol = PuppetMarker;
238
239    fn from_client(value: fidl::endpoints::ClientEnd<PuppetMarker>) -> Self {
240        Self::new(value.into_channel())
241    }
242}
243
244#[derive(Debug, Clone)]
245pub struct PuppetProxy {
246    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
247}
248
249impl fidl::endpoints::Proxy for PuppetProxy {
250    type Protocol = PuppetMarker;
251
252    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
253        Self::new(inner)
254    }
255
256    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
257        self.client.into_channel().map_err(|client| Self { client })
258    }
259
260    fn as_channel(&self) -> &::fidl::AsyncChannel {
261        self.client.as_channel()
262    }
263}
264
265impl PuppetProxy {
266    /// Create a new Proxy for fuchsia.ui.test.conformance/Puppet.
267    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
268        let protocol_name = <PuppetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
269        Self { client: fidl::client::Client::new(channel, protocol_name) }
270    }
271
272    /// Get a Stream of events from the remote end of the protocol.
273    ///
274    /// # Panics
275    ///
276    /// Panics if the event stream was already taken.
277    pub fn take_event_stream(&self) -> PuppetEventStream {
278        PuppetEventStream { event_receiver: self.client.take_event_receiver() }
279    }
280
281    /// Embeds a view owned elsewhere.
282    ///
283    /// The puppet should create a (ViewportCreationToken, ViewCreationToken) pair
284    /// and use the former to create a viewport with the specified `properties`.
285    /// Once the puppet has presented a frame containing the new viewport, it should
286    /// return the view creation token to the caller.
287    pub fn r#embed_remote_view(
288        &self,
289        mut payload: &PuppetEmbedRemoteViewRequest,
290    ) -> fidl::client::QueryResponseFut<
291        PuppetEmbedRemoteViewResponse,
292        fidl::encoding::DefaultFuchsiaResourceDialect,
293    > {
294        PuppetProxyInterface::r#embed_remote_view(self, payload)
295    }
296
297    /// Updates the properties of an embedded view.
298    pub fn r#set_embedded_view_properties(
299        &self,
300        mut payload: &PuppetSetEmbeddedViewPropertiesRequest,
301    ) -> fidl::client::QueryResponseFut<
302        PuppetSetEmbeddedViewPropertiesResponse,
303        fidl::encoding::DefaultFuchsiaResourceDialect,
304    > {
305        PuppetProxyInterface::r#set_embedded_view_properties(self, payload)
306    }
307
308    /// Draws an image composed of solid, monochrome-filled rectangles.
309    pub fn r#draw_image(
310        &self,
311        mut payload: &PuppetDrawImageRequest,
312    ) -> fidl::client::QueryResponseFut<
313        PuppetDrawImageResponse,
314        fidl::encoding::DefaultFuchsiaResourceDialect,
315    > {
316        PuppetProxyInterface::r#draw_image(self, payload)
317    }
318
319    /// Updates the properties of an image.
320    pub fn r#set_image_properties(
321        &self,
322        mut payload: &PuppetSetImagePropertiesRequest,
323    ) -> fidl::client::QueryResponseFut<
324        PuppetSetImagePropertiesResponse,
325        fidl::encoding::DefaultFuchsiaResourceDialect,
326    > {
327        PuppetProxyInterface::r#set_image_properties(self, payload)
328    }
329}
330
331impl PuppetProxyInterface for PuppetProxy {
332    type EmbedRemoteViewResponseFut = fidl::client::QueryResponseFut<
333        PuppetEmbedRemoteViewResponse,
334        fidl::encoding::DefaultFuchsiaResourceDialect,
335    >;
336    fn r#embed_remote_view(
337        &self,
338        mut payload: &PuppetEmbedRemoteViewRequest,
339    ) -> Self::EmbedRemoteViewResponseFut {
340        fn _decode(
341            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
342        ) -> Result<PuppetEmbedRemoteViewResponse, fidl::Error> {
343            let _response = fidl::client::decode_transaction_body::<
344                PuppetEmbedRemoteViewResponse,
345                fidl::encoding::DefaultFuchsiaResourceDialect,
346                0x5bb2325a988aa137,
347            >(_buf?)?;
348            Ok(_response)
349        }
350        self.client
351            .send_query_and_decode::<PuppetEmbedRemoteViewRequest, PuppetEmbedRemoteViewResponse>(
352                payload,
353                0x5bb2325a988aa137,
354                fidl::encoding::DynamicFlags::empty(),
355                _decode,
356            )
357    }
358
359    type SetEmbeddedViewPropertiesResponseFut = fidl::client::QueryResponseFut<
360        PuppetSetEmbeddedViewPropertiesResponse,
361        fidl::encoding::DefaultFuchsiaResourceDialect,
362    >;
363    fn r#set_embedded_view_properties(
364        &self,
365        mut payload: &PuppetSetEmbeddedViewPropertiesRequest,
366    ) -> Self::SetEmbeddedViewPropertiesResponseFut {
367        fn _decode(
368            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
369        ) -> Result<PuppetSetEmbeddedViewPropertiesResponse, fidl::Error> {
370            let _response = fidl::client::decode_transaction_body::<
371                PuppetSetEmbeddedViewPropertiesResponse,
372                fidl::encoding::DefaultFuchsiaResourceDialect,
373                0x409a7f3de135c709,
374            >(_buf?)?;
375            Ok(_response)
376        }
377        self.client.send_query_and_decode::<
378            PuppetSetEmbeddedViewPropertiesRequest,
379            PuppetSetEmbeddedViewPropertiesResponse,
380        >(
381            payload,
382            0x409a7f3de135c709,
383            fidl::encoding::DynamicFlags::empty(),
384            _decode,
385        )
386    }
387
388    type DrawImageResponseFut = fidl::client::QueryResponseFut<
389        PuppetDrawImageResponse,
390        fidl::encoding::DefaultFuchsiaResourceDialect,
391    >;
392    fn r#draw_image(&self, mut payload: &PuppetDrawImageRequest) -> Self::DrawImageResponseFut {
393        fn _decode(
394            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
395        ) -> Result<PuppetDrawImageResponse, fidl::Error> {
396            let _response = fidl::client::decode_transaction_body::<
397                PuppetDrawImageResponse,
398                fidl::encoding::DefaultFuchsiaResourceDialect,
399                0x6d736daa48b835cc,
400            >(_buf?)?;
401            Ok(_response)
402        }
403        self.client.send_query_and_decode::<PuppetDrawImageRequest, PuppetDrawImageResponse>(
404            payload,
405            0x6d736daa48b835cc,
406            fidl::encoding::DynamicFlags::empty(),
407            _decode,
408        )
409    }
410
411    type SetImagePropertiesResponseFut = fidl::client::QueryResponseFut<
412        PuppetSetImagePropertiesResponse,
413        fidl::encoding::DefaultFuchsiaResourceDialect,
414    >;
415    fn r#set_image_properties(
416        &self,
417        mut payload: &PuppetSetImagePropertiesRequest,
418    ) -> Self::SetImagePropertiesResponseFut {
419        fn _decode(
420            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
421        ) -> Result<PuppetSetImagePropertiesResponse, fidl::Error> {
422            let _response = fidl::client::decode_transaction_body::<
423                PuppetSetImagePropertiesResponse,
424                fidl::encoding::DefaultFuchsiaResourceDialect,
425                0x2683795408d033ff,
426            >(_buf?)?;
427            Ok(_response)
428        }
429        self.client.send_query_and_decode::<
430            PuppetSetImagePropertiesRequest,
431            PuppetSetImagePropertiesResponse,
432        >(
433            payload,
434            0x2683795408d033ff,
435            fidl::encoding::DynamicFlags::empty(),
436            _decode,
437        )
438    }
439}
440
441pub struct PuppetEventStream {
442    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
443}
444
445impl std::marker::Unpin for PuppetEventStream {}
446
447impl futures::stream::FusedStream for PuppetEventStream {
448    fn is_terminated(&self) -> bool {
449        self.event_receiver.is_terminated()
450    }
451}
452
453impl futures::Stream for PuppetEventStream {
454    type Item = Result<PuppetEvent, fidl::Error>;
455
456    fn poll_next(
457        mut self: std::pin::Pin<&mut Self>,
458        cx: &mut std::task::Context<'_>,
459    ) -> std::task::Poll<Option<Self::Item>> {
460        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
461            &mut self.event_receiver,
462            cx
463        )?) {
464            Some(buf) => std::task::Poll::Ready(Some(PuppetEvent::decode(buf))),
465            None => std::task::Poll::Ready(None),
466        }
467    }
468}
469
470#[derive(Debug)]
471pub enum PuppetEvent {}
472
473impl PuppetEvent {
474    /// Decodes a message buffer as a [`PuppetEvent`].
475    fn decode(
476        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
477    ) -> Result<PuppetEvent, fidl::Error> {
478        let (bytes, _handles) = buf.split_mut();
479        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
480        debug_assert_eq!(tx_header.tx_id, 0);
481        match tx_header.ordinal {
482            _ => Err(fidl::Error::UnknownOrdinal {
483                ordinal: tx_header.ordinal,
484                protocol_name: <PuppetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
485            }),
486        }
487    }
488}
489
490/// A Stream of incoming requests for fuchsia.ui.test.conformance/Puppet.
491pub struct PuppetRequestStream {
492    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
493    is_terminated: bool,
494}
495
496impl std::marker::Unpin for PuppetRequestStream {}
497
498impl futures::stream::FusedStream for PuppetRequestStream {
499    fn is_terminated(&self) -> bool {
500        self.is_terminated
501    }
502}
503
504impl fidl::endpoints::RequestStream for PuppetRequestStream {
505    type Protocol = PuppetMarker;
506    type ControlHandle = PuppetControlHandle;
507
508    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
509        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
510    }
511
512    fn control_handle(&self) -> Self::ControlHandle {
513        PuppetControlHandle { inner: self.inner.clone() }
514    }
515
516    fn into_inner(
517        self,
518    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
519    {
520        (self.inner, self.is_terminated)
521    }
522
523    fn from_inner(
524        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
525        is_terminated: bool,
526    ) -> Self {
527        Self { inner, is_terminated }
528    }
529}
530
531impl futures::Stream for PuppetRequestStream {
532    type Item = Result<PuppetRequest, fidl::Error>;
533
534    fn poll_next(
535        mut self: std::pin::Pin<&mut Self>,
536        cx: &mut std::task::Context<'_>,
537    ) -> std::task::Poll<Option<Self::Item>> {
538        let this = &mut *self;
539        if this.inner.check_shutdown(cx) {
540            this.is_terminated = true;
541            return std::task::Poll::Ready(None);
542        }
543        if this.is_terminated {
544            panic!("polled PuppetRequestStream after completion");
545        }
546        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
547            |bytes, handles| {
548                match this.inner.channel().read_etc(cx, bytes, handles) {
549                    std::task::Poll::Ready(Ok(())) => {}
550                    std::task::Poll::Pending => return std::task::Poll::Pending,
551                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
552                        this.is_terminated = true;
553                        return std::task::Poll::Ready(None);
554                    }
555                    std::task::Poll::Ready(Err(e)) => {
556                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
557                            e.into(),
558                        ))));
559                    }
560                }
561
562                // A message has been received from the channel
563                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
564
565                std::task::Poll::Ready(Some(match header.ordinal {
566                    0x5bb2325a988aa137 => {
567                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
568                        let mut req = fidl::new_empty!(
569                            PuppetEmbedRemoteViewRequest,
570                            fidl::encoding::DefaultFuchsiaResourceDialect
571                        );
572                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PuppetEmbedRemoteViewRequest>(&header, _body_bytes, handles, &mut req)?;
573                        let control_handle = PuppetControlHandle { inner: this.inner.clone() };
574                        Ok(PuppetRequest::EmbedRemoteView {
575                            payload: req,
576                            responder: PuppetEmbedRemoteViewResponder {
577                                control_handle: std::mem::ManuallyDrop::new(control_handle),
578                                tx_id: header.tx_id,
579                            },
580                        })
581                    }
582                    0x409a7f3de135c709 => {
583                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
584                        let mut req = fidl::new_empty!(
585                            PuppetSetEmbeddedViewPropertiesRequest,
586                            fidl::encoding::DefaultFuchsiaResourceDialect
587                        );
588                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PuppetSetEmbeddedViewPropertiesRequest>(&header, _body_bytes, handles, &mut req)?;
589                        let control_handle = PuppetControlHandle { inner: this.inner.clone() };
590                        Ok(PuppetRequest::SetEmbeddedViewProperties {
591                            payload: req,
592                            responder: PuppetSetEmbeddedViewPropertiesResponder {
593                                control_handle: std::mem::ManuallyDrop::new(control_handle),
594                                tx_id: header.tx_id,
595                            },
596                        })
597                    }
598                    0x6d736daa48b835cc => {
599                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
600                        let mut req = fidl::new_empty!(
601                            PuppetDrawImageRequest,
602                            fidl::encoding::DefaultFuchsiaResourceDialect
603                        );
604                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PuppetDrawImageRequest>(&header, _body_bytes, handles, &mut req)?;
605                        let control_handle = PuppetControlHandle { inner: this.inner.clone() };
606                        Ok(PuppetRequest::DrawImage {
607                            payload: req,
608                            responder: PuppetDrawImageResponder {
609                                control_handle: std::mem::ManuallyDrop::new(control_handle),
610                                tx_id: header.tx_id,
611                            },
612                        })
613                    }
614                    0x2683795408d033ff => {
615                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
616                        let mut req = fidl::new_empty!(
617                            PuppetSetImagePropertiesRequest,
618                            fidl::encoding::DefaultFuchsiaResourceDialect
619                        );
620                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PuppetSetImagePropertiesRequest>(&header, _body_bytes, handles, &mut req)?;
621                        let control_handle = PuppetControlHandle { inner: this.inner.clone() };
622                        Ok(PuppetRequest::SetImageProperties {
623                            payload: req,
624                            responder: PuppetSetImagePropertiesResponder {
625                                control_handle: std::mem::ManuallyDrop::new(control_handle),
626                                tx_id: header.tx_id,
627                            },
628                        })
629                    }
630                    _ => Err(fidl::Error::UnknownOrdinal {
631                        ordinal: header.ordinal,
632                        protocol_name:
633                            <PuppetMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
634                    }),
635                }))
636            },
637        )
638    }
639}
640
641/// ******************************* PLEASE READ *******************************
642///
643/// A tool to help developers write generalizable tests against a well-defined
644/// client application ("the puppet"). This API is not intended to cover every
645/// possible UI platform API use case.
646///
647/// TOPOLOGY
648///
649/// Each puppet is assumed to own exactly one view.
650///
651/// Each piece of content added is assumed to be a "direct child" of this view;
652/// and a sibling of the rest of the view's contents. In other words, all
653/// embedded views, filled rects, etc. are considered to have "sibling" semantics;
654/// for example, repositioning or resizing one piece of content should not
655/// reposition/resize any other piece of content.
656///
657/// Z-ORDERING
658///
659/// The contents of a puppet's view are z-ordered according to the order in which
660/// they were created. The first piece of content created appears at the "bottom",
661/// and the last piece of content created appears at the "top".
662///
663/// IDS
664///
665/// All ids must be globally unique, e.g. a "filled rect" id belongs to the same
666/// id space as an "embedded view" id.
667///
668/// SYNCHRONIZATION
669///
670/// All methods should block until the frame containing the requested changes has
671/// rendered to the display, if a new frame is required.
672///
673/// RETURN VALUES
674///
675/// See documentation on the `Result` enum above.
676///
677/// UNKNOWN INTERACTIONS
678///
679/// Puppet implementations may live outside of fuchsia.git, so they will encounter
680/// unknown methods and/or fields any time we extend the puppet API. In these cases,
681/// the puppet should always return `UNSUPPORTED`.
682#[derive(Debug)]
683pub enum PuppetRequest {
684    /// Embeds a view owned elsewhere.
685    ///
686    /// The puppet should create a (ViewportCreationToken, ViewCreationToken) pair
687    /// and use the former to create a viewport with the specified `properties`.
688    /// Once the puppet has presented a frame containing the new viewport, it should
689    /// return the view creation token to the caller.
690    EmbedRemoteView {
691        payload: PuppetEmbedRemoteViewRequest,
692        responder: PuppetEmbedRemoteViewResponder,
693    },
694    /// Updates the properties of an embedded view.
695    SetEmbeddedViewProperties {
696        payload: PuppetSetEmbeddedViewPropertiesRequest,
697        responder: PuppetSetEmbeddedViewPropertiesResponder,
698    },
699    /// Draws an image composed of solid, monochrome-filled rectangles.
700    DrawImage { payload: PuppetDrawImageRequest, responder: PuppetDrawImageResponder },
701    /// Updates the properties of an image.
702    SetImageProperties {
703        payload: PuppetSetImagePropertiesRequest,
704        responder: PuppetSetImagePropertiesResponder,
705    },
706}
707
708impl PuppetRequest {
709    #[allow(irrefutable_let_patterns)]
710    pub fn into_embed_remote_view(
711        self,
712    ) -> Option<(PuppetEmbedRemoteViewRequest, PuppetEmbedRemoteViewResponder)> {
713        if let PuppetRequest::EmbedRemoteView { payload, responder } = self {
714            Some((payload, responder))
715        } else {
716            None
717        }
718    }
719
720    #[allow(irrefutable_let_patterns)]
721    pub fn into_set_embedded_view_properties(
722        self,
723    ) -> Option<(PuppetSetEmbeddedViewPropertiesRequest, PuppetSetEmbeddedViewPropertiesResponder)>
724    {
725        if let PuppetRequest::SetEmbeddedViewProperties { payload, responder } = self {
726            Some((payload, responder))
727        } else {
728            None
729        }
730    }
731
732    #[allow(irrefutable_let_patterns)]
733    pub fn into_draw_image(self) -> Option<(PuppetDrawImageRequest, PuppetDrawImageResponder)> {
734        if let PuppetRequest::DrawImage { payload, responder } = self {
735            Some((payload, responder))
736        } else {
737            None
738        }
739    }
740
741    #[allow(irrefutable_let_patterns)]
742    pub fn into_set_image_properties(
743        self,
744    ) -> Option<(PuppetSetImagePropertiesRequest, PuppetSetImagePropertiesResponder)> {
745        if let PuppetRequest::SetImageProperties { payload, responder } = self {
746            Some((payload, responder))
747        } else {
748            None
749        }
750    }
751
752    /// Name of the method defined in FIDL
753    pub fn method_name(&self) -> &'static str {
754        match *self {
755            PuppetRequest::EmbedRemoteView { .. } => "embed_remote_view",
756            PuppetRequest::SetEmbeddedViewProperties { .. } => "set_embedded_view_properties",
757            PuppetRequest::DrawImage { .. } => "draw_image",
758            PuppetRequest::SetImageProperties { .. } => "set_image_properties",
759        }
760    }
761}
762
763#[derive(Debug, Clone)]
764pub struct PuppetControlHandle {
765    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
766}
767
768impl PuppetControlHandle {
769    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
770        self.inner.shutdown_with_epitaph(status.into())
771    }
772}
773
774impl fidl::endpoints::ControlHandle for PuppetControlHandle {
775    fn shutdown(&self) {
776        self.inner.shutdown()
777    }
778
779    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
780        self.inner.shutdown_with_epitaph(status)
781    }
782
783    fn is_closed(&self) -> bool {
784        self.inner.channel().is_closed()
785    }
786    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
787        self.inner.channel().on_closed()
788    }
789
790    #[cfg(target_os = "fuchsia")]
791    fn signal_peer(
792        &self,
793        clear_mask: zx::Signals,
794        set_mask: zx::Signals,
795    ) -> Result<(), zx_status::Status> {
796        use fidl::Peered;
797        self.inner.channel().signal_peer(clear_mask, set_mask)
798    }
799}
800
801impl PuppetControlHandle {}
802
803#[must_use = "FIDL methods require a response to be sent"]
804#[derive(Debug)]
805pub struct PuppetEmbedRemoteViewResponder {
806    control_handle: std::mem::ManuallyDrop<PuppetControlHandle>,
807    tx_id: u32,
808}
809
810/// Set the the channel to be shutdown (see [`PuppetControlHandle::shutdown`])
811/// if the responder is dropped without sending a response, so that the client
812/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
813impl std::ops::Drop for PuppetEmbedRemoteViewResponder {
814    fn drop(&mut self) {
815        self.control_handle.shutdown();
816        // Safety: drops once, never accessed again
817        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
818    }
819}
820
821impl fidl::endpoints::Responder for PuppetEmbedRemoteViewResponder {
822    type ControlHandle = PuppetControlHandle;
823
824    fn control_handle(&self) -> &PuppetControlHandle {
825        &self.control_handle
826    }
827
828    fn drop_without_shutdown(mut self) {
829        // Safety: drops once, never accessed again due to mem::forget
830        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
831        // Prevent Drop from running (which would shut down the channel)
832        std::mem::forget(self);
833    }
834}
835
836impl PuppetEmbedRemoteViewResponder {
837    /// Sends a response to the FIDL transaction.
838    ///
839    /// Sets the channel to shutdown if an error occurs.
840    pub fn send(self, mut payload: PuppetEmbedRemoteViewResponse) -> Result<(), fidl::Error> {
841        let _result = self.send_raw(payload);
842        if _result.is_err() {
843            self.control_handle.shutdown();
844        }
845        self.drop_without_shutdown();
846        _result
847    }
848
849    /// Similar to "send" but does not shutdown the channel if an error occurs.
850    pub fn send_no_shutdown_on_err(
851        self,
852        mut payload: PuppetEmbedRemoteViewResponse,
853    ) -> Result<(), fidl::Error> {
854        let _result = self.send_raw(payload);
855        self.drop_without_shutdown();
856        _result
857    }
858
859    fn send_raw(&self, mut payload: PuppetEmbedRemoteViewResponse) -> Result<(), fidl::Error> {
860        self.control_handle.inner.send::<PuppetEmbedRemoteViewResponse>(
861            &mut payload,
862            self.tx_id,
863            0x5bb2325a988aa137,
864            fidl::encoding::DynamicFlags::empty(),
865        )
866    }
867}
868
869#[must_use = "FIDL methods require a response to be sent"]
870#[derive(Debug)]
871pub struct PuppetSetEmbeddedViewPropertiesResponder {
872    control_handle: std::mem::ManuallyDrop<PuppetControlHandle>,
873    tx_id: u32,
874}
875
876/// Set the the channel to be shutdown (see [`PuppetControlHandle::shutdown`])
877/// if the responder is dropped without sending a response, so that the client
878/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
879impl std::ops::Drop for PuppetSetEmbeddedViewPropertiesResponder {
880    fn drop(&mut self) {
881        self.control_handle.shutdown();
882        // Safety: drops once, never accessed again
883        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
884    }
885}
886
887impl fidl::endpoints::Responder for PuppetSetEmbeddedViewPropertiesResponder {
888    type ControlHandle = PuppetControlHandle;
889
890    fn control_handle(&self) -> &PuppetControlHandle {
891        &self.control_handle
892    }
893
894    fn drop_without_shutdown(mut self) {
895        // Safety: drops once, never accessed again due to mem::forget
896        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
897        // Prevent Drop from running (which would shut down the channel)
898        std::mem::forget(self);
899    }
900}
901
902impl PuppetSetEmbeddedViewPropertiesResponder {
903    /// Sends a response to the FIDL transaction.
904    ///
905    /// Sets the channel to shutdown if an error occurs.
906    pub fn send(
907        self,
908        mut payload: &PuppetSetEmbeddedViewPropertiesResponse,
909    ) -> Result<(), fidl::Error> {
910        let _result = self.send_raw(payload);
911        if _result.is_err() {
912            self.control_handle.shutdown();
913        }
914        self.drop_without_shutdown();
915        _result
916    }
917
918    /// Similar to "send" but does not shutdown the channel if an error occurs.
919    pub fn send_no_shutdown_on_err(
920        self,
921        mut payload: &PuppetSetEmbeddedViewPropertiesResponse,
922    ) -> Result<(), fidl::Error> {
923        let _result = self.send_raw(payload);
924        self.drop_without_shutdown();
925        _result
926    }
927
928    fn send_raw(
929        &self,
930        mut payload: &PuppetSetEmbeddedViewPropertiesResponse,
931    ) -> Result<(), fidl::Error> {
932        self.control_handle.inner.send::<PuppetSetEmbeddedViewPropertiesResponse>(
933            payload,
934            self.tx_id,
935            0x409a7f3de135c709,
936            fidl::encoding::DynamicFlags::empty(),
937        )
938    }
939}
940
941#[must_use = "FIDL methods require a response to be sent"]
942#[derive(Debug)]
943pub struct PuppetDrawImageResponder {
944    control_handle: std::mem::ManuallyDrop<PuppetControlHandle>,
945    tx_id: u32,
946}
947
948/// Set the the channel to be shutdown (see [`PuppetControlHandle::shutdown`])
949/// if the responder is dropped without sending a response, so that the client
950/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
951impl std::ops::Drop for PuppetDrawImageResponder {
952    fn drop(&mut self) {
953        self.control_handle.shutdown();
954        // Safety: drops once, never accessed again
955        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
956    }
957}
958
959impl fidl::endpoints::Responder for PuppetDrawImageResponder {
960    type ControlHandle = PuppetControlHandle;
961
962    fn control_handle(&self) -> &PuppetControlHandle {
963        &self.control_handle
964    }
965
966    fn drop_without_shutdown(mut self) {
967        // Safety: drops once, never accessed again due to mem::forget
968        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
969        // Prevent Drop from running (which would shut down the channel)
970        std::mem::forget(self);
971    }
972}
973
974impl PuppetDrawImageResponder {
975    /// Sends a response to the FIDL transaction.
976    ///
977    /// Sets the channel to shutdown if an error occurs.
978    pub fn send(self, mut payload: &PuppetDrawImageResponse) -> Result<(), fidl::Error> {
979        let _result = self.send_raw(payload);
980        if _result.is_err() {
981            self.control_handle.shutdown();
982        }
983        self.drop_without_shutdown();
984        _result
985    }
986
987    /// Similar to "send" but does not shutdown the channel if an error occurs.
988    pub fn send_no_shutdown_on_err(
989        self,
990        mut payload: &PuppetDrawImageResponse,
991    ) -> Result<(), fidl::Error> {
992        let _result = self.send_raw(payload);
993        self.drop_without_shutdown();
994        _result
995    }
996
997    fn send_raw(&self, mut payload: &PuppetDrawImageResponse) -> Result<(), fidl::Error> {
998        self.control_handle.inner.send::<PuppetDrawImageResponse>(
999            payload,
1000            self.tx_id,
1001            0x6d736daa48b835cc,
1002            fidl::encoding::DynamicFlags::empty(),
1003        )
1004    }
1005}
1006
1007#[must_use = "FIDL methods require a response to be sent"]
1008#[derive(Debug)]
1009pub struct PuppetSetImagePropertiesResponder {
1010    control_handle: std::mem::ManuallyDrop<PuppetControlHandle>,
1011    tx_id: u32,
1012}
1013
1014/// Set the the channel to be shutdown (see [`PuppetControlHandle::shutdown`])
1015/// if the responder is dropped without sending a response, so that the client
1016/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1017impl std::ops::Drop for PuppetSetImagePropertiesResponder {
1018    fn drop(&mut self) {
1019        self.control_handle.shutdown();
1020        // Safety: drops once, never accessed again
1021        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1022    }
1023}
1024
1025impl fidl::endpoints::Responder for PuppetSetImagePropertiesResponder {
1026    type ControlHandle = PuppetControlHandle;
1027
1028    fn control_handle(&self) -> &PuppetControlHandle {
1029        &self.control_handle
1030    }
1031
1032    fn drop_without_shutdown(mut self) {
1033        // Safety: drops once, never accessed again due to mem::forget
1034        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1035        // Prevent Drop from running (which would shut down the channel)
1036        std::mem::forget(self);
1037    }
1038}
1039
1040impl PuppetSetImagePropertiesResponder {
1041    /// Sends a response to the FIDL transaction.
1042    ///
1043    /// Sets the channel to shutdown if an error occurs.
1044    pub fn send(self, mut payload: &PuppetSetImagePropertiesResponse) -> Result<(), fidl::Error> {
1045        let _result = self.send_raw(payload);
1046        if _result.is_err() {
1047            self.control_handle.shutdown();
1048        }
1049        self.drop_without_shutdown();
1050        _result
1051    }
1052
1053    /// Similar to "send" but does not shutdown the channel if an error occurs.
1054    pub fn send_no_shutdown_on_err(
1055        self,
1056        mut payload: &PuppetSetImagePropertiesResponse,
1057    ) -> Result<(), fidl::Error> {
1058        let _result = self.send_raw(payload);
1059        self.drop_without_shutdown();
1060        _result
1061    }
1062
1063    fn send_raw(&self, mut payload: &PuppetSetImagePropertiesResponse) -> Result<(), fidl::Error> {
1064        self.control_handle.inner.send::<PuppetSetImagePropertiesResponse>(
1065            payload,
1066            self.tx_id,
1067            0x2683795408d033ff,
1068            fidl::encoding::DynamicFlags::empty(),
1069        )
1070    }
1071}
1072
1073#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1074pub struct PuppetFactoryMarker;
1075
1076impl fidl::endpoints::ProtocolMarker for PuppetFactoryMarker {
1077    type Proxy = PuppetFactoryProxy;
1078    type RequestStream = PuppetFactoryRequestStream;
1079    #[cfg(target_os = "fuchsia")]
1080    type SynchronousProxy = PuppetFactorySynchronousProxy;
1081
1082    const DEBUG_NAME: &'static str = "fuchsia.ui.test.conformance.PuppetFactory";
1083}
1084impl fidl::endpoints::DiscoverableProtocolMarker for PuppetFactoryMarker {}
1085
1086pub trait PuppetFactoryProxyInterface: Send + Sync {
1087    type CreateResponseFut: std::future::Future<Output = Result<PuppetFactoryCreateResponse, fidl::Error>>
1088        + Send;
1089    fn r#create(&self, payload: PuppetCreationArgs) -> Self::CreateResponseFut;
1090}
1091#[derive(Debug)]
1092#[cfg(target_os = "fuchsia")]
1093pub struct PuppetFactorySynchronousProxy {
1094    client: fidl::client::sync::Client,
1095}
1096
1097#[cfg(target_os = "fuchsia")]
1098impl fidl::endpoints::SynchronousProxy for PuppetFactorySynchronousProxy {
1099    type Proxy = PuppetFactoryProxy;
1100    type Protocol = PuppetFactoryMarker;
1101
1102    fn from_channel(inner: fidl::Channel) -> Self {
1103        Self::new(inner)
1104    }
1105
1106    fn into_channel(self) -> fidl::Channel {
1107        self.client.into_channel()
1108    }
1109
1110    fn as_channel(&self) -> &fidl::Channel {
1111        self.client.as_channel()
1112    }
1113}
1114
1115#[cfg(target_os = "fuchsia")]
1116impl PuppetFactorySynchronousProxy {
1117    pub fn new(channel: fidl::Channel) -> Self {
1118        Self { client: fidl::client::sync::Client::new(channel) }
1119    }
1120
1121    pub fn into_channel(self) -> fidl::Channel {
1122        self.client.into_channel()
1123    }
1124
1125    /// Waits until an event arrives and returns it. It is safe for other
1126    /// threads to make concurrent requests while waiting for an event.
1127    pub fn wait_for_event(
1128        &self,
1129        deadline: zx::MonotonicInstant,
1130    ) -> Result<PuppetFactoryEvent, fidl::Error> {
1131        PuppetFactoryEvent::decode(self.client.wait_for_event::<PuppetFactoryMarker>(deadline)?)
1132    }
1133
1134    /// Spawns a puppet instance, which will own a view created using `view_token`, and
1135    /// binds `puppet_server` to it.
1136    pub fn r#create(
1137        &self,
1138        mut payload: PuppetCreationArgs,
1139        ___deadline: zx::MonotonicInstant,
1140    ) -> Result<PuppetFactoryCreateResponse, fidl::Error> {
1141        let _response = self
1142            .client
1143            .send_query::<PuppetCreationArgs, PuppetFactoryCreateResponse, PuppetFactoryMarker>(
1144                &mut payload,
1145                0x4f90811dc284b595,
1146                fidl::encoding::DynamicFlags::empty(),
1147                ___deadline,
1148            )?;
1149        Ok(_response)
1150    }
1151}
1152
1153#[cfg(target_os = "fuchsia")]
1154impl From<PuppetFactorySynchronousProxy> for zx::NullableHandle {
1155    fn from(value: PuppetFactorySynchronousProxy) -> Self {
1156        value.into_channel().into()
1157    }
1158}
1159
1160#[cfg(target_os = "fuchsia")]
1161impl From<fidl::Channel> for PuppetFactorySynchronousProxy {
1162    fn from(value: fidl::Channel) -> Self {
1163        Self::new(value)
1164    }
1165}
1166
1167#[cfg(target_os = "fuchsia")]
1168impl fidl::endpoints::FromClient for PuppetFactorySynchronousProxy {
1169    type Protocol = PuppetFactoryMarker;
1170
1171    fn from_client(value: fidl::endpoints::ClientEnd<PuppetFactoryMarker>) -> Self {
1172        Self::new(value.into_channel())
1173    }
1174}
1175
1176#[derive(Debug, Clone)]
1177pub struct PuppetFactoryProxy {
1178    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1179}
1180
1181impl fidl::endpoints::Proxy for PuppetFactoryProxy {
1182    type Protocol = PuppetFactoryMarker;
1183
1184    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1185        Self::new(inner)
1186    }
1187
1188    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1189        self.client.into_channel().map_err(|client| Self { client })
1190    }
1191
1192    fn as_channel(&self) -> &::fidl::AsyncChannel {
1193        self.client.as_channel()
1194    }
1195}
1196
1197impl PuppetFactoryProxy {
1198    /// Create a new Proxy for fuchsia.ui.test.conformance/PuppetFactory.
1199    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1200        let protocol_name = <PuppetFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1201        Self { client: fidl::client::Client::new(channel, protocol_name) }
1202    }
1203
1204    /// Get a Stream of events from the remote end of the protocol.
1205    ///
1206    /// # Panics
1207    ///
1208    /// Panics if the event stream was already taken.
1209    pub fn take_event_stream(&self) -> PuppetFactoryEventStream {
1210        PuppetFactoryEventStream { event_receiver: self.client.take_event_receiver() }
1211    }
1212
1213    /// Spawns a puppet instance, which will own a view created using `view_token`, and
1214    /// binds `puppet_server` to it.
1215    pub fn r#create(
1216        &self,
1217        mut payload: PuppetCreationArgs,
1218    ) -> fidl::client::QueryResponseFut<
1219        PuppetFactoryCreateResponse,
1220        fidl::encoding::DefaultFuchsiaResourceDialect,
1221    > {
1222        PuppetFactoryProxyInterface::r#create(self, payload)
1223    }
1224}
1225
1226impl PuppetFactoryProxyInterface for PuppetFactoryProxy {
1227    type CreateResponseFut = fidl::client::QueryResponseFut<
1228        PuppetFactoryCreateResponse,
1229        fidl::encoding::DefaultFuchsiaResourceDialect,
1230    >;
1231    fn r#create(&self, mut payload: PuppetCreationArgs) -> Self::CreateResponseFut {
1232        fn _decode(
1233            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1234        ) -> Result<PuppetFactoryCreateResponse, fidl::Error> {
1235            let _response = fidl::client::decode_transaction_body::<
1236                PuppetFactoryCreateResponse,
1237                fidl::encoding::DefaultFuchsiaResourceDialect,
1238                0x4f90811dc284b595,
1239            >(_buf?)?;
1240            Ok(_response)
1241        }
1242        self.client.send_query_and_decode::<PuppetCreationArgs, PuppetFactoryCreateResponse>(
1243            &mut payload,
1244            0x4f90811dc284b595,
1245            fidl::encoding::DynamicFlags::empty(),
1246            _decode,
1247        )
1248    }
1249}
1250
1251pub struct PuppetFactoryEventStream {
1252    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1253}
1254
1255impl std::marker::Unpin for PuppetFactoryEventStream {}
1256
1257impl futures::stream::FusedStream for PuppetFactoryEventStream {
1258    fn is_terminated(&self) -> bool {
1259        self.event_receiver.is_terminated()
1260    }
1261}
1262
1263impl futures::Stream for PuppetFactoryEventStream {
1264    type Item = Result<PuppetFactoryEvent, fidl::Error>;
1265
1266    fn poll_next(
1267        mut self: std::pin::Pin<&mut Self>,
1268        cx: &mut std::task::Context<'_>,
1269    ) -> std::task::Poll<Option<Self::Item>> {
1270        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1271            &mut self.event_receiver,
1272            cx
1273        )?) {
1274            Some(buf) => std::task::Poll::Ready(Some(PuppetFactoryEvent::decode(buf))),
1275            None => std::task::Poll::Ready(None),
1276        }
1277    }
1278}
1279
1280#[derive(Debug)]
1281pub enum PuppetFactoryEvent {}
1282
1283impl PuppetFactoryEvent {
1284    /// Decodes a message buffer as a [`PuppetFactoryEvent`].
1285    fn decode(
1286        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1287    ) -> Result<PuppetFactoryEvent, fidl::Error> {
1288        let (bytes, _handles) = buf.split_mut();
1289        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1290        debug_assert_eq!(tx_header.tx_id, 0);
1291        match tx_header.ordinal {
1292            _ => Err(fidl::Error::UnknownOrdinal {
1293                ordinal: tx_header.ordinal,
1294                protocol_name: <PuppetFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1295            }),
1296        }
1297    }
1298}
1299
1300/// A Stream of incoming requests for fuchsia.ui.test.conformance/PuppetFactory.
1301pub struct PuppetFactoryRequestStream {
1302    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1303    is_terminated: bool,
1304}
1305
1306impl std::marker::Unpin for PuppetFactoryRequestStream {}
1307
1308impl futures::stream::FusedStream for PuppetFactoryRequestStream {
1309    fn is_terminated(&self) -> bool {
1310        self.is_terminated
1311    }
1312}
1313
1314impl fidl::endpoints::RequestStream for PuppetFactoryRequestStream {
1315    type Protocol = PuppetFactoryMarker;
1316    type ControlHandle = PuppetFactoryControlHandle;
1317
1318    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1319        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1320    }
1321
1322    fn control_handle(&self) -> Self::ControlHandle {
1323        PuppetFactoryControlHandle { inner: self.inner.clone() }
1324    }
1325
1326    fn into_inner(
1327        self,
1328    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1329    {
1330        (self.inner, self.is_terminated)
1331    }
1332
1333    fn from_inner(
1334        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1335        is_terminated: bool,
1336    ) -> Self {
1337        Self { inner, is_terminated }
1338    }
1339}
1340
1341impl futures::Stream for PuppetFactoryRequestStream {
1342    type Item = Result<PuppetFactoryRequest, fidl::Error>;
1343
1344    fn poll_next(
1345        mut self: std::pin::Pin<&mut Self>,
1346        cx: &mut std::task::Context<'_>,
1347    ) -> std::task::Poll<Option<Self::Item>> {
1348        let this = &mut *self;
1349        if this.inner.check_shutdown(cx) {
1350            this.is_terminated = true;
1351            return std::task::Poll::Ready(None);
1352        }
1353        if this.is_terminated {
1354            panic!("polled PuppetFactoryRequestStream after completion");
1355        }
1356        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1357            |bytes, handles| {
1358                match this.inner.channel().read_etc(cx, bytes, handles) {
1359                    std::task::Poll::Ready(Ok(())) => {}
1360                    std::task::Poll::Pending => return std::task::Poll::Pending,
1361                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1362                        this.is_terminated = true;
1363                        return std::task::Poll::Ready(None);
1364                    }
1365                    std::task::Poll::Ready(Err(e)) => {
1366                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1367                            e.into(),
1368                        ))));
1369                    }
1370                }
1371
1372                // A message has been received from the channel
1373                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1374
1375                std::task::Poll::Ready(Some(match header.ordinal {
1376                    0x4f90811dc284b595 => {
1377                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1378                        let mut req = fidl::new_empty!(
1379                            PuppetCreationArgs,
1380                            fidl::encoding::DefaultFuchsiaResourceDialect
1381                        );
1382                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<PuppetCreationArgs>(&header, _body_bytes, handles, &mut req)?;
1383                        let control_handle =
1384                            PuppetFactoryControlHandle { inner: this.inner.clone() };
1385                        Ok(PuppetFactoryRequest::Create {
1386                            payload: req,
1387                            responder: PuppetFactoryCreateResponder {
1388                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1389                                tx_id: header.tx_id,
1390                            },
1391                        })
1392                    }
1393                    _ => Err(fidl::Error::UnknownOrdinal {
1394                        ordinal: header.ordinal,
1395                        protocol_name:
1396                            <PuppetFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1397                    }),
1398                }))
1399            },
1400        )
1401    }
1402}
1403
1404/// A helper to spawn a puppet instance, which will own a view created with a specific
1405/// token.
1406#[derive(Debug)]
1407pub enum PuppetFactoryRequest {
1408    /// Spawns a puppet instance, which will own a view created using `view_token`, and
1409    /// binds `puppet_server` to it.
1410    Create { payload: PuppetCreationArgs, responder: PuppetFactoryCreateResponder },
1411}
1412
1413impl PuppetFactoryRequest {
1414    #[allow(irrefutable_let_patterns)]
1415    pub fn into_create(self) -> Option<(PuppetCreationArgs, PuppetFactoryCreateResponder)> {
1416        if let PuppetFactoryRequest::Create { payload, responder } = self {
1417            Some((payload, responder))
1418        } else {
1419            None
1420        }
1421    }
1422
1423    /// Name of the method defined in FIDL
1424    pub fn method_name(&self) -> &'static str {
1425        match *self {
1426            PuppetFactoryRequest::Create { .. } => "create",
1427        }
1428    }
1429}
1430
1431#[derive(Debug, Clone)]
1432pub struct PuppetFactoryControlHandle {
1433    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1434}
1435
1436impl PuppetFactoryControlHandle {
1437    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1438        self.inner.shutdown_with_epitaph(status.into())
1439    }
1440}
1441
1442impl fidl::endpoints::ControlHandle for PuppetFactoryControlHandle {
1443    fn shutdown(&self) {
1444        self.inner.shutdown()
1445    }
1446
1447    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1448        self.inner.shutdown_with_epitaph(status)
1449    }
1450
1451    fn is_closed(&self) -> bool {
1452        self.inner.channel().is_closed()
1453    }
1454    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1455        self.inner.channel().on_closed()
1456    }
1457
1458    #[cfg(target_os = "fuchsia")]
1459    fn signal_peer(
1460        &self,
1461        clear_mask: zx::Signals,
1462        set_mask: zx::Signals,
1463    ) -> Result<(), zx_status::Status> {
1464        use fidl::Peered;
1465        self.inner.channel().signal_peer(clear_mask, set_mask)
1466    }
1467}
1468
1469impl PuppetFactoryControlHandle {}
1470
1471#[must_use = "FIDL methods require a response to be sent"]
1472#[derive(Debug)]
1473pub struct PuppetFactoryCreateResponder {
1474    control_handle: std::mem::ManuallyDrop<PuppetFactoryControlHandle>,
1475    tx_id: u32,
1476}
1477
1478/// Set the the channel to be shutdown (see [`PuppetFactoryControlHandle::shutdown`])
1479/// if the responder is dropped without sending a response, so that the client
1480/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1481impl std::ops::Drop for PuppetFactoryCreateResponder {
1482    fn drop(&mut self) {
1483        self.control_handle.shutdown();
1484        // Safety: drops once, never accessed again
1485        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1486    }
1487}
1488
1489impl fidl::endpoints::Responder for PuppetFactoryCreateResponder {
1490    type ControlHandle = PuppetFactoryControlHandle;
1491
1492    fn control_handle(&self) -> &PuppetFactoryControlHandle {
1493        &self.control_handle
1494    }
1495
1496    fn drop_without_shutdown(mut self) {
1497        // Safety: drops once, never accessed again due to mem::forget
1498        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1499        // Prevent Drop from running (which would shut down the channel)
1500        std::mem::forget(self);
1501    }
1502}
1503
1504impl PuppetFactoryCreateResponder {
1505    /// Sends a response to the FIDL transaction.
1506    ///
1507    /// Sets the channel to shutdown if an error occurs.
1508    pub fn send(self, mut payload: PuppetFactoryCreateResponse) -> Result<(), fidl::Error> {
1509        let _result = self.send_raw(payload);
1510        if _result.is_err() {
1511            self.control_handle.shutdown();
1512        }
1513        self.drop_without_shutdown();
1514        _result
1515    }
1516
1517    /// Similar to "send" but does not shutdown the channel if an error occurs.
1518    pub fn send_no_shutdown_on_err(
1519        self,
1520        mut payload: PuppetFactoryCreateResponse,
1521    ) -> Result<(), fidl::Error> {
1522        let _result = self.send_raw(payload);
1523        self.drop_without_shutdown();
1524        _result
1525    }
1526
1527    fn send_raw(&self, mut payload: PuppetFactoryCreateResponse) -> Result<(), fidl::Error> {
1528        self.control_handle.inner.send::<PuppetFactoryCreateResponse>(
1529            &mut payload,
1530            self.tx_id,
1531            0x4f90811dc284b595,
1532            fidl::encoding::DynamicFlags::empty(),
1533        )
1534    }
1535}
1536
1537mod internal {
1538    use super::*;
1539
1540    impl PuppetCreationArgs {
1541        #[inline(always)]
1542        fn max_ordinal_present(&self) -> u64 {
1543            if let Some(_) = self.focuser {
1544                return 9;
1545            }
1546            if let Some(_) = self.device_pixel_ratio {
1547                return 8;
1548            }
1549            if let Some(_) = self.keyboard_client {
1550                return 7;
1551            }
1552            if let Some(_) = self.flatland_client {
1553                return 6;
1554            }
1555            if let Some(_) = self.keyboard_listener {
1556                return 5;
1557            }
1558            if let Some(_) = self.mouse_listener {
1559                return 4;
1560            }
1561            if let Some(_) = self.touch_listener {
1562                return 3;
1563            }
1564            if let Some(_) = self.view_token {
1565                return 2;
1566            }
1567            if let Some(_) = self.server_end {
1568                return 1;
1569            }
1570            0
1571        }
1572    }
1573
1574    impl fidl::encoding::ResourceTypeMarker for PuppetCreationArgs {
1575        type Borrowed<'a> = &'a mut Self;
1576        fn take_or_borrow<'a>(
1577            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1578        ) -> Self::Borrowed<'a> {
1579            value
1580        }
1581    }
1582
1583    unsafe impl fidl::encoding::TypeMarker for PuppetCreationArgs {
1584        type Owned = Self;
1585
1586        #[inline(always)]
1587        fn inline_align(_context: fidl::encoding::Context) -> usize {
1588            8
1589        }
1590
1591        #[inline(always)]
1592        fn inline_size(_context: fidl::encoding::Context) -> usize {
1593            16
1594        }
1595    }
1596
1597    unsafe impl
1598        fidl::encoding::Encode<PuppetCreationArgs, fidl::encoding::DefaultFuchsiaResourceDialect>
1599        for &mut PuppetCreationArgs
1600    {
1601        unsafe fn encode(
1602            self,
1603            encoder: &mut fidl::encoding::Encoder<
1604                '_,
1605                fidl::encoding::DefaultFuchsiaResourceDialect,
1606            >,
1607            offset: usize,
1608            mut depth: fidl::encoding::Depth,
1609        ) -> fidl::Result<()> {
1610            encoder.debug_check_bounds::<PuppetCreationArgs>(offset);
1611            // Vector header
1612            let max_ordinal: u64 = self.max_ordinal_present();
1613            encoder.write_num(max_ordinal, offset);
1614            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1615            // Calling encoder.out_of_line_offset(0) is not allowed.
1616            if max_ordinal == 0 {
1617                return Ok(());
1618            }
1619            depth.increment()?;
1620            let envelope_size = 8;
1621            let bytes_len = max_ordinal as usize * envelope_size;
1622            #[allow(unused_variables)]
1623            let offset = encoder.out_of_line_offset(bytes_len);
1624            let mut _prev_end_offset: usize = 0;
1625            if 1 > max_ordinal {
1626                return Ok(());
1627            }
1628
1629            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1630            // are envelope_size bytes.
1631            let cur_offset: usize = (1 - 1) * envelope_size;
1632
1633            // Zero reserved fields.
1634            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1635
1636            // Safety:
1637            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1638            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1639            //   envelope_size bytes, there is always sufficient room.
1640            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PuppetMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
1641            self.server_end.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PuppetMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1642            encoder, offset + cur_offset, depth
1643        )?;
1644
1645            _prev_end_offset = cur_offset + envelope_size;
1646            if 2 > max_ordinal {
1647                return Ok(());
1648            }
1649
1650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1651            // are envelope_size bytes.
1652            let cur_offset: usize = (2 - 1) * envelope_size;
1653
1654            // Zero reserved fields.
1655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1656
1657            // Safety:
1658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1660            //   envelope_size bytes, there is always sufficient room.
1661            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_ui_views::ViewCreationToken, fidl::encoding::DefaultFuchsiaResourceDialect>(
1662            self.view_token.as_mut().map(<fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
1663            encoder, offset + cur_offset, depth
1664        )?;
1665
1666            _prev_end_offset = cur_offset + envelope_size;
1667            if 3 > max_ordinal {
1668                return Ok(());
1669            }
1670
1671            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1672            // are envelope_size bytes.
1673            let cur_offset: usize = (3 - 1) * envelope_size;
1674
1675            // Zero reserved fields.
1676            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1677
1678            // Safety:
1679            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1680            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1681            //   envelope_size bytes, there is always sufficient room.
1682            fidl::encoding::encode_in_envelope_optional::<
1683                fidl::encoding::Endpoint<
1684                    fidl::endpoints::ClientEnd<
1685                        fidl_fuchsia_ui_test_input::TouchInputListenerMarker,
1686                    >,
1687                >,
1688                fidl::encoding::DefaultFuchsiaResourceDialect,
1689            >(
1690                self.touch_listener.as_mut().map(
1691                    <fidl::encoding::Endpoint<
1692                        fidl::endpoints::ClientEnd<
1693                            fidl_fuchsia_ui_test_input::TouchInputListenerMarker,
1694                        >,
1695                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1696                ),
1697                encoder,
1698                offset + cur_offset,
1699                depth,
1700            )?;
1701
1702            _prev_end_offset = cur_offset + envelope_size;
1703            if 4 > max_ordinal {
1704                return Ok(());
1705            }
1706
1707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1708            // are envelope_size bytes.
1709            let cur_offset: usize = (4 - 1) * envelope_size;
1710
1711            // Zero reserved fields.
1712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1713
1714            // Safety:
1715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1717            //   envelope_size bytes, there is always sufficient room.
1718            fidl::encoding::encode_in_envelope_optional::<
1719                fidl::encoding::Endpoint<
1720                    fidl::endpoints::ClientEnd<
1721                        fidl_fuchsia_ui_test_input::MouseInputListenerMarker,
1722                    >,
1723                >,
1724                fidl::encoding::DefaultFuchsiaResourceDialect,
1725            >(
1726                self.mouse_listener.as_mut().map(
1727                    <fidl::encoding::Endpoint<
1728                        fidl::endpoints::ClientEnd<
1729                            fidl_fuchsia_ui_test_input::MouseInputListenerMarker,
1730                        >,
1731                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1732                ),
1733                encoder,
1734                offset + cur_offset,
1735                depth,
1736            )?;
1737
1738            _prev_end_offset = cur_offset + envelope_size;
1739            if 5 > max_ordinal {
1740                return Ok(());
1741            }
1742
1743            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1744            // are envelope_size bytes.
1745            let cur_offset: usize = (5 - 1) * envelope_size;
1746
1747            // Zero reserved fields.
1748            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1749
1750            // Safety:
1751            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1752            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1753            //   envelope_size bytes, there is always sufficient room.
1754            fidl::encoding::encode_in_envelope_optional::<
1755                fidl::encoding::Endpoint<
1756                    fidl::endpoints::ClientEnd<
1757                        fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker,
1758                    >,
1759                >,
1760                fidl::encoding::DefaultFuchsiaResourceDialect,
1761            >(
1762                self.keyboard_listener.as_mut().map(
1763                    <fidl::encoding::Endpoint<
1764                        fidl::endpoints::ClientEnd<
1765                            fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker,
1766                        >,
1767                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1768                ),
1769                encoder,
1770                offset + cur_offset,
1771                depth,
1772            )?;
1773
1774            _prev_end_offset = cur_offset + envelope_size;
1775            if 6 > max_ordinal {
1776                return Ok(());
1777            }
1778
1779            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1780            // are envelope_size bytes.
1781            let cur_offset: usize = (6 - 1) * envelope_size;
1782
1783            // Zero reserved fields.
1784            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1785
1786            // Safety:
1787            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1788            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1789            //   envelope_size bytes, there is always sufficient room.
1790            fidl::encoding::encode_in_envelope_optional::<
1791                fidl::encoding::Endpoint<
1792                    fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>,
1793                >,
1794                fidl::encoding::DefaultFuchsiaResourceDialect,
1795            >(
1796                self.flatland_client.as_mut().map(
1797                    <fidl::encoding::Endpoint<
1798                        fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>,
1799                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1800                ),
1801                encoder,
1802                offset + cur_offset,
1803                depth,
1804            )?;
1805
1806            _prev_end_offset = cur_offset + envelope_size;
1807            if 7 > max_ordinal {
1808                return Ok(());
1809            }
1810
1811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1812            // are envelope_size bytes.
1813            let cur_offset: usize = (7 - 1) * envelope_size;
1814
1815            // Zero reserved fields.
1816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1817
1818            // Safety:
1819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1821            //   envelope_size bytes, there is always sufficient room.
1822            fidl::encoding::encode_in_envelope_optional::<
1823                fidl::encoding::Endpoint<
1824                    fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>,
1825                >,
1826                fidl::encoding::DefaultFuchsiaResourceDialect,
1827            >(
1828                self.keyboard_client.as_mut().map(
1829                    <fidl::encoding::Endpoint<
1830                        fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>,
1831                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1832                ),
1833                encoder,
1834                offset + cur_offset,
1835                depth,
1836            )?;
1837
1838            _prev_end_offset = cur_offset + envelope_size;
1839            if 8 > max_ordinal {
1840                return Ok(());
1841            }
1842
1843            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1844            // are envelope_size bytes.
1845            let cur_offset: usize = (8 - 1) * envelope_size;
1846
1847            // Zero reserved fields.
1848            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1849
1850            // Safety:
1851            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1852            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1853            //   envelope_size bytes, there is always sufficient room.
1854            fidl::encoding::encode_in_envelope_optional::<
1855                f32,
1856                fidl::encoding::DefaultFuchsiaResourceDialect,
1857            >(
1858                self.device_pixel_ratio
1859                    .as_ref()
1860                    .map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
1861                encoder,
1862                offset + cur_offset,
1863                depth,
1864            )?;
1865
1866            _prev_end_offset = cur_offset + envelope_size;
1867            if 9 > max_ordinal {
1868                return Ok(());
1869            }
1870
1871            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1872            // are envelope_size bytes.
1873            let cur_offset: usize = (9 - 1) * envelope_size;
1874
1875            // Zero reserved fields.
1876            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1877
1878            // Safety:
1879            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1880            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1881            //   envelope_size bytes, there is always sufficient room.
1882            fidl::encoding::encode_in_envelope_optional::<
1883                fidl::encoding::Endpoint<
1884                    fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>,
1885                >,
1886                fidl::encoding::DefaultFuchsiaResourceDialect,
1887            >(
1888                self.focuser.as_mut().map(
1889                    <fidl::encoding::Endpoint<
1890                        fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>,
1891                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1892                ),
1893                encoder,
1894                offset + cur_offset,
1895                depth,
1896            )?;
1897
1898            _prev_end_offset = cur_offset + envelope_size;
1899
1900            Ok(())
1901        }
1902    }
1903
1904    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1905        for PuppetCreationArgs
1906    {
1907        #[inline(always)]
1908        fn new_empty() -> Self {
1909            Self::default()
1910        }
1911
1912        unsafe fn decode(
1913            &mut self,
1914            decoder: &mut fidl::encoding::Decoder<
1915                '_,
1916                fidl::encoding::DefaultFuchsiaResourceDialect,
1917            >,
1918            offset: usize,
1919            mut depth: fidl::encoding::Depth,
1920        ) -> fidl::Result<()> {
1921            decoder.debug_check_bounds::<Self>(offset);
1922            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1923                None => return Err(fidl::Error::NotNullable),
1924                Some(len) => len,
1925            };
1926            // Calling decoder.out_of_line_offset(0) is not allowed.
1927            if len == 0 {
1928                return Ok(());
1929            };
1930            depth.increment()?;
1931            let envelope_size = 8;
1932            let bytes_len = len * envelope_size;
1933            let offset = decoder.out_of_line_offset(bytes_len)?;
1934            // Decode the envelope for each type.
1935            let mut _next_ordinal_to_read = 0;
1936            let mut next_offset = offset;
1937            let end_offset = offset + bytes_len;
1938            _next_ordinal_to_read += 1;
1939            if next_offset >= end_offset {
1940                return Ok(());
1941            }
1942
1943            // Decode unknown envelopes for gaps in ordinals.
1944            while _next_ordinal_to_read < 1 {
1945                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1946                _next_ordinal_to_read += 1;
1947                next_offset += envelope_size;
1948            }
1949
1950            let next_out_of_line = decoder.next_out_of_line();
1951            let handles_before = decoder.remaining_handles();
1952            if let Some((inlined, num_bytes, num_handles)) =
1953                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1954            {
1955                let member_inline_size = <fidl::encoding::Endpoint<
1956                    fidl::endpoints::ServerEnd<PuppetMarker>,
1957                > as fidl::encoding::TypeMarker>::inline_size(
1958                    decoder.context
1959                );
1960                if inlined != (member_inline_size <= 4) {
1961                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1962                }
1963                let inner_offset;
1964                let mut inner_depth = depth.clone();
1965                if inlined {
1966                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1967                    inner_offset = next_offset;
1968                } else {
1969                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1970                    inner_depth.increment()?;
1971                }
1972                let val_ref = self.server_end.get_or_insert_with(|| {
1973                    fidl::new_empty!(
1974                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PuppetMarker>>,
1975                        fidl::encoding::DefaultFuchsiaResourceDialect
1976                    )
1977                });
1978                fidl::decode!(
1979                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<PuppetMarker>>,
1980                    fidl::encoding::DefaultFuchsiaResourceDialect,
1981                    val_ref,
1982                    decoder,
1983                    inner_offset,
1984                    inner_depth
1985                )?;
1986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1987                {
1988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1989                }
1990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1992                }
1993            }
1994
1995            next_offset += envelope_size;
1996            _next_ordinal_to_read += 1;
1997            if next_offset >= end_offset {
1998                return Ok(());
1999            }
2000
2001            // Decode unknown envelopes for gaps in ordinals.
2002            while _next_ordinal_to_read < 2 {
2003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2004                _next_ordinal_to_read += 1;
2005                next_offset += envelope_size;
2006            }
2007
2008            let next_out_of_line = decoder.next_out_of_line();
2009            let handles_before = decoder.remaining_handles();
2010            if let Some((inlined, num_bytes, num_handles)) =
2011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2012            {
2013                let member_inline_size = <fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2014                if inlined != (member_inline_size <= 4) {
2015                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2016                }
2017                let inner_offset;
2018                let mut inner_depth = depth.clone();
2019                if inlined {
2020                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2021                    inner_offset = next_offset;
2022                } else {
2023                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2024                    inner_depth.increment()?;
2025                }
2026                let val_ref = self.view_token.get_or_insert_with(|| {
2027                    fidl::new_empty!(
2028                        fidl_fuchsia_ui_views::ViewCreationToken,
2029                        fidl::encoding::DefaultFuchsiaResourceDialect
2030                    )
2031                });
2032                fidl::decode!(
2033                    fidl_fuchsia_ui_views::ViewCreationToken,
2034                    fidl::encoding::DefaultFuchsiaResourceDialect,
2035                    val_ref,
2036                    decoder,
2037                    inner_offset,
2038                    inner_depth
2039                )?;
2040                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2041                {
2042                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2043                }
2044                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2045                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2046                }
2047            }
2048
2049            next_offset += envelope_size;
2050            _next_ordinal_to_read += 1;
2051            if next_offset >= end_offset {
2052                return Ok(());
2053            }
2054
2055            // Decode unknown envelopes for gaps in ordinals.
2056            while _next_ordinal_to_read < 3 {
2057                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2058                _next_ordinal_to_read += 1;
2059                next_offset += envelope_size;
2060            }
2061
2062            let next_out_of_line = decoder.next_out_of_line();
2063            let handles_before = decoder.remaining_handles();
2064            if let Some((inlined, num_bytes, num_handles)) =
2065                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2066            {
2067                let member_inline_size = <fidl::encoding::Endpoint<
2068                    fidl::endpoints::ClientEnd<
2069                        fidl_fuchsia_ui_test_input::TouchInputListenerMarker,
2070                    >,
2071                > as fidl::encoding::TypeMarker>::inline_size(
2072                    decoder.context
2073                );
2074                if inlined != (member_inline_size <= 4) {
2075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2076                }
2077                let inner_offset;
2078                let mut inner_depth = depth.clone();
2079                if inlined {
2080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2081                    inner_offset = next_offset;
2082                } else {
2083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2084                    inner_depth.increment()?;
2085                }
2086                let val_ref = self.touch_listener.get_or_insert_with(|| {
2087                    fidl::new_empty!(
2088                        fidl::encoding::Endpoint<
2089                            fidl::endpoints::ClientEnd<
2090                                fidl_fuchsia_ui_test_input::TouchInputListenerMarker,
2091                            >,
2092                        >,
2093                        fidl::encoding::DefaultFuchsiaResourceDialect
2094                    )
2095                });
2096                fidl::decode!(
2097                    fidl::encoding::Endpoint<
2098                        fidl::endpoints::ClientEnd<
2099                            fidl_fuchsia_ui_test_input::TouchInputListenerMarker,
2100                        >,
2101                    >,
2102                    fidl::encoding::DefaultFuchsiaResourceDialect,
2103                    val_ref,
2104                    decoder,
2105                    inner_offset,
2106                    inner_depth
2107                )?;
2108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2109                {
2110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2111                }
2112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2114                }
2115            }
2116
2117            next_offset += envelope_size;
2118            _next_ordinal_to_read += 1;
2119            if next_offset >= end_offset {
2120                return Ok(());
2121            }
2122
2123            // Decode unknown envelopes for gaps in ordinals.
2124            while _next_ordinal_to_read < 4 {
2125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2126                _next_ordinal_to_read += 1;
2127                next_offset += envelope_size;
2128            }
2129
2130            let next_out_of_line = decoder.next_out_of_line();
2131            let handles_before = decoder.remaining_handles();
2132            if let Some((inlined, num_bytes, num_handles)) =
2133                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2134            {
2135                let member_inline_size = <fidl::encoding::Endpoint<
2136                    fidl::endpoints::ClientEnd<
2137                        fidl_fuchsia_ui_test_input::MouseInputListenerMarker,
2138                    >,
2139                > as fidl::encoding::TypeMarker>::inline_size(
2140                    decoder.context
2141                );
2142                if inlined != (member_inline_size <= 4) {
2143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2144                }
2145                let inner_offset;
2146                let mut inner_depth = depth.clone();
2147                if inlined {
2148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2149                    inner_offset = next_offset;
2150                } else {
2151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2152                    inner_depth.increment()?;
2153                }
2154                let val_ref = self.mouse_listener.get_or_insert_with(|| {
2155                    fidl::new_empty!(
2156                        fidl::encoding::Endpoint<
2157                            fidl::endpoints::ClientEnd<
2158                                fidl_fuchsia_ui_test_input::MouseInputListenerMarker,
2159                            >,
2160                        >,
2161                        fidl::encoding::DefaultFuchsiaResourceDialect
2162                    )
2163                });
2164                fidl::decode!(
2165                    fidl::encoding::Endpoint<
2166                        fidl::endpoints::ClientEnd<
2167                            fidl_fuchsia_ui_test_input::MouseInputListenerMarker,
2168                        >,
2169                    >,
2170                    fidl::encoding::DefaultFuchsiaResourceDialect,
2171                    val_ref,
2172                    decoder,
2173                    inner_offset,
2174                    inner_depth
2175                )?;
2176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2177                {
2178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2179                }
2180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2182                }
2183            }
2184
2185            next_offset += envelope_size;
2186            _next_ordinal_to_read += 1;
2187            if next_offset >= end_offset {
2188                return Ok(());
2189            }
2190
2191            // Decode unknown envelopes for gaps in ordinals.
2192            while _next_ordinal_to_read < 5 {
2193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2194                _next_ordinal_to_read += 1;
2195                next_offset += envelope_size;
2196            }
2197
2198            let next_out_of_line = decoder.next_out_of_line();
2199            let handles_before = decoder.remaining_handles();
2200            if let Some((inlined, num_bytes, num_handles)) =
2201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2202            {
2203                let member_inline_size = <fidl::encoding::Endpoint<
2204                    fidl::endpoints::ClientEnd<
2205                        fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker,
2206                    >,
2207                > as fidl::encoding::TypeMarker>::inline_size(
2208                    decoder.context
2209                );
2210                if inlined != (member_inline_size <= 4) {
2211                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2212                }
2213                let inner_offset;
2214                let mut inner_depth = depth.clone();
2215                if inlined {
2216                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2217                    inner_offset = next_offset;
2218                } else {
2219                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2220                    inner_depth.increment()?;
2221                }
2222                let val_ref = self.keyboard_listener.get_or_insert_with(|| {
2223                    fidl::new_empty!(
2224                        fidl::encoding::Endpoint<
2225                            fidl::endpoints::ClientEnd<
2226                                fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker,
2227                            >,
2228                        >,
2229                        fidl::encoding::DefaultFuchsiaResourceDialect
2230                    )
2231                });
2232                fidl::decode!(
2233                    fidl::encoding::Endpoint<
2234                        fidl::endpoints::ClientEnd<
2235                            fidl_fuchsia_ui_test_input::KeyboardInputListenerMarker,
2236                        >,
2237                    >,
2238                    fidl::encoding::DefaultFuchsiaResourceDialect,
2239                    val_ref,
2240                    decoder,
2241                    inner_offset,
2242                    inner_depth
2243                )?;
2244                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2245                {
2246                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2247                }
2248                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2249                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2250                }
2251            }
2252
2253            next_offset += envelope_size;
2254            _next_ordinal_to_read += 1;
2255            if next_offset >= end_offset {
2256                return Ok(());
2257            }
2258
2259            // Decode unknown envelopes for gaps in ordinals.
2260            while _next_ordinal_to_read < 6 {
2261                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2262                _next_ordinal_to_read += 1;
2263                next_offset += envelope_size;
2264            }
2265
2266            let next_out_of_line = decoder.next_out_of_line();
2267            let handles_before = decoder.remaining_handles();
2268            if let Some((inlined, num_bytes, num_handles)) =
2269                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2270            {
2271                let member_inline_size = <fidl::encoding::Endpoint<
2272                    fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>,
2273                > as fidl::encoding::TypeMarker>::inline_size(
2274                    decoder.context
2275                );
2276                if inlined != (member_inline_size <= 4) {
2277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2278                }
2279                let inner_offset;
2280                let mut inner_depth = depth.clone();
2281                if inlined {
2282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2283                    inner_offset = next_offset;
2284                } else {
2285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2286                    inner_depth.increment()?;
2287                }
2288                let val_ref = self.flatland_client.get_or_insert_with(|| {
2289                    fidl::new_empty!(
2290                        fidl::encoding::Endpoint<
2291                            fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>,
2292                        >,
2293                        fidl::encoding::DefaultFuchsiaResourceDialect
2294                    )
2295                });
2296                fidl::decode!(
2297                    fidl::encoding::Endpoint<
2298                        fidl::endpoints::ClientEnd<fidl_fuchsia_ui_composition::FlatlandMarker>,
2299                    >,
2300                    fidl::encoding::DefaultFuchsiaResourceDialect,
2301                    val_ref,
2302                    decoder,
2303                    inner_offset,
2304                    inner_depth
2305                )?;
2306                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2307                {
2308                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2309                }
2310                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2311                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2312                }
2313            }
2314
2315            next_offset += envelope_size;
2316            _next_ordinal_to_read += 1;
2317            if next_offset >= end_offset {
2318                return Ok(());
2319            }
2320
2321            // Decode unknown envelopes for gaps in ordinals.
2322            while _next_ordinal_to_read < 7 {
2323                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2324                _next_ordinal_to_read += 1;
2325                next_offset += envelope_size;
2326            }
2327
2328            let next_out_of_line = decoder.next_out_of_line();
2329            let handles_before = decoder.remaining_handles();
2330            if let Some((inlined, num_bytes, num_handles)) =
2331                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2332            {
2333                let member_inline_size = <fidl::encoding::Endpoint<
2334                    fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>,
2335                > as fidl::encoding::TypeMarker>::inline_size(
2336                    decoder.context
2337                );
2338                if inlined != (member_inline_size <= 4) {
2339                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2340                }
2341                let inner_offset;
2342                let mut inner_depth = depth.clone();
2343                if inlined {
2344                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2345                    inner_offset = next_offset;
2346                } else {
2347                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2348                    inner_depth.increment()?;
2349                }
2350                let val_ref = self.keyboard_client.get_or_insert_with(|| {
2351                    fidl::new_empty!(
2352                        fidl::encoding::Endpoint<
2353                            fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>,
2354                        >,
2355                        fidl::encoding::DefaultFuchsiaResourceDialect
2356                    )
2357                });
2358                fidl::decode!(
2359                    fidl::encoding::Endpoint<
2360                        fidl::endpoints::ClientEnd<fidl_fuchsia_ui_input3::KeyboardMarker>,
2361                    >,
2362                    fidl::encoding::DefaultFuchsiaResourceDialect,
2363                    val_ref,
2364                    decoder,
2365                    inner_offset,
2366                    inner_depth
2367                )?;
2368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2369                {
2370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2371                }
2372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2374                }
2375            }
2376
2377            next_offset += envelope_size;
2378            _next_ordinal_to_read += 1;
2379            if next_offset >= end_offset {
2380                return Ok(());
2381            }
2382
2383            // Decode unknown envelopes for gaps in ordinals.
2384            while _next_ordinal_to_read < 8 {
2385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2386                _next_ordinal_to_read += 1;
2387                next_offset += envelope_size;
2388            }
2389
2390            let next_out_of_line = decoder.next_out_of_line();
2391            let handles_before = decoder.remaining_handles();
2392            if let Some((inlined, num_bytes, num_handles)) =
2393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2394            {
2395                let member_inline_size =
2396                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2397                if inlined != (member_inline_size <= 4) {
2398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2399                }
2400                let inner_offset;
2401                let mut inner_depth = depth.clone();
2402                if inlined {
2403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2404                    inner_offset = next_offset;
2405                } else {
2406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2407                    inner_depth.increment()?;
2408                }
2409                let val_ref = self.device_pixel_ratio.get_or_insert_with(|| {
2410                    fidl::new_empty!(f32, fidl::encoding::DefaultFuchsiaResourceDialect)
2411                });
2412                fidl::decode!(
2413                    f32,
2414                    fidl::encoding::DefaultFuchsiaResourceDialect,
2415                    val_ref,
2416                    decoder,
2417                    inner_offset,
2418                    inner_depth
2419                )?;
2420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2421                {
2422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2423                }
2424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2426                }
2427            }
2428
2429            next_offset += envelope_size;
2430            _next_ordinal_to_read += 1;
2431            if next_offset >= end_offset {
2432                return Ok(());
2433            }
2434
2435            // Decode unknown envelopes for gaps in ordinals.
2436            while _next_ordinal_to_read < 9 {
2437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2438                _next_ordinal_to_read += 1;
2439                next_offset += envelope_size;
2440            }
2441
2442            let next_out_of_line = decoder.next_out_of_line();
2443            let handles_before = decoder.remaining_handles();
2444            if let Some((inlined, num_bytes, num_handles)) =
2445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2446            {
2447                let member_inline_size = <fidl::encoding::Endpoint<
2448                    fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>,
2449                > as fidl::encoding::TypeMarker>::inline_size(
2450                    decoder.context
2451                );
2452                if inlined != (member_inline_size <= 4) {
2453                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2454                }
2455                let inner_offset;
2456                let mut inner_depth = depth.clone();
2457                if inlined {
2458                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2459                    inner_offset = next_offset;
2460                } else {
2461                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2462                    inner_depth.increment()?;
2463                }
2464                let val_ref = self.focuser.get_or_insert_with(|| {
2465                    fidl::new_empty!(
2466                        fidl::encoding::Endpoint<
2467                            fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>,
2468                        >,
2469                        fidl::encoding::DefaultFuchsiaResourceDialect
2470                    )
2471                });
2472                fidl::decode!(
2473                    fidl::encoding::Endpoint<
2474                        fidl::endpoints::ServerEnd<fidl_fuchsia_ui_views::FocuserMarker>,
2475                    >,
2476                    fidl::encoding::DefaultFuchsiaResourceDialect,
2477                    val_ref,
2478                    decoder,
2479                    inner_offset,
2480                    inner_depth
2481                )?;
2482                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2483                {
2484                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2485                }
2486                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2487                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2488                }
2489            }
2490
2491            next_offset += envelope_size;
2492
2493            // Decode the remaining unknown envelopes.
2494            while next_offset < end_offset {
2495                _next_ordinal_to_read += 1;
2496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2497                next_offset += envelope_size;
2498            }
2499
2500            Ok(())
2501        }
2502    }
2503
2504    impl PuppetEmbedRemoteViewResponse {
2505        #[inline(always)]
2506        fn max_ordinal_present(&self) -> u64 {
2507            if let Some(_) = self.view_creation_token {
2508                return 2;
2509            }
2510            if let Some(_) = self.result {
2511                return 1;
2512            }
2513            0
2514        }
2515    }
2516
2517    impl fidl::encoding::ResourceTypeMarker for PuppetEmbedRemoteViewResponse {
2518        type Borrowed<'a> = &'a mut Self;
2519        fn take_or_borrow<'a>(
2520            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2521        ) -> Self::Borrowed<'a> {
2522            value
2523        }
2524    }
2525
2526    unsafe impl fidl::encoding::TypeMarker for PuppetEmbedRemoteViewResponse {
2527        type Owned = Self;
2528
2529        #[inline(always)]
2530        fn inline_align(_context: fidl::encoding::Context) -> usize {
2531            8
2532        }
2533
2534        #[inline(always)]
2535        fn inline_size(_context: fidl::encoding::Context) -> usize {
2536            16
2537        }
2538    }
2539
2540    unsafe impl
2541        fidl::encoding::Encode<
2542            PuppetEmbedRemoteViewResponse,
2543            fidl::encoding::DefaultFuchsiaResourceDialect,
2544        > for &mut PuppetEmbedRemoteViewResponse
2545    {
2546        unsafe fn encode(
2547            self,
2548            encoder: &mut fidl::encoding::Encoder<
2549                '_,
2550                fidl::encoding::DefaultFuchsiaResourceDialect,
2551            >,
2552            offset: usize,
2553            mut depth: fidl::encoding::Depth,
2554        ) -> fidl::Result<()> {
2555            encoder.debug_check_bounds::<PuppetEmbedRemoteViewResponse>(offset);
2556            // Vector header
2557            let max_ordinal: u64 = self.max_ordinal_present();
2558            encoder.write_num(max_ordinal, offset);
2559            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2560            // Calling encoder.out_of_line_offset(0) is not allowed.
2561            if max_ordinal == 0 {
2562                return Ok(());
2563            }
2564            depth.increment()?;
2565            let envelope_size = 8;
2566            let bytes_len = max_ordinal as usize * envelope_size;
2567            #[allow(unused_variables)]
2568            let offset = encoder.out_of_line_offset(bytes_len);
2569            let mut _prev_end_offset: usize = 0;
2570            if 1 > max_ordinal {
2571                return Ok(());
2572            }
2573
2574            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2575            // are envelope_size bytes.
2576            let cur_offset: usize = (1 - 1) * envelope_size;
2577
2578            // Zero reserved fields.
2579            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2580
2581            // Safety:
2582            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2583            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2584            //   envelope_size bytes, there is always sufficient room.
2585            fidl::encoding::encode_in_envelope_optional::<
2586                Result_,
2587                fidl::encoding::DefaultFuchsiaResourceDialect,
2588            >(
2589                self.result.as_ref().map(<Result_ as fidl::encoding::ValueTypeMarker>::borrow),
2590                encoder,
2591                offset + cur_offset,
2592                depth,
2593            )?;
2594
2595            _prev_end_offset = cur_offset + envelope_size;
2596            if 2 > max_ordinal {
2597                return Ok(());
2598            }
2599
2600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2601            // are envelope_size bytes.
2602            let cur_offset: usize = (2 - 1) * envelope_size;
2603
2604            // Zero reserved fields.
2605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2606
2607            // Safety:
2608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2610            //   envelope_size bytes, there is always sufficient room.
2611            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_ui_views::ViewCreationToken, fidl::encoding::DefaultFuchsiaResourceDialect>(
2612            self.view_creation_token.as_mut().map(<fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
2613            encoder, offset + cur_offset, depth
2614        )?;
2615
2616            _prev_end_offset = cur_offset + envelope_size;
2617
2618            Ok(())
2619        }
2620    }
2621
2622    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2623        for PuppetEmbedRemoteViewResponse
2624    {
2625        #[inline(always)]
2626        fn new_empty() -> Self {
2627            Self::default()
2628        }
2629
2630        unsafe fn decode(
2631            &mut self,
2632            decoder: &mut fidl::encoding::Decoder<
2633                '_,
2634                fidl::encoding::DefaultFuchsiaResourceDialect,
2635            >,
2636            offset: usize,
2637            mut depth: fidl::encoding::Depth,
2638        ) -> fidl::Result<()> {
2639            decoder.debug_check_bounds::<Self>(offset);
2640            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2641                None => return Err(fidl::Error::NotNullable),
2642                Some(len) => len,
2643            };
2644            // Calling decoder.out_of_line_offset(0) is not allowed.
2645            if len == 0 {
2646                return Ok(());
2647            };
2648            depth.increment()?;
2649            let envelope_size = 8;
2650            let bytes_len = len * envelope_size;
2651            let offset = decoder.out_of_line_offset(bytes_len)?;
2652            // Decode the envelope for each type.
2653            let mut _next_ordinal_to_read = 0;
2654            let mut next_offset = offset;
2655            let end_offset = offset + bytes_len;
2656            _next_ordinal_to_read += 1;
2657            if next_offset >= end_offset {
2658                return Ok(());
2659            }
2660
2661            // Decode unknown envelopes for gaps in ordinals.
2662            while _next_ordinal_to_read < 1 {
2663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2664                _next_ordinal_to_read += 1;
2665                next_offset += envelope_size;
2666            }
2667
2668            let next_out_of_line = decoder.next_out_of_line();
2669            let handles_before = decoder.remaining_handles();
2670            if let Some((inlined, num_bytes, num_handles)) =
2671                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2672            {
2673                let member_inline_size =
2674                    <Result_ as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2675                if inlined != (member_inline_size <= 4) {
2676                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2677                }
2678                let inner_offset;
2679                let mut inner_depth = depth.clone();
2680                if inlined {
2681                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2682                    inner_offset = next_offset;
2683                } else {
2684                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2685                    inner_depth.increment()?;
2686                }
2687                let val_ref = self.result.get_or_insert_with(|| {
2688                    fidl::new_empty!(Result_, fidl::encoding::DefaultFuchsiaResourceDialect)
2689                });
2690                fidl::decode!(
2691                    Result_,
2692                    fidl::encoding::DefaultFuchsiaResourceDialect,
2693                    val_ref,
2694                    decoder,
2695                    inner_offset,
2696                    inner_depth
2697                )?;
2698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2699                {
2700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2701                }
2702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2704                }
2705            }
2706
2707            next_offset += envelope_size;
2708            _next_ordinal_to_read += 1;
2709            if next_offset >= end_offset {
2710                return Ok(());
2711            }
2712
2713            // Decode unknown envelopes for gaps in ordinals.
2714            while _next_ordinal_to_read < 2 {
2715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2716                _next_ordinal_to_read += 1;
2717                next_offset += envelope_size;
2718            }
2719
2720            let next_out_of_line = decoder.next_out_of_line();
2721            let handles_before = decoder.remaining_handles();
2722            if let Some((inlined, num_bytes, num_handles)) =
2723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2724            {
2725                let member_inline_size = <fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2726                if inlined != (member_inline_size <= 4) {
2727                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2728                }
2729                let inner_offset;
2730                let mut inner_depth = depth.clone();
2731                if inlined {
2732                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2733                    inner_offset = next_offset;
2734                } else {
2735                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2736                    inner_depth.increment()?;
2737                }
2738                let val_ref = self.view_creation_token.get_or_insert_with(|| {
2739                    fidl::new_empty!(
2740                        fidl_fuchsia_ui_views::ViewCreationToken,
2741                        fidl::encoding::DefaultFuchsiaResourceDialect
2742                    )
2743                });
2744                fidl::decode!(
2745                    fidl_fuchsia_ui_views::ViewCreationToken,
2746                    fidl::encoding::DefaultFuchsiaResourceDialect,
2747                    val_ref,
2748                    decoder,
2749                    inner_offset,
2750                    inner_depth
2751                )?;
2752                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2753                {
2754                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2755                }
2756                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2757                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2758                }
2759            }
2760
2761            next_offset += envelope_size;
2762
2763            // Decode the remaining unknown envelopes.
2764            while next_offset < end_offset {
2765                _next_ordinal_to_read += 1;
2766                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2767                next_offset += envelope_size;
2768            }
2769
2770            Ok(())
2771        }
2772    }
2773
2774    impl PuppetFactoryCreateResponse {
2775        #[inline(always)]
2776        fn max_ordinal_present(&self) -> u64 {
2777            if let Some(_) = self.view_ref {
2778                return 2;
2779            }
2780            if let Some(_) = self.result {
2781                return 1;
2782            }
2783            0
2784        }
2785    }
2786
2787    impl fidl::encoding::ResourceTypeMarker for PuppetFactoryCreateResponse {
2788        type Borrowed<'a> = &'a mut Self;
2789        fn take_or_borrow<'a>(
2790            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2791        ) -> Self::Borrowed<'a> {
2792            value
2793        }
2794    }
2795
2796    unsafe impl fidl::encoding::TypeMarker for PuppetFactoryCreateResponse {
2797        type Owned = Self;
2798
2799        #[inline(always)]
2800        fn inline_align(_context: fidl::encoding::Context) -> usize {
2801            8
2802        }
2803
2804        #[inline(always)]
2805        fn inline_size(_context: fidl::encoding::Context) -> usize {
2806            16
2807        }
2808    }
2809
2810    unsafe impl
2811        fidl::encoding::Encode<
2812            PuppetFactoryCreateResponse,
2813            fidl::encoding::DefaultFuchsiaResourceDialect,
2814        > for &mut PuppetFactoryCreateResponse
2815    {
2816        unsafe fn encode(
2817            self,
2818            encoder: &mut fidl::encoding::Encoder<
2819                '_,
2820                fidl::encoding::DefaultFuchsiaResourceDialect,
2821            >,
2822            offset: usize,
2823            mut depth: fidl::encoding::Depth,
2824        ) -> fidl::Result<()> {
2825            encoder.debug_check_bounds::<PuppetFactoryCreateResponse>(offset);
2826            // Vector header
2827            let max_ordinal: u64 = self.max_ordinal_present();
2828            encoder.write_num(max_ordinal, offset);
2829            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2830            // Calling encoder.out_of_line_offset(0) is not allowed.
2831            if max_ordinal == 0 {
2832                return Ok(());
2833            }
2834            depth.increment()?;
2835            let envelope_size = 8;
2836            let bytes_len = max_ordinal as usize * envelope_size;
2837            #[allow(unused_variables)]
2838            let offset = encoder.out_of_line_offset(bytes_len);
2839            let mut _prev_end_offset: usize = 0;
2840            if 1 > max_ordinal {
2841                return Ok(());
2842            }
2843
2844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2845            // are envelope_size bytes.
2846            let cur_offset: usize = (1 - 1) * envelope_size;
2847
2848            // Zero reserved fields.
2849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2850
2851            // Safety:
2852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2854            //   envelope_size bytes, there is always sufficient room.
2855            fidl::encoding::encode_in_envelope_optional::<
2856                Result_,
2857                fidl::encoding::DefaultFuchsiaResourceDialect,
2858            >(
2859                self.result.as_ref().map(<Result_ as fidl::encoding::ValueTypeMarker>::borrow),
2860                encoder,
2861                offset + cur_offset,
2862                depth,
2863            )?;
2864
2865            _prev_end_offset = cur_offset + envelope_size;
2866            if 2 > max_ordinal {
2867                return Ok(());
2868            }
2869
2870            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2871            // are envelope_size bytes.
2872            let cur_offset: usize = (2 - 1) * envelope_size;
2873
2874            // Zero reserved fields.
2875            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2876
2877            // Safety:
2878            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2879            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2880            //   envelope_size bytes, there is always sufficient room.
2881            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_ui_views::ViewRef, fidl::encoding::DefaultFuchsiaResourceDialect>(
2882            self.view_ref.as_mut().map(<fidl_fuchsia_ui_views::ViewRef as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
2883            encoder, offset + cur_offset, depth
2884        )?;
2885
2886            _prev_end_offset = cur_offset + envelope_size;
2887
2888            Ok(())
2889        }
2890    }
2891
2892    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2893        for PuppetFactoryCreateResponse
2894    {
2895        #[inline(always)]
2896        fn new_empty() -> Self {
2897            Self::default()
2898        }
2899
2900        unsafe fn decode(
2901            &mut self,
2902            decoder: &mut fidl::encoding::Decoder<
2903                '_,
2904                fidl::encoding::DefaultFuchsiaResourceDialect,
2905            >,
2906            offset: usize,
2907            mut depth: fidl::encoding::Depth,
2908        ) -> fidl::Result<()> {
2909            decoder.debug_check_bounds::<Self>(offset);
2910            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2911                None => return Err(fidl::Error::NotNullable),
2912                Some(len) => len,
2913            };
2914            // Calling decoder.out_of_line_offset(0) is not allowed.
2915            if len == 0 {
2916                return Ok(());
2917            };
2918            depth.increment()?;
2919            let envelope_size = 8;
2920            let bytes_len = len * envelope_size;
2921            let offset = decoder.out_of_line_offset(bytes_len)?;
2922            // Decode the envelope for each type.
2923            let mut _next_ordinal_to_read = 0;
2924            let mut next_offset = offset;
2925            let end_offset = offset + bytes_len;
2926            _next_ordinal_to_read += 1;
2927            if next_offset >= end_offset {
2928                return Ok(());
2929            }
2930
2931            // Decode unknown envelopes for gaps in ordinals.
2932            while _next_ordinal_to_read < 1 {
2933                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2934                _next_ordinal_to_read += 1;
2935                next_offset += envelope_size;
2936            }
2937
2938            let next_out_of_line = decoder.next_out_of_line();
2939            let handles_before = decoder.remaining_handles();
2940            if let Some((inlined, num_bytes, num_handles)) =
2941                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2942            {
2943                let member_inline_size =
2944                    <Result_ as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2945                if inlined != (member_inline_size <= 4) {
2946                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2947                }
2948                let inner_offset;
2949                let mut inner_depth = depth.clone();
2950                if inlined {
2951                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2952                    inner_offset = next_offset;
2953                } else {
2954                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2955                    inner_depth.increment()?;
2956                }
2957                let val_ref = self.result.get_or_insert_with(|| {
2958                    fidl::new_empty!(Result_, fidl::encoding::DefaultFuchsiaResourceDialect)
2959                });
2960                fidl::decode!(
2961                    Result_,
2962                    fidl::encoding::DefaultFuchsiaResourceDialect,
2963                    val_ref,
2964                    decoder,
2965                    inner_offset,
2966                    inner_depth
2967                )?;
2968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2969                {
2970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2971                }
2972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2974                }
2975            }
2976
2977            next_offset += envelope_size;
2978            _next_ordinal_to_read += 1;
2979            if next_offset >= end_offset {
2980                return Ok(());
2981            }
2982
2983            // Decode unknown envelopes for gaps in ordinals.
2984            while _next_ordinal_to_read < 2 {
2985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2986                _next_ordinal_to_read += 1;
2987                next_offset += envelope_size;
2988            }
2989
2990            let next_out_of_line = decoder.next_out_of_line();
2991            let handles_before = decoder.remaining_handles();
2992            if let Some((inlined, num_bytes, num_handles)) =
2993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2994            {
2995                let member_inline_size =
2996                    <fidl_fuchsia_ui_views::ViewRef as fidl::encoding::TypeMarker>::inline_size(
2997                        decoder.context,
2998                    );
2999                if inlined != (member_inline_size <= 4) {
3000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3001                }
3002                let inner_offset;
3003                let mut inner_depth = depth.clone();
3004                if inlined {
3005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3006                    inner_offset = next_offset;
3007                } else {
3008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3009                    inner_depth.increment()?;
3010                }
3011                let val_ref = self.view_ref.get_or_insert_with(|| {
3012                    fidl::new_empty!(
3013                        fidl_fuchsia_ui_views::ViewRef,
3014                        fidl::encoding::DefaultFuchsiaResourceDialect
3015                    )
3016                });
3017                fidl::decode!(
3018                    fidl_fuchsia_ui_views::ViewRef,
3019                    fidl::encoding::DefaultFuchsiaResourceDialect,
3020                    val_ref,
3021                    decoder,
3022                    inner_offset,
3023                    inner_depth
3024                )?;
3025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3026                {
3027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3028                }
3029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3031                }
3032            }
3033
3034            next_offset += envelope_size;
3035
3036            // Decode the remaining unknown envelopes.
3037            while next_offset < end_offset {
3038                _next_ordinal_to_read += 1;
3039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3040                next_offset += envelope_size;
3041            }
3042
3043            Ok(())
3044        }
3045    }
3046}