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