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