Skip to main content

fidl_fuchsia_ui_app/
fidl_fuchsia_ui_app.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_app__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct ViewProviderCreateView2Request {
16    pub args: CreateView2Args,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20    for ViewProviderCreateView2Request
21{
22}
23
24#[derive(Debug, PartialEq)]
25pub struct ViewProviderCreateViewWithViewRefRequest {
26    pub token: fidl::EventPair,
27    pub view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
28    pub view_ref: fidl_fuchsia_ui_views::ViewRef,
29}
30
31impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
32    for ViewProviderCreateViewWithViewRefRequest
33{
34}
35
36#[derive(Debug, Default, PartialEq)]
37pub struct CreateView2Args {
38    /// Non-optional.  This token can be provided to Flatland to attach the client's child view
39    /// to the parent's viewport.
40    pub view_creation_token: Option<fidl_fuchsia_ui_views::ViewCreationToken>,
41    #[doc(hidden)]
42    pub __source_breaking: fidl::marker::SourceBreaking,
43}
44
45impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for CreateView2Args {}
46
47#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
48pub struct ViewProviderMarker;
49
50impl fidl::endpoints::ProtocolMarker for ViewProviderMarker {
51    type Proxy = ViewProviderProxy;
52    type RequestStream = ViewProviderRequestStream;
53    #[cfg(target_os = "fuchsia")]
54    type SynchronousProxy = ViewProviderSynchronousProxy;
55
56    const DEBUG_NAME: &'static str = "fuchsia.ui.app.ViewProvider";
57}
58impl fidl::endpoints::DiscoverableProtocolMarker for ViewProviderMarker {}
59
60pub trait ViewProviderProxyInterface: Send + Sync {
61    fn r#create_view_with_view_ref(
62        &self,
63        token: fidl::EventPair,
64        view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
65        view_ref: fidl_fuchsia_ui_views::ViewRef,
66    ) -> Result<(), fidl::Error>;
67    fn r#create_view2(&self, args: CreateView2Args) -> Result<(), fidl::Error>;
68}
69#[derive(Debug)]
70#[cfg(target_os = "fuchsia")]
71pub struct ViewProviderSynchronousProxy {
72    client: fidl::client::sync::Client,
73}
74
75#[cfg(target_os = "fuchsia")]
76impl fidl::endpoints::SynchronousProxy for ViewProviderSynchronousProxy {
77    type Proxy = ViewProviderProxy;
78    type Protocol = ViewProviderMarker;
79
80    fn from_channel(inner: fidl::Channel) -> Self {
81        Self::new(inner)
82    }
83
84    fn into_channel(self) -> fidl::Channel {
85        self.client.into_channel()
86    }
87
88    fn as_channel(&self) -> &fidl::Channel {
89        self.client.as_channel()
90    }
91}
92
93#[cfg(target_os = "fuchsia")]
94impl ViewProviderSynchronousProxy {
95    pub fn new(channel: fidl::Channel) -> Self {
96        Self { client: fidl::client::sync::Client::new(channel) }
97    }
98
99    pub fn into_channel(self) -> fidl::Channel {
100        self.client.into_channel()
101    }
102
103    /// Waits until an event arrives and returns it. It is safe for other
104    /// threads to make concurrent requests while waiting for an event.
105    pub fn wait_for_event(
106        &self,
107        deadline: zx::MonotonicInstant,
108    ) -> Result<ViewProviderEvent, fidl::Error> {
109        ViewProviderEvent::decode(self.client.wait_for_event::<ViewProviderMarker>(deadline)?)
110    }
111
112    /// Creates a new View under the control of the ViewProvider.
113    ///
114    /// `token` is one half of the shared eventpair which will bind the new View
115    /// to its associated ViewHolder.  The ViewProvider will use `token` to
116    /// create its internal View representation.  The caller is expected to use
117    /// its half to create corresponding ViewHolder object.
118    ///
119    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
120    /// same event pair. The `view_ref` can be cloned before passing it to this method,
121    /// which will allow clients to track the view (e.g., in a focus chain update).
122    ///
123    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
124    /// will fail.
125    pub fn r#create_view_with_view_ref(
126        &self,
127        mut token: fidl::EventPair,
128        mut view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
129        mut view_ref: fidl_fuchsia_ui_views::ViewRef,
130    ) -> Result<(), fidl::Error> {
131        self.client.send::<ViewProviderCreateViewWithViewRefRequest>(
132            (token, &mut view_ref_control, &mut view_ref),
133            0x586d23a5e4f69a86,
134            fidl::encoding::DynamicFlags::empty(),
135        )
136    }
137
138    /// Creates a new View under the control of the ViewProvider.
139    ///
140    /// The args are provided as a table, for forward compatibility.  See documentation on the
141    /// individual table fields.
142    pub fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
143        self.client.send::<ViewProviderCreateView2Request>(
144            (&mut args,),
145            0x78b4a51b5e630482,
146            fidl::encoding::DynamicFlags::empty(),
147        )
148    }
149}
150
151#[cfg(target_os = "fuchsia")]
152impl From<ViewProviderSynchronousProxy> for zx::NullableHandle {
153    fn from(value: ViewProviderSynchronousProxy) -> Self {
154        value.into_channel().into()
155    }
156}
157
158#[cfg(target_os = "fuchsia")]
159impl From<fidl::Channel> for ViewProviderSynchronousProxy {
160    fn from(value: fidl::Channel) -> Self {
161        Self::new(value)
162    }
163}
164
165#[cfg(target_os = "fuchsia")]
166impl fidl::endpoints::FromClient for ViewProviderSynchronousProxy {
167    type Protocol = ViewProviderMarker;
168
169    fn from_client(value: fidl::endpoints::ClientEnd<ViewProviderMarker>) -> Self {
170        Self::new(value.into_channel())
171    }
172}
173
174#[derive(Debug, Clone)]
175pub struct ViewProviderProxy {
176    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
177}
178
179impl fidl::endpoints::Proxy for ViewProviderProxy {
180    type Protocol = ViewProviderMarker;
181
182    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
183        Self::new(inner)
184    }
185
186    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
187        self.client.into_channel().map_err(|client| Self { client })
188    }
189
190    fn as_channel(&self) -> &::fidl::AsyncChannel {
191        self.client.as_channel()
192    }
193}
194
195impl ViewProviderProxy {
196    /// Create a new Proxy for fuchsia.ui.app/ViewProvider.
197    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
198        let protocol_name = <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
199        Self { client: fidl::client::Client::new(channel, protocol_name) }
200    }
201
202    /// Get a Stream of events from the remote end of the protocol.
203    ///
204    /// # Panics
205    ///
206    /// Panics if the event stream was already taken.
207    pub fn take_event_stream(&self) -> ViewProviderEventStream {
208        ViewProviderEventStream { event_receiver: self.client.take_event_receiver() }
209    }
210
211    /// Creates a new View under the control of the ViewProvider.
212    ///
213    /// `token` is one half of the shared eventpair which will bind the new View
214    /// to its associated ViewHolder.  The ViewProvider will use `token` to
215    /// create its internal View representation.  The caller is expected to use
216    /// its half to create corresponding ViewHolder object.
217    ///
218    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
219    /// same event pair. The `view_ref` can be cloned before passing it to this method,
220    /// which will allow clients to track the view (e.g., in a focus chain update).
221    ///
222    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
223    /// will fail.
224    pub fn r#create_view_with_view_ref(
225        &self,
226        mut token: fidl::EventPair,
227        mut view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
228        mut view_ref: fidl_fuchsia_ui_views::ViewRef,
229    ) -> Result<(), fidl::Error> {
230        ViewProviderProxyInterface::r#create_view_with_view_ref(
231            self,
232            token,
233            view_ref_control,
234            view_ref,
235        )
236    }
237
238    /// Creates a new View under the control of the ViewProvider.
239    ///
240    /// The args are provided as a table, for forward compatibility.  See documentation on the
241    /// individual table fields.
242    pub fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
243        ViewProviderProxyInterface::r#create_view2(self, args)
244    }
245}
246
247impl ViewProviderProxyInterface for ViewProviderProxy {
248    fn r#create_view_with_view_ref(
249        &self,
250        mut token: fidl::EventPair,
251        mut view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
252        mut view_ref: fidl_fuchsia_ui_views::ViewRef,
253    ) -> Result<(), fidl::Error> {
254        self.client.send::<ViewProviderCreateViewWithViewRefRequest>(
255            (token, &mut view_ref_control, &mut view_ref),
256            0x586d23a5e4f69a86,
257            fidl::encoding::DynamicFlags::empty(),
258        )
259    }
260
261    fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
262        self.client.send::<ViewProviderCreateView2Request>(
263            (&mut args,),
264            0x78b4a51b5e630482,
265            fidl::encoding::DynamicFlags::empty(),
266        )
267    }
268}
269
270pub struct ViewProviderEventStream {
271    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
272}
273
274impl std::marker::Unpin for ViewProviderEventStream {}
275
276impl futures::stream::FusedStream for ViewProviderEventStream {
277    fn is_terminated(&self) -> bool {
278        self.event_receiver.is_terminated()
279    }
280}
281
282impl futures::Stream for ViewProviderEventStream {
283    type Item = Result<ViewProviderEvent, fidl::Error>;
284
285    fn poll_next(
286        mut self: std::pin::Pin<&mut Self>,
287        cx: &mut std::task::Context<'_>,
288    ) -> std::task::Poll<Option<Self::Item>> {
289        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
290            &mut self.event_receiver,
291            cx
292        )?) {
293            Some(buf) => std::task::Poll::Ready(Some(ViewProviderEvent::decode(buf))),
294            None => std::task::Poll::Ready(None),
295        }
296    }
297}
298
299#[derive(Debug)]
300pub enum ViewProviderEvent {}
301
302impl ViewProviderEvent {
303    /// Decodes a message buffer as a [`ViewProviderEvent`].
304    fn decode(
305        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
306    ) -> Result<ViewProviderEvent, fidl::Error> {
307        let (bytes, _handles) = buf.split_mut();
308        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
309        debug_assert_eq!(tx_header.tx_id, 0);
310        match tx_header.ordinal {
311            _ => Err(fidl::Error::UnknownOrdinal {
312                ordinal: tx_header.ordinal,
313                protocol_name: <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
314            }),
315        }
316    }
317}
318
319/// A Stream of incoming requests for fuchsia.ui.app/ViewProvider.
320pub struct ViewProviderRequestStream {
321    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
322    is_terminated: bool,
323}
324
325impl std::marker::Unpin for ViewProviderRequestStream {}
326
327impl futures::stream::FusedStream for ViewProviderRequestStream {
328    fn is_terminated(&self) -> bool {
329        self.is_terminated
330    }
331}
332
333impl fidl::endpoints::RequestStream for ViewProviderRequestStream {
334    type Protocol = ViewProviderMarker;
335    type ControlHandle = ViewProviderControlHandle;
336
337    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
338        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
339    }
340
341    fn control_handle(&self) -> Self::ControlHandle {
342        ViewProviderControlHandle { inner: self.inner.clone() }
343    }
344
345    fn into_inner(
346        self,
347    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
348    {
349        (self.inner, self.is_terminated)
350    }
351
352    fn from_inner(
353        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
354        is_terminated: bool,
355    ) -> Self {
356        Self { inner, is_terminated }
357    }
358}
359
360impl futures::Stream for ViewProviderRequestStream {
361    type Item = Result<ViewProviderRequest, fidl::Error>;
362
363    fn poll_next(
364        mut self: std::pin::Pin<&mut Self>,
365        cx: &mut std::task::Context<'_>,
366    ) -> std::task::Poll<Option<Self::Item>> {
367        let this = &mut *self;
368        if this.inner.check_shutdown(cx) {
369            this.is_terminated = true;
370            return std::task::Poll::Ready(None);
371        }
372        if this.is_terminated {
373            panic!("polled ViewProviderRequestStream after completion");
374        }
375        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
376            |bytes, handles| {
377                match this.inner.channel().read_etc(cx, bytes, handles) {
378                    std::task::Poll::Ready(Ok(())) => {}
379                    std::task::Poll::Pending => return std::task::Poll::Pending,
380                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
381                        this.is_terminated = true;
382                        return std::task::Poll::Ready(None);
383                    }
384                    std::task::Poll::Ready(Err(e)) => {
385                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
386                            e.into(),
387                        ))));
388                    }
389                }
390
391                // A message has been received from the channel
392                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
393
394                std::task::Poll::Ready(Some(match header.ordinal {
395                    0x586d23a5e4f69a86 => {
396                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
397                        let mut req = fidl::new_empty!(
398                            ViewProviderCreateViewWithViewRefRequest,
399                            fidl::encoding::DefaultFuchsiaResourceDialect
400                        );
401                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ViewProviderCreateViewWithViewRefRequest>(&header, _body_bytes, handles, &mut req)?;
402                        let control_handle =
403                            ViewProviderControlHandle { inner: this.inner.clone() };
404                        Ok(ViewProviderRequest::CreateViewWithViewRef {
405                            token: req.token,
406                            view_ref_control: req.view_ref_control,
407                            view_ref: req.view_ref,
408
409                            control_handle,
410                        })
411                    }
412                    0x78b4a51b5e630482 => {
413                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
414                        let mut req = fidl::new_empty!(
415                            ViewProviderCreateView2Request,
416                            fidl::encoding::DefaultFuchsiaResourceDialect
417                        );
418                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ViewProviderCreateView2Request>(&header, _body_bytes, handles, &mut req)?;
419                        let control_handle =
420                            ViewProviderControlHandle { inner: this.inner.clone() };
421                        Ok(ViewProviderRequest::CreateView2 { args: req.args, control_handle })
422                    }
423                    _ => Err(fidl::Error::UnknownOrdinal {
424                        ordinal: header.ordinal,
425                        protocol_name:
426                            <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
427                    }),
428                }))
429            },
430        )
431    }
432}
433
434/// ViewProvider is the standard mechanism for two modules to each obtain half
435/// of a shared eventpair token.  The shared token is a capability allowing the
436/// modules to ask Scenic to create a ViewHolder/View pair.  The resulting
437/// View and ViewHolder are linked together until either one is destroyed.
438///
439/// Modules are free to use any other mechanism to agree upon the shared
440/// eventpair token, and use this to create the linked ViewHolder/View.
441/// ViewProvider is given for the convenience of clients that don't require
442/// a more complex implementation.
443#[derive(Debug)]
444pub enum ViewProviderRequest {
445    /// Creates a new View under the control of the ViewProvider.
446    ///
447    /// `token` is one half of the shared eventpair which will bind the new View
448    /// to its associated ViewHolder.  The ViewProvider will use `token` to
449    /// create its internal View representation.  The caller is expected to use
450    /// its half to create corresponding ViewHolder object.
451    ///
452    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
453    /// same event pair. The `view_ref` can be cloned before passing it to this method,
454    /// which will allow clients to track the view (e.g., in a focus chain update).
455    ///
456    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
457    /// will fail.
458    CreateViewWithViewRef {
459        token: fidl::EventPair,
460        view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
461        view_ref: fidl_fuchsia_ui_views::ViewRef,
462        control_handle: ViewProviderControlHandle,
463    },
464    /// Creates a new View under the control of the ViewProvider.
465    ///
466    /// The args are provided as a table, for forward compatibility.  See documentation on the
467    /// individual table fields.
468    CreateView2 { args: CreateView2Args, control_handle: ViewProviderControlHandle },
469}
470
471impl ViewProviderRequest {
472    #[allow(irrefutable_let_patterns)]
473    pub fn into_create_view_with_view_ref(
474        self,
475    ) -> Option<(
476        fidl::EventPair,
477        fidl_fuchsia_ui_views::ViewRefControl,
478        fidl_fuchsia_ui_views::ViewRef,
479        ViewProviderControlHandle,
480    )> {
481        if let ViewProviderRequest::CreateViewWithViewRef {
482            token,
483            view_ref_control,
484            view_ref,
485            control_handle,
486        } = self
487        {
488            Some((token, view_ref_control, view_ref, control_handle))
489        } else {
490            None
491        }
492    }
493
494    #[allow(irrefutable_let_patterns)]
495    pub fn into_create_view2(self) -> Option<(CreateView2Args, ViewProviderControlHandle)> {
496        if let ViewProviderRequest::CreateView2 { args, control_handle } = self {
497            Some((args, control_handle))
498        } else {
499            None
500        }
501    }
502
503    /// Name of the method defined in FIDL
504    pub fn method_name(&self) -> &'static str {
505        match *self {
506            ViewProviderRequest::CreateViewWithViewRef { .. } => "create_view_with_view_ref",
507            ViewProviderRequest::CreateView2 { .. } => "create_view2",
508        }
509    }
510}
511
512#[derive(Debug, Clone)]
513pub struct ViewProviderControlHandle {
514    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
515}
516
517impl fidl::endpoints::ControlHandle for ViewProviderControlHandle {
518    fn shutdown(&self) {
519        self.inner.shutdown()
520    }
521
522    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
523        self.inner.shutdown_with_epitaph(status)
524    }
525
526    fn is_closed(&self) -> bool {
527        self.inner.channel().is_closed()
528    }
529    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
530        self.inner.channel().on_closed()
531    }
532
533    #[cfg(target_os = "fuchsia")]
534    fn signal_peer(
535        &self,
536        clear_mask: zx::Signals,
537        set_mask: zx::Signals,
538    ) -> Result<(), zx_status::Status> {
539        use fidl::Peered;
540        self.inner.channel().signal_peer(clear_mask, set_mask)
541    }
542}
543
544impl ViewProviderControlHandle {}
545
546mod internal {
547    use super::*;
548
549    impl fidl::encoding::ResourceTypeMarker for ViewProviderCreateView2Request {
550        type Borrowed<'a> = &'a mut Self;
551        fn take_or_borrow<'a>(
552            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
553        ) -> Self::Borrowed<'a> {
554            value
555        }
556    }
557
558    unsafe impl fidl::encoding::TypeMarker for ViewProviderCreateView2Request {
559        type Owned = Self;
560
561        #[inline(always)]
562        fn inline_align(_context: fidl::encoding::Context) -> usize {
563            8
564        }
565
566        #[inline(always)]
567        fn inline_size(_context: fidl::encoding::Context) -> usize {
568            16
569        }
570    }
571
572    unsafe impl
573        fidl::encoding::Encode<
574            ViewProviderCreateView2Request,
575            fidl::encoding::DefaultFuchsiaResourceDialect,
576        > for &mut ViewProviderCreateView2Request
577    {
578        #[inline]
579        unsafe fn encode(
580            self,
581            encoder: &mut fidl::encoding::Encoder<
582                '_,
583                fidl::encoding::DefaultFuchsiaResourceDialect,
584            >,
585            offset: usize,
586            _depth: fidl::encoding::Depth,
587        ) -> fidl::Result<()> {
588            encoder.debug_check_bounds::<ViewProviderCreateView2Request>(offset);
589            // Delegate to tuple encoding.
590            fidl::encoding::Encode::<
591                ViewProviderCreateView2Request,
592                fidl::encoding::DefaultFuchsiaResourceDialect,
593            >::encode(
594                (<CreateView2Args as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
595                    &mut self.args,
596                ),),
597                encoder,
598                offset,
599                _depth,
600            )
601        }
602    }
603    unsafe impl<
604        T0: fidl::encoding::Encode<CreateView2Args, fidl::encoding::DefaultFuchsiaResourceDialect>,
605    >
606        fidl::encoding::Encode<
607            ViewProviderCreateView2Request,
608            fidl::encoding::DefaultFuchsiaResourceDialect,
609        > for (T0,)
610    {
611        #[inline]
612        unsafe fn encode(
613            self,
614            encoder: &mut fidl::encoding::Encoder<
615                '_,
616                fidl::encoding::DefaultFuchsiaResourceDialect,
617            >,
618            offset: usize,
619            depth: fidl::encoding::Depth,
620        ) -> fidl::Result<()> {
621            encoder.debug_check_bounds::<ViewProviderCreateView2Request>(offset);
622            // Zero out padding regions. There's no need to apply masks
623            // because the unmasked parts will be overwritten by fields.
624            // Write the fields.
625            self.0.encode(encoder, offset + 0, depth)?;
626            Ok(())
627        }
628    }
629
630    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
631        for ViewProviderCreateView2Request
632    {
633        #[inline(always)]
634        fn new_empty() -> Self {
635            Self {
636                args: fidl::new_empty!(
637                    CreateView2Args,
638                    fidl::encoding::DefaultFuchsiaResourceDialect
639                ),
640            }
641        }
642
643        #[inline]
644        unsafe fn decode(
645            &mut self,
646            decoder: &mut fidl::encoding::Decoder<
647                '_,
648                fidl::encoding::DefaultFuchsiaResourceDialect,
649            >,
650            offset: usize,
651            _depth: fidl::encoding::Depth,
652        ) -> fidl::Result<()> {
653            decoder.debug_check_bounds::<Self>(offset);
654            // Verify that padding bytes are zero.
655            fidl::decode!(
656                CreateView2Args,
657                fidl::encoding::DefaultFuchsiaResourceDialect,
658                &mut self.args,
659                decoder,
660                offset + 0,
661                _depth
662            )?;
663            Ok(())
664        }
665    }
666
667    impl fidl::encoding::ResourceTypeMarker for ViewProviderCreateViewWithViewRefRequest {
668        type Borrowed<'a> = &'a mut Self;
669        fn take_or_borrow<'a>(
670            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
671        ) -> Self::Borrowed<'a> {
672            value
673        }
674    }
675
676    unsafe impl fidl::encoding::TypeMarker for ViewProviderCreateViewWithViewRefRequest {
677        type Owned = Self;
678
679        #[inline(always)]
680        fn inline_align(_context: fidl::encoding::Context) -> usize {
681            4
682        }
683
684        #[inline(always)]
685        fn inline_size(_context: fidl::encoding::Context) -> usize {
686            12
687        }
688    }
689
690    unsafe impl
691        fidl::encoding::Encode<
692            ViewProviderCreateViewWithViewRefRequest,
693            fidl::encoding::DefaultFuchsiaResourceDialect,
694        > for &mut ViewProviderCreateViewWithViewRefRequest
695    {
696        #[inline]
697        unsafe fn encode(
698            self,
699            encoder: &mut fidl::encoding::Encoder<
700                '_,
701                fidl::encoding::DefaultFuchsiaResourceDialect,
702            >,
703            offset: usize,
704            _depth: fidl::encoding::Depth,
705        ) -> fidl::Result<()> {
706            encoder.debug_check_bounds::<ViewProviderCreateViewWithViewRefRequest>(offset);
707            // Delegate to tuple encoding.
708            fidl::encoding::Encode::<ViewProviderCreateViewWithViewRefRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
709                (
710                    <fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.token),
711                    <fidl_fuchsia_ui_views::ViewRefControl as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.view_ref_control),
712                    <fidl_fuchsia_ui_views::ViewRef as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.view_ref),
713                ),
714                encoder, offset, _depth
715            )
716        }
717    }
718    unsafe impl<
719        T0: fidl::encoding::Encode<
720                fidl::encoding::HandleType<
721                    fidl::EventPair,
722                    { fidl::ObjectType::EVENTPAIR.into_raw() },
723                    2147483648,
724                >,
725                fidl::encoding::DefaultFuchsiaResourceDialect,
726            >,
727        T1: fidl::encoding::Encode<
728                fidl_fuchsia_ui_views::ViewRefControl,
729                fidl::encoding::DefaultFuchsiaResourceDialect,
730            >,
731        T2: fidl::encoding::Encode<
732                fidl_fuchsia_ui_views::ViewRef,
733                fidl::encoding::DefaultFuchsiaResourceDialect,
734            >,
735    >
736        fidl::encoding::Encode<
737            ViewProviderCreateViewWithViewRefRequest,
738            fidl::encoding::DefaultFuchsiaResourceDialect,
739        > for (T0, T1, T2)
740    {
741        #[inline]
742        unsafe fn encode(
743            self,
744            encoder: &mut fidl::encoding::Encoder<
745                '_,
746                fidl::encoding::DefaultFuchsiaResourceDialect,
747            >,
748            offset: usize,
749            depth: fidl::encoding::Depth,
750        ) -> fidl::Result<()> {
751            encoder.debug_check_bounds::<ViewProviderCreateViewWithViewRefRequest>(offset);
752            // Zero out padding regions. There's no need to apply masks
753            // because the unmasked parts will be overwritten by fields.
754            // Write the fields.
755            self.0.encode(encoder, offset + 0, depth)?;
756            self.1.encode(encoder, offset + 4, depth)?;
757            self.2.encode(encoder, offset + 8, depth)?;
758            Ok(())
759        }
760    }
761
762    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
763        for ViewProviderCreateViewWithViewRefRequest
764    {
765        #[inline(always)]
766        fn new_empty() -> Self {
767            Self {
768                token: fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
769                view_ref_control: fidl::new_empty!(
770                    fidl_fuchsia_ui_views::ViewRefControl,
771                    fidl::encoding::DefaultFuchsiaResourceDialect
772                ),
773                view_ref: fidl::new_empty!(
774                    fidl_fuchsia_ui_views::ViewRef,
775                    fidl::encoding::DefaultFuchsiaResourceDialect
776                ),
777            }
778        }
779
780        #[inline]
781        unsafe fn decode(
782            &mut self,
783            decoder: &mut fidl::encoding::Decoder<
784                '_,
785                fidl::encoding::DefaultFuchsiaResourceDialect,
786            >,
787            offset: usize,
788            _depth: fidl::encoding::Depth,
789        ) -> fidl::Result<()> {
790            decoder.debug_check_bounds::<Self>(offset);
791            // Verify that padding bytes are zero.
792            fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.token, decoder, offset + 0, _depth)?;
793            fidl::decode!(
794                fidl_fuchsia_ui_views::ViewRefControl,
795                fidl::encoding::DefaultFuchsiaResourceDialect,
796                &mut self.view_ref_control,
797                decoder,
798                offset + 4,
799                _depth
800            )?;
801            fidl::decode!(
802                fidl_fuchsia_ui_views::ViewRef,
803                fidl::encoding::DefaultFuchsiaResourceDialect,
804                &mut self.view_ref,
805                decoder,
806                offset + 8,
807                _depth
808            )?;
809            Ok(())
810        }
811    }
812
813    impl CreateView2Args {
814        #[inline(always)]
815        fn max_ordinal_present(&self) -> u64 {
816            if let Some(_) = self.view_creation_token {
817                return 1;
818            }
819            0
820        }
821    }
822
823    impl fidl::encoding::ResourceTypeMarker for CreateView2Args {
824        type Borrowed<'a> = &'a mut Self;
825        fn take_or_borrow<'a>(
826            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
827        ) -> Self::Borrowed<'a> {
828            value
829        }
830    }
831
832    unsafe impl fidl::encoding::TypeMarker for CreateView2Args {
833        type Owned = Self;
834
835        #[inline(always)]
836        fn inline_align(_context: fidl::encoding::Context) -> usize {
837            8
838        }
839
840        #[inline(always)]
841        fn inline_size(_context: fidl::encoding::Context) -> usize {
842            16
843        }
844    }
845
846    unsafe impl
847        fidl::encoding::Encode<CreateView2Args, fidl::encoding::DefaultFuchsiaResourceDialect>
848        for &mut CreateView2Args
849    {
850        unsafe fn encode(
851            self,
852            encoder: &mut fidl::encoding::Encoder<
853                '_,
854                fidl::encoding::DefaultFuchsiaResourceDialect,
855            >,
856            offset: usize,
857            mut depth: fidl::encoding::Depth,
858        ) -> fidl::Result<()> {
859            encoder.debug_check_bounds::<CreateView2Args>(offset);
860            // Vector header
861            let max_ordinal: u64 = self.max_ordinal_present();
862            encoder.write_num(max_ordinal, offset);
863            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
864            // Calling encoder.out_of_line_offset(0) is not allowed.
865            if max_ordinal == 0 {
866                return Ok(());
867            }
868            depth.increment()?;
869            let envelope_size = 8;
870            let bytes_len = max_ordinal as usize * envelope_size;
871            #[allow(unused_variables)]
872            let offset = encoder.out_of_line_offset(bytes_len);
873            let mut _prev_end_offset: usize = 0;
874            if 1 > max_ordinal {
875                return Ok(());
876            }
877
878            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
879            // are envelope_size bytes.
880            let cur_offset: usize = (1 - 1) * envelope_size;
881
882            // Zero reserved fields.
883            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
884
885            // Safety:
886            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
887            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
888            //   envelope_size bytes, there is always sufficient room.
889            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_ui_views::ViewCreationToken, fidl::encoding::DefaultFuchsiaResourceDialect>(
890            self.view_creation_token.as_mut().map(<fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
891            encoder, offset + cur_offset, depth
892        )?;
893
894            _prev_end_offset = cur_offset + envelope_size;
895
896            Ok(())
897        }
898    }
899
900    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
901        for CreateView2Args
902    {
903        #[inline(always)]
904        fn new_empty() -> Self {
905            Self::default()
906        }
907
908        unsafe fn decode(
909            &mut self,
910            decoder: &mut fidl::encoding::Decoder<
911                '_,
912                fidl::encoding::DefaultFuchsiaResourceDialect,
913            >,
914            offset: usize,
915            mut depth: fidl::encoding::Depth,
916        ) -> fidl::Result<()> {
917            decoder.debug_check_bounds::<Self>(offset);
918            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
919                None => return Err(fidl::Error::NotNullable),
920                Some(len) => len,
921            };
922            // Calling decoder.out_of_line_offset(0) is not allowed.
923            if len == 0 {
924                return Ok(());
925            };
926            depth.increment()?;
927            let envelope_size = 8;
928            let bytes_len = len * envelope_size;
929            let offset = decoder.out_of_line_offset(bytes_len)?;
930            // Decode the envelope for each type.
931            let mut _next_ordinal_to_read = 0;
932            let mut next_offset = offset;
933            let end_offset = offset + bytes_len;
934            _next_ordinal_to_read += 1;
935            if next_offset >= end_offset {
936                return Ok(());
937            }
938
939            // Decode unknown envelopes for gaps in ordinals.
940            while _next_ordinal_to_read < 1 {
941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
942                _next_ordinal_to_read += 1;
943                next_offset += envelope_size;
944            }
945
946            let next_out_of_line = decoder.next_out_of_line();
947            let handles_before = decoder.remaining_handles();
948            if let Some((inlined, num_bytes, num_handles)) =
949                fidl::encoding::decode_envelope_header(decoder, next_offset)?
950            {
951                let member_inline_size = <fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::TypeMarker>::inline_size(decoder.context);
952                if inlined != (member_inline_size <= 4) {
953                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
954                }
955                let inner_offset;
956                let mut inner_depth = depth.clone();
957                if inlined {
958                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
959                    inner_offset = next_offset;
960                } else {
961                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
962                    inner_depth.increment()?;
963                }
964                let val_ref = self.view_creation_token.get_or_insert_with(|| {
965                    fidl::new_empty!(
966                        fidl_fuchsia_ui_views::ViewCreationToken,
967                        fidl::encoding::DefaultFuchsiaResourceDialect
968                    )
969                });
970                fidl::decode!(
971                    fidl_fuchsia_ui_views::ViewCreationToken,
972                    fidl::encoding::DefaultFuchsiaResourceDialect,
973                    val_ref,
974                    decoder,
975                    inner_offset,
976                    inner_depth
977                )?;
978                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
979                {
980                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
981                }
982                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
983                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
984                }
985            }
986
987            next_offset += envelope_size;
988
989            // Decode the remaining unknown envelopes.
990            while next_offset < end_offset {
991                _next_ordinal_to_read += 1;
992                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
993                next_offset += envelope_size;
994            }
995
996            Ok(())
997        }
998    }
999}