Skip to main content

fidl_fuchsia_ui_test_conformance/
fidl_fuchsia_ui_test_conformance.rs

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