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        let protocol_name = <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
97        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
98    }
99
100    pub fn into_channel(self) -> fidl::Channel {
101        self.client.into_channel()
102    }
103
104    /// Waits until an event arrives and returns it. It is safe for other
105    /// threads to make concurrent requests while waiting for an event.
106    pub fn wait_for_event(
107        &self,
108        deadline: zx::MonotonicInstant,
109    ) -> Result<ViewProviderEvent, fidl::Error> {
110        ViewProviderEvent::decode(self.client.wait_for_event(deadline)?)
111    }
112
113    /// Creates a new View under the control of the ViewProvider.
114    ///
115    /// `token` is one half of the shared eventpair which will bind the new View
116    /// to its associated ViewHolder.  The ViewProvider will use `token` to
117    /// create its internal View representation.  The caller is expected to use
118    /// its half to create corresponding ViewHolder object.
119    ///
120    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
121    /// same event pair. The `view_ref` can be cloned before passing it to this method,
122    /// which will allow clients to track the view (e.g., in a focus chain update).
123    ///
124    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
125    /// will fail.
126    pub fn r#create_view_with_view_ref(
127        &self,
128        mut token: fidl::EventPair,
129        mut view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
130        mut view_ref: fidl_fuchsia_ui_views::ViewRef,
131    ) -> Result<(), fidl::Error> {
132        self.client.send::<ViewProviderCreateViewWithViewRefRequest>(
133            (token, &mut view_ref_control, &mut view_ref),
134            0x586d23a5e4f69a86,
135            fidl::encoding::DynamicFlags::empty(),
136        )
137    }
138
139    /// Creates a new View under the control of the ViewProvider.
140    ///
141    /// The args are provided as a table, for forward compatibility.  See documentation on the
142    /// individual table fields.
143    pub fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
144        self.client.send::<ViewProviderCreateView2Request>(
145            (&mut args,),
146            0x78b4a51b5e630482,
147            fidl::encoding::DynamicFlags::empty(),
148        )
149    }
150}
151
152#[cfg(target_os = "fuchsia")]
153impl From<ViewProviderSynchronousProxy> for zx::Handle {
154    fn from(value: ViewProviderSynchronousProxy) -> Self {
155        value.into_channel().into()
156    }
157}
158
159#[cfg(target_os = "fuchsia")]
160impl From<fidl::Channel> for ViewProviderSynchronousProxy {
161    fn from(value: fidl::Channel) -> Self {
162        Self::new(value)
163    }
164}
165
166#[cfg(target_os = "fuchsia")]
167impl fidl::endpoints::FromClient for ViewProviderSynchronousProxy {
168    type Protocol = ViewProviderMarker;
169
170    fn from_client(value: fidl::endpoints::ClientEnd<ViewProviderMarker>) -> Self {
171        Self::new(value.into_channel())
172    }
173}
174
175#[derive(Debug, Clone)]
176pub struct ViewProviderProxy {
177    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
178}
179
180impl fidl::endpoints::Proxy for ViewProviderProxy {
181    type Protocol = ViewProviderMarker;
182
183    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
184        Self::new(inner)
185    }
186
187    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
188        self.client.into_channel().map_err(|client| Self { client })
189    }
190
191    fn as_channel(&self) -> &::fidl::AsyncChannel {
192        self.client.as_channel()
193    }
194}
195
196impl ViewProviderProxy {
197    /// Create a new Proxy for fuchsia.ui.app/ViewProvider.
198    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
199        let protocol_name = <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
200        Self { client: fidl::client::Client::new(channel, protocol_name) }
201    }
202
203    /// Get a Stream of events from the remote end of the protocol.
204    ///
205    /// # Panics
206    ///
207    /// Panics if the event stream was already taken.
208    pub fn take_event_stream(&self) -> ViewProviderEventStream {
209        ViewProviderEventStream { event_receiver: self.client.take_event_receiver() }
210    }
211
212    /// Creates a new View under the control of the ViewProvider.
213    ///
214    /// `token` is one half of the shared eventpair which will bind the new View
215    /// to its associated ViewHolder.  The ViewProvider will use `token` to
216    /// create its internal View representation.  The caller is expected to use
217    /// its half to create corresponding ViewHolder object.
218    ///
219    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
220    /// same event pair. The `view_ref` can be cloned before passing it to this method,
221    /// which will allow clients to track the view (e.g., in a focus chain update).
222    ///
223    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
224    /// will fail.
225    pub 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        ViewProviderProxyInterface::r#create_view_with_view_ref(
232            self,
233            token,
234            view_ref_control,
235            view_ref,
236        )
237    }
238
239    /// Creates a new View under the control of the ViewProvider.
240    ///
241    /// The args are provided as a table, for forward compatibility.  See documentation on the
242    /// individual table fields.
243    pub fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
244        ViewProviderProxyInterface::r#create_view2(self, args)
245    }
246}
247
248impl ViewProviderProxyInterface for ViewProviderProxy {
249    fn r#create_view_with_view_ref(
250        &self,
251        mut token: fidl::EventPair,
252        mut view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
253        mut view_ref: fidl_fuchsia_ui_views::ViewRef,
254    ) -> Result<(), fidl::Error> {
255        self.client.send::<ViewProviderCreateViewWithViewRefRequest>(
256            (token, &mut view_ref_control, &mut view_ref),
257            0x586d23a5e4f69a86,
258            fidl::encoding::DynamicFlags::empty(),
259        )
260    }
261
262    fn r#create_view2(&self, mut args: CreateView2Args) -> Result<(), fidl::Error> {
263        self.client.send::<ViewProviderCreateView2Request>(
264            (&mut args,),
265            0x78b4a51b5e630482,
266            fidl::encoding::DynamicFlags::empty(),
267        )
268    }
269}
270
271pub struct ViewProviderEventStream {
272    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
273}
274
275impl std::marker::Unpin for ViewProviderEventStream {}
276
277impl futures::stream::FusedStream for ViewProviderEventStream {
278    fn is_terminated(&self) -> bool {
279        self.event_receiver.is_terminated()
280    }
281}
282
283impl futures::Stream for ViewProviderEventStream {
284    type Item = Result<ViewProviderEvent, fidl::Error>;
285
286    fn poll_next(
287        mut self: std::pin::Pin<&mut Self>,
288        cx: &mut std::task::Context<'_>,
289    ) -> std::task::Poll<Option<Self::Item>> {
290        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
291            &mut self.event_receiver,
292            cx
293        )?) {
294            Some(buf) => std::task::Poll::Ready(Some(ViewProviderEvent::decode(buf))),
295            None => std::task::Poll::Ready(None),
296        }
297    }
298}
299
300#[derive(Debug)]
301pub enum ViewProviderEvent {}
302
303impl ViewProviderEvent {
304    /// Decodes a message buffer as a [`ViewProviderEvent`].
305    fn decode(
306        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
307    ) -> Result<ViewProviderEvent, fidl::Error> {
308        let (bytes, _handles) = buf.split_mut();
309        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
310        debug_assert_eq!(tx_header.tx_id, 0);
311        match tx_header.ordinal {
312            _ => Err(fidl::Error::UnknownOrdinal {
313                ordinal: tx_header.ordinal,
314                protocol_name: <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
315            }),
316        }
317    }
318}
319
320/// A Stream of incoming requests for fuchsia.ui.app/ViewProvider.
321pub struct ViewProviderRequestStream {
322    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
323    is_terminated: bool,
324}
325
326impl std::marker::Unpin for ViewProviderRequestStream {}
327
328impl futures::stream::FusedStream for ViewProviderRequestStream {
329    fn is_terminated(&self) -> bool {
330        self.is_terminated
331    }
332}
333
334impl fidl::endpoints::RequestStream for ViewProviderRequestStream {
335    type Protocol = ViewProviderMarker;
336    type ControlHandle = ViewProviderControlHandle;
337
338    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
339        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
340    }
341
342    fn control_handle(&self) -> Self::ControlHandle {
343        ViewProviderControlHandle { inner: self.inner.clone() }
344    }
345
346    fn into_inner(
347        self,
348    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
349    {
350        (self.inner, self.is_terminated)
351    }
352
353    fn from_inner(
354        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
355        is_terminated: bool,
356    ) -> Self {
357        Self { inner, is_terminated }
358    }
359}
360
361impl futures::Stream for ViewProviderRequestStream {
362    type Item = Result<ViewProviderRequest, fidl::Error>;
363
364    fn poll_next(
365        mut self: std::pin::Pin<&mut Self>,
366        cx: &mut std::task::Context<'_>,
367    ) -> std::task::Poll<Option<Self::Item>> {
368        let this = &mut *self;
369        if this.inner.check_shutdown(cx) {
370            this.is_terminated = true;
371            return std::task::Poll::Ready(None);
372        }
373        if this.is_terminated {
374            panic!("polled ViewProviderRequestStream after completion");
375        }
376        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
377            |bytes, handles| {
378                match this.inner.channel().read_etc(cx, bytes, handles) {
379                    std::task::Poll::Ready(Ok(())) => {}
380                    std::task::Poll::Pending => return std::task::Poll::Pending,
381                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
382                        this.is_terminated = true;
383                        return std::task::Poll::Ready(None);
384                    }
385                    std::task::Poll::Ready(Err(e)) => {
386                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
387                            e.into(),
388                        ))))
389                    }
390                }
391
392                // A message has been received from the channel
393                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
394
395                std::task::Poll::Ready(Some(match header.ordinal {
396                    0x586d23a5e4f69a86 => {
397                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
398                        let mut req = fidl::new_empty!(
399                            ViewProviderCreateViewWithViewRefRequest,
400                            fidl::encoding::DefaultFuchsiaResourceDialect
401                        );
402                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ViewProviderCreateViewWithViewRefRequest>(&header, _body_bytes, handles, &mut req)?;
403                        let control_handle =
404                            ViewProviderControlHandle { inner: this.inner.clone() };
405                        Ok(ViewProviderRequest::CreateViewWithViewRef {
406                            token: req.token,
407                            view_ref_control: req.view_ref_control,
408                            view_ref: req.view_ref,
409
410                            control_handle,
411                        })
412                    }
413                    0x78b4a51b5e630482 => {
414                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
415                        let mut req = fidl::new_empty!(
416                            ViewProviderCreateView2Request,
417                            fidl::encoding::DefaultFuchsiaResourceDialect
418                        );
419                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ViewProviderCreateView2Request>(&header, _body_bytes, handles, &mut req)?;
420                        let control_handle =
421                            ViewProviderControlHandle { inner: this.inner.clone() };
422                        Ok(ViewProviderRequest::CreateView2 { args: req.args, control_handle })
423                    }
424                    _ => Err(fidl::Error::UnknownOrdinal {
425                        ordinal: header.ordinal,
426                        protocol_name:
427                            <ViewProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
428                    }),
429                }))
430            },
431        )
432    }
433}
434
435/// ViewProvider is the standard mechanism for two modules to each obtain half
436/// of a shared eventpair token.  The shared token is a capability allowing the
437/// modules to ask Scenic to create a ViewHolder/View pair.  The resulting
438/// View and ViewHolder are linked together until either one is destroyed.
439///
440/// Modules are free to use any other mechanism to agree upon the shared
441/// eventpair token, and use this to create the linked ViewHolder/View.
442/// ViewProvider is given for the convenience of clients that don't require
443/// a more complex implementation.
444#[derive(Debug)]
445pub enum ViewProviderRequest {
446    /// Creates a new View under the control of the ViewProvider.
447    ///
448    /// `token` is one half of the shared eventpair which will bind the new View
449    /// to its associated ViewHolder.  The ViewProvider will use `token` to
450    /// create its internal View representation.  The caller is expected to use
451    /// its half to create corresponding ViewHolder object.
452    ///
453    /// `view_ref_control` and `view_ref` are two typed handles to each half of the
454    /// same event pair. The `view_ref` can be cloned before passing it to this method,
455    /// which will allow clients to track the view (e.g., in a focus chain update).
456    ///
457    /// `view_ref_control` must not have the ZX_RIGHT_DUPLICATE set, or view creation
458    /// will fail.
459    CreateViewWithViewRef {
460        token: fidl::EventPair,
461        view_ref_control: fidl_fuchsia_ui_views::ViewRefControl,
462        view_ref: fidl_fuchsia_ui_views::ViewRef,
463        control_handle: ViewProviderControlHandle,
464    },
465    /// Creates a new View under the control of the ViewProvider.
466    ///
467    /// The args are provided as a table, for forward compatibility.  See documentation on the
468    /// individual table fields.
469    CreateView2 { args: CreateView2Args, control_handle: ViewProviderControlHandle },
470}
471
472impl ViewProviderRequest {
473    #[allow(irrefutable_let_patterns)]
474    pub fn into_create_view_with_view_ref(
475        self,
476    ) -> Option<(
477        fidl::EventPair,
478        fidl_fuchsia_ui_views::ViewRefControl,
479        fidl_fuchsia_ui_views::ViewRef,
480        ViewProviderControlHandle,
481    )> {
482        if let ViewProviderRequest::CreateViewWithViewRef {
483            token,
484            view_ref_control,
485            view_ref,
486            control_handle,
487        } = self
488        {
489            Some((token, view_ref_control, view_ref, control_handle))
490        } else {
491            None
492        }
493    }
494
495    #[allow(irrefutable_let_patterns)]
496    pub fn into_create_view2(self) -> Option<(CreateView2Args, ViewProviderControlHandle)> {
497        if let ViewProviderRequest::CreateView2 { args, control_handle } = self {
498            Some((args, control_handle))
499        } else {
500            None
501        }
502    }
503
504    /// Name of the method defined in FIDL
505    pub fn method_name(&self) -> &'static str {
506        match *self {
507            ViewProviderRequest::CreateViewWithViewRef { .. } => "create_view_with_view_ref",
508            ViewProviderRequest::CreateView2 { .. } => "create_view2",
509        }
510    }
511}
512
513#[derive(Debug, Clone)]
514pub struct ViewProviderControlHandle {
515    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
516}
517
518impl fidl::endpoints::ControlHandle for ViewProviderControlHandle {
519    fn shutdown(&self) {
520        self.inner.shutdown()
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}