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 ViewProviderControlHandle {
518    pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
519        self.inner.shutdown_with_epitaph(status.into())
520    }
521}
522
523impl fidl::endpoints::ControlHandle for ViewProviderControlHandle {
524    fn shutdown(&self) {
525        self.inner.shutdown()
526    }
527
528    fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
529        self.inner.shutdown_with_epitaph(status)
530    }
531
532    fn is_closed(&self) -> bool {
533        self.inner.channel().is_closed()
534    }
535    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
536        self.inner.channel().on_closed()
537    }
538
539    #[cfg(target_os = "fuchsia")]
540    fn signal_peer(
541        &self,
542        clear_mask: zx::Signals,
543        set_mask: zx::Signals,
544    ) -> Result<(), zx_status::Status> {
545        use fidl::Peered;
546        self.inner.channel().signal_peer(clear_mask, set_mask)
547    }
548}
549
550impl ViewProviderControlHandle {}
551
552mod internal {
553    use super::*;
554
555    impl fidl::encoding::ResourceTypeMarker for ViewProviderCreateView2Request {
556        type Borrowed<'a> = &'a mut Self;
557        fn take_or_borrow<'a>(
558            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
559        ) -> Self::Borrowed<'a> {
560            value
561        }
562    }
563
564    unsafe impl fidl::encoding::TypeMarker for ViewProviderCreateView2Request {
565        type Owned = Self;
566
567        #[inline(always)]
568        fn inline_align(_context: fidl::encoding::Context) -> usize {
569            8
570        }
571
572        #[inline(always)]
573        fn inline_size(_context: fidl::encoding::Context) -> usize {
574            16
575        }
576    }
577
578    unsafe impl
579        fidl::encoding::Encode<
580            ViewProviderCreateView2Request,
581            fidl::encoding::DefaultFuchsiaResourceDialect,
582        > for &mut ViewProviderCreateView2Request
583    {
584        #[inline]
585        unsafe fn encode(
586            self,
587            encoder: &mut fidl::encoding::Encoder<
588                '_,
589                fidl::encoding::DefaultFuchsiaResourceDialect,
590            >,
591            offset: usize,
592            _depth: fidl::encoding::Depth,
593        ) -> fidl::Result<()> {
594            encoder.debug_check_bounds::<ViewProviderCreateView2Request>(offset);
595            // Delegate to tuple encoding.
596            fidl::encoding::Encode::<
597                ViewProviderCreateView2Request,
598                fidl::encoding::DefaultFuchsiaResourceDialect,
599            >::encode(
600                (<CreateView2Args as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
601                    &mut self.args,
602                ),),
603                encoder,
604                offset,
605                _depth,
606            )
607        }
608    }
609    unsafe impl<
610        T0: fidl::encoding::Encode<CreateView2Args, fidl::encoding::DefaultFuchsiaResourceDialect>,
611    >
612        fidl::encoding::Encode<
613            ViewProviderCreateView2Request,
614            fidl::encoding::DefaultFuchsiaResourceDialect,
615        > for (T0,)
616    {
617        #[inline]
618        unsafe fn encode(
619            self,
620            encoder: &mut fidl::encoding::Encoder<
621                '_,
622                fidl::encoding::DefaultFuchsiaResourceDialect,
623            >,
624            offset: usize,
625            depth: fidl::encoding::Depth,
626        ) -> fidl::Result<()> {
627            encoder.debug_check_bounds::<ViewProviderCreateView2Request>(offset);
628            // Zero out padding regions. There's no need to apply masks
629            // because the unmasked parts will be overwritten by fields.
630            // Write the fields.
631            self.0.encode(encoder, offset + 0, depth)?;
632            Ok(())
633        }
634    }
635
636    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
637        for ViewProviderCreateView2Request
638    {
639        #[inline(always)]
640        fn new_empty() -> Self {
641            Self {
642                args: fidl::new_empty!(
643                    CreateView2Args,
644                    fidl::encoding::DefaultFuchsiaResourceDialect
645                ),
646            }
647        }
648
649        #[inline]
650        unsafe fn decode(
651            &mut self,
652            decoder: &mut fidl::encoding::Decoder<
653                '_,
654                fidl::encoding::DefaultFuchsiaResourceDialect,
655            >,
656            offset: usize,
657            _depth: fidl::encoding::Depth,
658        ) -> fidl::Result<()> {
659            decoder.debug_check_bounds::<Self>(offset);
660            // Verify that padding bytes are zero.
661            fidl::decode!(
662                CreateView2Args,
663                fidl::encoding::DefaultFuchsiaResourceDialect,
664                &mut self.args,
665                decoder,
666                offset + 0,
667                _depth
668            )?;
669            Ok(())
670        }
671    }
672
673    impl fidl::encoding::ResourceTypeMarker for ViewProviderCreateViewWithViewRefRequest {
674        type Borrowed<'a> = &'a mut Self;
675        fn take_or_borrow<'a>(
676            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
677        ) -> Self::Borrowed<'a> {
678            value
679        }
680    }
681
682    unsafe impl fidl::encoding::TypeMarker for ViewProviderCreateViewWithViewRefRequest {
683        type Owned = Self;
684
685        #[inline(always)]
686        fn inline_align(_context: fidl::encoding::Context) -> usize {
687            4
688        }
689
690        #[inline(always)]
691        fn inline_size(_context: fidl::encoding::Context) -> usize {
692            12
693        }
694    }
695
696    unsafe impl
697        fidl::encoding::Encode<
698            ViewProviderCreateViewWithViewRefRequest,
699            fidl::encoding::DefaultFuchsiaResourceDialect,
700        > for &mut ViewProviderCreateViewWithViewRefRequest
701    {
702        #[inline]
703        unsafe fn encode(
704            self,
705            encoder: &mut fidl::encoding::Encoder<
706                '_,
707                fidl::encoding::DefaultFuchsiaResourceDialect,
708            >,
709            offset: usize,
710            _depth: fidl::encoding::Depth,
711        ) -> fidl::Result<()> {
712            encoder.debug_check_bounds::<ViewProviderCreateViewWithViewRefRequest>(offset);
713            // Delegate to tuple encoding.
714            fidl::encoding::Encode::<ViewProviderCreateViewWithViewRefRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
715                (
716                    <fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.token),
717                    <fidl_fuchsia_ui_views::ViewRefControl as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.view_ref_control),
718                    <fidl_fuchsia_ui_views::ViewRef as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.view_ref),
719                ),
720                encoder, offset, _depth
721            )
722        }
723    }
724    unsafe impl<
725        T0: fidl::encoding::Encode<
726                fidl::encoding::HandleType<
727                    fidl::EventPair,
728                    { fidl::ObjectType::EVENTPAIR.into_raw() },
729                    2147483648,
730                >,
731                fidl::encoding::DefaultFuchsiaResourceDialect,
732            >,
733        T1: fidl::encoding::Encode<
734                fidl_fuchsia_ui_views::ViewRefControl,
735                fidl::encoding::DefaultFuchsiaResourceDialect,
736            >,
737        T2: fidl::encoding::Encode<
738                fidl_fuchsia_ui_views::ViewRef,
739                fidl::encoding::DefaultFuchsiaResourceDialect,
740            >,
741    >
742        fidl::encoding::Encode<
743            ViewProviderCreateViewWithViewRefRequest,
744            fidl::encoding::DefaultFuchsiaResourceDialect,
745        > for (T0, T1, T2)
746    {
747        #[inline]
748        unsafe fn encode(
749            self,
750            encoder: &mut fidl::encoding::Encoder<
751                '_,
752                fidl::encoding::DefaultFuchsiaResourceDialect,
753            >,
754            offset: usize,
755            depth: fidl::encoding::Depth,
756        ) -> fidl::Result<()> {
757            encoder.debug_check_bounds::<ViewProviderCreateViewWithViewRefRequest>(offset);
758            // Zero out padding regions. There's no need to apply masks
759            // because the unmasked parts will be overwritten by fields.
760            // Write the fields.
761            self.0.encode(encoder, offset + 0, depth)?;
762            self.1.encode(encoder, offset + 4, depth)?;
763            self.2.encode(encoder, offset + 8, depth)?;
764            Ok(())
765        }
766    }
767
768    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
769        for ViewProviderCreateViewWithViewRefRequest
770    {
771        #[inline(always)]
772        fn new_empty() -> Self {
773            Self {
774                token: fidl::new_empty!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
775                view_ref_control: fidl::new_empty!(
776                    fidl_fuchsia_ui_views::ViewRefControl,
777                    fidl::encoding::DefaultFuchsiaResourceDialect
778                ),
779                view_ref: fidl::new_empty!(
780                    fidl_fuchsia_ui_views::ViewRef,
781                    fidl::encoding::DefaultFuchsiaResourceDialect
782                ),
783            }
784        }
785
786        #[inline]
787        unsafe fn decode(
788            &mut self,
789            decoder: &mut fidl::encoding::Decoder<
790                '_,
791                fidl::encoding::DefaultFuchsiaResourceDialect,
792            >,
793            offset: usize,
794            _depth: fidl::encoding::Depth,
795        ) -> fidl::Result<()> {
796            decoder.debug_check_bounds::<Self>(offset);
797            // Verify that padding bytes are zero.
798            fidl::decode!(fidl::encoding::HandleType<fidl::EventPair, { fidl::ObjectType::EVENTPAIR.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.token, decoder, offset + 0, _depth)?;
799            fidl::decode!(
800                fidl_fuchsia_ui_views::ViewRefControl,
801                fidl::encoding::DefaultFuchsiaResourceDialect,
802                &mut self.view_ref_control,
803                decoder,
804                offset + 4,
805                _depth
806            )?;
807            fidl::decode!(
808                fidl_fuchsia_ui_views::ViewRef,
809                fidl::encoding::DefaultFuchsiaResourceDialect,
810                &mut self.view_ref,
811                decoder,
812                offset + 8,
813                _depth
814            )?;
815            Ok(())
816        }
817    }
818
819    impl CreateView2Args {
820        #[inline(always)]
821        fn max_ordinal_present(&self) -> u64 {
822            if let Some(_) = self.view_creation_token {
823                return 1;
824            }
825            0
826        }
827    }
828
829    impl fidl::encoding::ResourceTypeMarker for CreateView2Args {
830        type Borrowed<'a> = &'a mut Self;
831        fn take_or_borrow<'a>(
832            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
833        ) -> Self::Borrowed<'a> {
834            value
835        }
836    }
837
838    unsafe impl fidl::encoding::TypeMarker for CreateView2Args {
839        type Owned = Self;
840
841        #[inline(always)]
842        fn inline_align(_context: fidl::encoding::Context) -> usize {
843            8
844        }
845
846        #[inline(always)]
847        fn inline_size(_context: fidl::encoding::Context) -> usize {
848            16
849        }
850    }
851
852    unsafe impl
853        fidl::encoding::Encode<CreateView2Args, fidl::encoding::DefaultFuchsiaResourceDialect>
854        for &mut CreateView2Args
855    {
856        unsafe fn encode(
857            self,
858            encoder: &mut fidl::encoding::Encoder<
859                '_,
860                fidl::encoding::DefaultFuchsiaResourceDialect,
861            >,
862            offset: usize,
863            mut depth: fidl::encoding::Depth,
864        ) -> fidl::Result<()> {
865            encoder.debug_check_bounds::<CreateView2Args>(offset);
866            // Vector header
867            let max_ordinal: u64 = self.max_ordinal_present();
868            encoder.write_num(max_ordinal, offset);
869            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
870            // Calling encoder.out_of_line_offset(0) is not allowed.
871            if max_ordinal == 0 {
872                return Ok(());
873            }
874            depth.increment()?;
875            let envelope_size = 8;
876            let bytes_len = max_ordinal as usize * envelope_size;
877            #[allow(unused_variables)]
878            let offset = encoder.out_of_line_offset(bytes_len);
879            let mut _prev_end_offset: usize = 0;
880            if 1 > max_ordinal {
881                return Ok(());
882            }
883
884            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
885            // are envelope_size bytes.
886            let cur_offset: usize = (1 - 1) * envelope_size;
887
888            // Zero reserved fields.
889            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
890
891            // Safety:
892            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
893            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
894            //   envelope_size bytes, there is always sufficient room.
895            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_ui_views::ViewCreationToken, fidl::encoding::DefaultFuchsiaResourceDialect>(
896            self.view_creation_token.as_mut().map(<fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
897            encoder, offset + cur_offset, depth
898        )?;
899
900            _prev_end_offset = cur_offset + envelope_size;
901
902            Ok(())
903        }
904    }
905
906    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
907        for CreateView2Args
908    {
909        #[inline(always)]
910        fn new_empty() -> Self {
911            Self::default()
912        }
913
914        unsafe fn decode(
915            &mut self,
916            decoder: &mut fidl::encoding::Decoder<
917                '_,
918                fidl::encoding::DefaultFuchsiaResourceDialect,
919            >,
920            offset: usize,
921            mut depth: fidl::encoding::Depth,
922        ) -> fidl::Result<()> {
923            decoder.debug_check_bounds::<Self>(offset);
924            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
925                None => return Err(fidl::Error::NotNullable),
926                Some(len) => len,
927            };
928            // Calling decoder.out_of_line_offset(0) is not allowed.
929            if len == 0 {
930                return Ok(());
931            };
932            depth.increment()?;
933            let envelope_size = 8;
934            let bytes_len = len * envelope_size;
935            let offset = decoder.out_of_line_offset(bytes_len)?;
936            // Decode the envelope for each type.
937            let mut _next_ordinal_to_read = 0;
938            let mut next_offset = offset;
939            let end_offset = offset + bytes_len;
940            _next_ordinal_to_read += 1;
941            if next_offset >= end_offset {
942                return Ok(());
943            }
944
945            // Decode unknown envelopes for gaps in ordinals.
946            while _next_ordinal_to_read < 1 {
947                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
948                _next_ordinal_to_read += 1;
949                next_offset += envelope_size;
950            }
951
952            let next_out_of_line = decoder.next_out_of_line();
953            let handles_before = decoder.remaining_handles();
954            if let Some((inlined, num_bytes, num_handles)) =
955                fidl::encoding::decode_envelope_header(decoder, next_offset)?
956            {
957                let member_inline_size = <fidl_fuchsia_ui_views::ViewCreationToken as fidl::encoding::TypeMarker>::inline_size(decoder.context);
958                if inlined != (member_inline_size <= 4) {
959                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
960                }
961                let inner_offset;
962                let mut inner_depth = depth.clone();
963                if inlined {
964                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
965                    inner_offset = next_offset;
966                } else {
967                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
968                    inner_depth.increment()?;
969                }
970                let val_ref = self.view_creation_token.get_or_insert_with(|| {
971                    fidl::new_empty!(
972                        fidl_fuchsia_ui_views::ViewCreationToken,
973                        fidl::encoding::DefaultFuchsiaResourceDialect
974                    )
975                });
976                fidl::decode!(
977                    fidl_fuchsia_ui_views::ViewCreationToken,
978                    fidl::encoding::DefaultFuchsiaResourceDialect,
979                    val_ref,
980                    decoder,
981                    inner_offset,
982                    inner_depth
983                )?;
984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
985                {
986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
987                }
988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
990                }
991            }
992
993            next_offset += envelope_size;
994
995            // Decode the remaining unknown envelopes.
996            while next_offset < end_offset {
997                _next_ordinal_to_read += 1;
998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
999                next_offset += envelope_size;
1000            }
1001
1002            Ok(())
1003        }
1004    }
1005}