fidl_fuchsia_fonts/
fidl_fuchsia_fonts.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_fonts__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct ProviderGetFontResponse {
16    pub response: Option<Box<Response>>,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ProviderGetFontResponse {}
20
21#[derive(Debug, PartialEq)]
22pub struct ProviderGetTypefaceResponse {
23    pub response: TypefaceResponse,
24}
25
26impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
27    for ProviderGetTypefaceResponse
28{
29}
30
31#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
32pub struct ProviderRegisterFontSetEventListenerRequest {
33    pub listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
34}
35
36impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
37    for ProviderRegisterFontSetEventListenerRequest
38{
39}
40
41#[derive(Debug, PartialEq)]
42pub struct Response {
43    pub buffer: fidl_fuchsia_mem::Buffer,
44    /// Buffer identifier for the buffer. Responses with the same buffer_id are
45    /// guaranteed to contain the same data in the buffer. Clients may use this
46    /// value to detect if they already have the font cached in parsed form.
47    pub buffer_id: u32,
48    /// Font index within `buffer`. Used for font formats that may contain more
49    /// than one font per file, e.g. TTC (TrueType Collection).
50    pub font_index: u32,
51}
52
53impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Response {}
54
55/// Response to a TypefaceRequest. Contains the digital font file and metadata corresponding to a
56/// returned typeface. Clients are expected to cache the results if they plan to reuse them.
57///
58/// If a matching typeface cannot be found, the table will be empty.
59#[derive(Debug, Default, PartialEq)]
60pub struct TypefaceResponse {
61    /// A memory buffer containing the bytes of a digital font file.
62    /// It is the client's responsibility to identify the type of file and to parse it (usually by
63    /// delegating to FreeType or a similar library).
64    pub buffer: Option<fidl_fuchsia_mem::Buffer>,
65    /// Identifier for the buffer. Responses with the same `buffer_id` are guaranteed to contain the
66    /// same data in the buffer. Clients may use this value to detect if they already have the font
67    /// cached in parsed form.
68    pub buffer_id: Option<u32>,
69    /// Index of the returned typeface within `buffer`. Used for digital font formats that may
70    /// contain more than one typeface per file, e.g. TTC (TrueType Collection).
71    pub font_index: Option<u32>,
72    #[doc(hidden)]
73    pub __source_breaking: fidl::marker::SourceBreaking,
74}
75
76impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for TypefaceResponse {}
77
78#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
79pub struct FontSetEventListenerMarker;
80
81impl fidl::endpoints::ProtocolMarker for FontSetEventListenerMarker {
82    type Proxy = FontSetEventListenerProxy;
83    type RequestStream = FontSetEventListenerRequestStream;
84    #[cfg(target_os = "fuchsia")]
85    type SynchronousProxy = FontSetEventListenerSynchronousProxy;
86
87    const DEBUG_NAME: &'static str = "(anonymous) FontSetEventListener";
88}
89
90pub trait FontSetEventListenerProxyInterface: Send + Sync {
91    type OnFontSetUpdatedResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
92    fn r#on_font_set_updated(
93        &self,
94        event: &FontSetUpdatedEvent,
95    ) -> Self::OnFontSetUpdatedResponseFut;
96}
97#[derive(Debug)]
98#[cfg(target_os = "fuchsia")]
99pub struct FontSetEventListenerSynchronousProxy {
100    client: fidl::client::sync::Client,
101}
102
103#[cfg(target_os = "fuchsia")]
104impl fidl::endpoints::SynchronousProxy for FontSetEventListenerSynchronousProxy {
105    type Proxy = FontSetEventListenerProxy;
106    type Protocol = FontSetEventListenerMarker;
107
108    fn from_channel(inner: fidl::Channel) -> Self {
109        Self::new(inner)
110    }
111
112    fn into_channel(self) -> fidl::Channel {
113        self.client.into_channel()
114    }
115
116    fn as_channel(&self) -> &fidl::Channel {
117        self.client.as_channel()
118    }
119}
120
121#[cfg(target_os = "fuchsia")]
122impl FontSetEventListenerSynchronousProxy {
123    pub fn new(channel: fidl::Channel) -> Self {
124        let protocol_name =
125            <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
126        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
127    }
128
129    pub fn into_channel(self) -> fidl::Channel {
130        self.client.into_channel()
131    }
132
133    /// Waits until an event arrives and returns it. It is safe for other
134    /// threads to make concurrent requests while waiting for an event.
135    pub fn wait_for_event(
136        &self,
137        deadline: zx::MonotonicInstant,
138    ) -> Result<FontSetEventListenerEvent, fidl::Error> {
139        FontSetEventListenerEvent::decode(self.client.wait_for_event(deadline)?)
140    }
141
142    /// The set of fonts available in the `Provider` has changed. See
143    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
144    pub fn r#on_font_set_updated(
145        &self,
146        mut event: &FontSetUpdatedEvent,
147        ___deadline: zx::MonotonicInstant,
148    ) -> Result<(), fidl::Error> {
149        let _response = self.client.send_query::<
150            FontSetEventListenerOnFontSetUpdatedRequest,
151            fidl::encoding::EmptyPayload,
152        >(
153            (event,),
154            0xf0cd2d121f881f9,
155            fidl::encoding::DynamicFlags::empty(),
156            ___deadline,
157        )?;
158        Ok(_response)
159    }
160}
161
162#[cfg(target_os = "fuchsia")]
163impl From<FontSetEventListenerSynchronousProxy> for zx::Handle {
164    fn from(value: FontSetEventListenerSynchronousProxy) -> Self {
165        value.into_channel().into()
166    }
167}
168
169#[cfg(target_os = "fuchsia")]
170impl From<fidl::Channel> for FontSetEventListenerSynchronousProxy {
171    fn from(value: fidl::Channel) -> Self {
172        Self::new(value)
173    }
174}
175
176#[cfg(target_os = "fuchsia")]
177impl fidl::endpoints::FromClient for FontSetEventListenerSynchronousProxy {
178    type Protocol = FontSetEventListenerMarker;
179
180    fn from_client(value: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>) -> Self {
181        Self::new(value.into_channel())
182    }
183}
184
185#[derive(Debug, Clone)]
186pub struct FontSetEventListenerProxy {
187    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
188}
189
190impl fidl::endpoints::Proxy for FontSetEventListenerProxy {
191    type Protocol = FontSetEventListenerMarker;
192
193    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
194        Self::new(inner)
195    }
196
197    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
198        self.client.into_channel().map_err(|client| Self { client })
199    }
200
201    fn as_channel(&self) -> &::fidl::AsyncChannel {
202        self.client.as_channel()
203    }
204}
205
206impl FontSetEventListenerProxy {
207    /// Create a new Proxy for fuchsia.fonts/FontSetEventListener.
208    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
209        let protocol_name =
210            <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
211        Self { client: fidl::client::Client::new(channel, protocol_name) }
212    }
213
214    /// Get a Stream of events from the remote end of the protocol.
215    ///
216    /// # Panics
217    ///
218    /// Panics if the event stream was already taken.
219    pub fn take_event_stream(&self) -> FontSetEventListenerEventStream {
220        FontSetEventListenerEventStream { event_receiver: self.client.take_event_receiver() }
221    }
222
223    /// The set of fonts available in the `Provider` has changed. See
224    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
225    pub fn r#on_font_set_updated(
226        &self,
227        mut event: &FontSetUpdatedEvent,
228    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
229        FontSetEventListenerProxyInterface::r#on_font_set_updated(self, event)
230    }
231}
232
233impl FontSetEventListenerProxyInterface for FontSetEventListenerProxy {
234    type OnFontSetUpdatedResponseFut =
235        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
236    fn r#on_font_set_updated(
237        &self,
238        mut event: &FontSetUpdatedEvent,
239    ) -> Self::OnFontSetUpdatedResponseFut {
240        fn _decode(
241            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
242        ) -> Result<(), fidl::Error> {
243            let _response = fidl::client::decode_transaction_body::<
244                fidl::encoding::EmptyPayload,
245                fidl::encoding::DefaultFuchsiaResourceDialect,
246                0xf0cd2d121f881f9,
247            >(_buf?)?;
248            Ok(_response)
249        }
250        self.client.send_query_and_decode::<FontSetEventListenerOnFontSetUpdatedRequest, ()>(
251            (event,),
252            0xf0cd2d121f881f9,
253            fidl::encoding::DynamicFlags::empty(),
254            _decode,
255        )
256    }
257}
258
259pub struct FontSetEventListenerEventStream {
260    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
261}
262
263impl std::marker::Unpin for FontSetEventListenerEventStream {}
264
265impl futures::stream::FusedStream for FontSetEventListenerEventStream {
266    fn is_terminated(&self) -> bool {
267        self.event_receiver.is_terminated()
268    }
269}
270
271impl futures::Stream for FontSetEventListenerEventStream {
272    type Item = Result<FontSetEventListenerEvent, fidl::Error>;
273
274    fn poll_next(
275        mut self: std::pin::Pin<&mut Self>,
276        cx: &mut std::task::Context<'_>,
277    ) -> std::task::Poll<Option<Self::Item>> {
278        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
279            &mut self.event_receiver,
280            cx
281        )?) {
282            Some(buf) => std::task::Poll::Ready(Some(FontSetEventListenerEvent::decode(buf))),
283            None => std::task::Poll::Ready(None),
284        }
285    }
286}
287
288#[derive(Debug)]
289pub enum FontSetEventListenerEvent {}
290
291impl FontSetEventListenerEvent {
292    /// Decodes a message buffer as a [`FontSetEventListenerEvent`].
293    fn decode(
294        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
295    ) -> Result<FontSetEventListenerEvent, fidl::Error> {
296        let (bytes, _handles) = buf.split_mut();
297        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
298        debug_assert_eq!(tx_header.tx_id, 0);
299        match tx_header.ordinal {
300            _ => Err(fidl::Error::UnknownOrdinal {
301                ordinal: tx_header.ordinal,
302                protocol_name:
303                    <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
304            }),
305        }
306    }
307}
308
309/// A Stream of incoming requests for fuchsia.fonts/FontSetEventListener.
310pub struct FontSetEventListenerRequestStream {
311    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
312    is_terminated: bool,
313}
314
315impl std::marker::Unpin for FontSetEventListenerRequestStream {}
316
317impl futures::stream::FusedStream for FontSetEventListenerRequestStream {
318    fn is_terminated(&self) -> bool {
319        self.is_terminated
320    }
321}
322
323impl fidl::endpoints::RequestStream for FontSetEventListenerRequestStream {
324    type Protocol = FontSetEventListenerMarker;
325    type ControlHandle = FontSetEventListenerControlHandle;
326
327    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
328        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
329    }
330
331    fn control_handle(&self) -> Self::ControlHandle {
332        FontSetEventListenerControlHandle { inner: self.inner.clone() }
333    }
334
335    fn into_inner(
336        self,
337    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
338    {
339        (self.inner, self.is_terminated)
340    }
341
342    fn from_inner(
343        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
344        is_terminated: bool,
345    ) -> Self {
346        Self { inner, is_terminated }
347    }
348}
349
350impl futures::Stream for FontSetEventListenerRequestStream {
351    type Item = Result<FontSetEventListenerRequest, fidl::Error>;
352
353    fn poll_next(
354        mut self: std::pin::Pin<&mut Self>,
355        cx: &mut std::task::Context<'_>,
356    ) -> std::task::Poll<Option<Self::Item>> {
357        let this = &mut *self;
358        if this.inner.check_shutdown(cx) {
359            this.is_terminated = true;
360            return std::task::Poll::Ready(None);
361        }
362        if this.is_terminated {
363            panic!("polled FontSetEventListenerRequestStream after completion");
364        }
365        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
366            |bytes, handles| {
367                match this.inner.channel().read_etc(cx, bytes, handles) {
368                    std::task::Poll::Ready(Ok(())) => {}
369                    std::task::Poll::Pending => return std::task::Poll::Pending,
370                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
371                        this.is_terminated = true;
372                        return std::task::Poll::Ready(None);
373                    }
374                    std::task::Poll::Ready(Err(e)) => {
375                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
376                            e.into(),
377                        ))))
378                    }
379                }
380
381                // A message has been received from the channel
382                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
383
384                std::task::Poll::Ready(Some(match header.ordinal {
385                0xf0cd2d121f881f9 => {
386                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
387                    let mut req = fidl::new_empty!(FontSetEventListenerOnFontSetUpdatedRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
388                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<FontSetEventListenerOnFontSetUpdatedRequest>(&header, _body_bytes, handles, &mut req)?;
389                    let control_handle = FontSetEventListenerControlHandle {
390                        inner: this.inner.clone(),
391                    };
392                    Ok(FontSetEventListenerRequest::OnFontSetUpdated {event: req.event,
393
394                        responder: FontSetEventListenerOnFontSetUpdatedResponder {
395                            control_handle: std::mem::ManuallyDrop::new(control_handle),
396                            tx_id: header.tx_id,
397                        },
398                    })
399                }
400                _ => Err(fidl::Error::UnknownOrdinal {
401                    ordinal: header.ordinal,
402                    protocol_name: <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
403                }),
404            }))
405            },
406        )
407    }
408}
409
410/// Protocol for listening to possible events that may occur in the `Provider`'s set of fonts.
411///
412/// Register a listener using [`fuchsia.fonts/Provider.RegisterFontSetEventListener`].
413#[derive(Debug)]
414pub enum FontSetEventListenerRequest {
415    /// The set of fonts available in the `Provider` has changed. See
416    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
417    OnFontSetUpdated {
418        event: FontSetUpdatedEvent,
419        responder: FontSetEventListenerOnFontSetUpdatedResponder,
420    },
421}
422
423impl FontSetEventListenerRequest {
424    #[allow(irrefutable_let_patterns)]
425    pub fn into_on_font_set_updated(
426        self,
427    ) -> Option<(FontSetUpdatedEvent, FontSetEventListenerOnFontSetUpdatedResponder)> {
428        if let FontSetEventListenerRequest::OnFontSetUpdated { event, responder } = self {
429            Some((event, responder))
430        } else {
431            None
432        }
433    }
434
435    /// Name of the method defined in FIDL
436    pub fn method_name(&self) -> &'static str {
437        match *self {
438            FontSetEventListenerRequest::OnFontSetUpdated { .. } => "on_font_set_updated",
439        }
440    }
441}
442
443#[derive(Debug, Clone)]
444pub struct FontSetEventListenerControlHandle {
445    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
446}
447
448impl fidl::endpoints::ControlHandle for FontSetEventListenerControlHandle {
449    fn shutdown(&self) {
450        self.inner.shutdown()
451    }
452    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
453        self.inner.shutdown_with_epitaph(status)
454    }
455
456    fn is_closed(&self) -> bool {
457        self.inner.channel().is_closed()
458    }
459    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
460        self.inner.channel().on_closed()
461    }
462
463    #[cfg(target_os = "fuchsia")]
464    fn signal_peer(
465        &self,
466        clear_mask: zx::Signals,
467        set_mask: zx::Signals,
468    ) -> Result<(), zx_status::Status> {
469        use fidl::Peered;
470        self.inner.channel().signal_peer(clear_mask, set_mask)
471    }
472}
473
474impl FontSetEventListenerControlHandle {}
475
476#[must_use = "FIDL methods require a response to be sent"]
477#[derive(Debug)]
478pub struct FontSetEventListenerOnFontSetUpdatedResponder {
479    control_handle: std::mem::ManuallyDrop<FontSetEventListenerControlHandle>,
480    tx_id: u32,
481}
482
483/// Set the the channel to be shutdown (see [`FontSetEventListenerControlHandle::shutdown`])
484/// if the responder is dropped without sending a response, so that the client
485/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
486impl std::ops::Drop for FontSetEventListenerOnFontSetUpdatedResponder {
487    fn drop(&mut self) {
488        self.control_handle.shutdown();
489        // Safety: drops once, never accessed again
490        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
491    }
492}
493
494impl fidl::endpoints::Responder for FontSetEventListenerOnFontSetUpdatedResponder {
495    type ControlHandle = FontSetEventListenerControlHandle;
496
497    fn control_handle(&self) -> &FontSetEventListenerControlHandle {
498        &self.control_handle
499    }
500
501    fn drop_without_shutdown(mut self) {
502        // Safety: drops once, never accessed again due to mem::forget
503        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
504        // Prevent Drop from running (which would shut down the channel)
505        std::mem::forget(self);
506    }
507}
508
509impl FontSetEventListenerOnFontSetUpdatedResponder {
510    /// Sends a response to the FIDL transaction.
511    ///
512    /// Sets the channel to shutdown if an error occurs.
513    pub fn send(self) -> Result<(), fidl::Error> {
514        let _result = self.send_raw();
515        if _result.is_err() {
516            self.control_handle.shutdown();
517        }
518        self.drop_without_shutdown();
519        _result
520    }
521
522    /// Similar to "send" but does not shutdown the channel if an error occurs.
523    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
524        let _result = self.send_raw();
525        self.drop_without_shutdown();
526        _result
527    }
528
529    fn send_raw(&self) -> Result<(), fidl::Error> {
530        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
531            (),
532            self.tx_id,
533            0xf0cd2d121f881f9,
534            fidl::encoding::DynamicFlags::empty(),
535        )
536    }
537}
538
539#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
540pub struct ProviderMarker;
541
542impl fidl::endpoints::ProtocolMarker for ProviderMarker {
543    type Proxy = ProviderProxy;
544    type RequestStream = ProviderRequestStream;
545    #[cfg(target_os = "fuchsia")]
546    type SynchronousProxy = ProviderSynchronousProxy;
547
548    const DEBUG_NAME: &'static str = "fuchsia.fonts.Provider";
549}
550impl fidl::endpoints::DiscoverableProtocolMarker for ProviderMarker {}
551
552pub trait ProviderProxyInterface: Send + Sync {
553    type GetFontResponseFut: std::future::Future<Output = Result<Option<Box<Response>>, fidl::Error>>
554        + Send;
555    fn r#get_font(&self, request: &Request) -> Self::GetFontResponseFut;
556    type GetFamilyInfoResponseFut: std::future::Future<Output = Result<Option<Box<FamilyInfo>>, fidl::Error>>
557        + Send;
558    fn r#get_family_info(&self, family: &str) -> Self::GetFamilyInfoResponseFut;
559    type GetTypefaceResponseFut: std::future::Future<Output = Result<TypefaceResponse, fidl::Error>>
560        + Send;
561    fn r#get_typeface(&self, request: &TypefaceRequest) -> Self::GetTypefaceResponseFut;
562    type GetFontFamilyInfoResponseFut: std::future::Future<Output = Result<FontFamilyInfo, fidl::Error>>
563        + Send;
564    fn r#get_font_family_info(&self, family: &FamilyName) -> Self::GetFontFamilyInfoResponseFut;
565    type RegisterFontSetEventListenerResponseFut: std::future::Future<Output = Result<(), fidl::Error>>
566        + Send;
567    fn r#register_font_set_event_listener(
568        &self,
569        listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
570    ) -> Self::RegisterFontSetEventListenerResponseFut;
571}
572#[derive(Debug)]
573#[cfg(target_os = "fuchsia")]
574pub struct ProviderSynchronousProxy {
575    client: fidl::client::sync::Client,
576}
577
578#[cfg(target_os = "fuchsia")]
579impl fidl::endpoints::SynchronousProxy for ProviderSynchronousProxy {
580    type Proxy = ProviderProxy;
581    type Protocol = ProviderMarker;
582
583    fn from_channel(inner: fidl::Channel) -> Self {
584        Self::new(inner)
585    }
586
587    fn into_channel(self) -> fidl::Channel {
588        self.client.into_channel()
589    }
590
591    fn as_channel(&self) -> &fidl::Channel {
592        self.client.as_channel()
593    }
594}
595
596#[cfg(target_os = "fuchsia")]
597impl ProviderSynchronousProxy {
598    pub fn new(channel: fidl::Channel) -> Self {
599        let protocol_name = <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
600        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
601    }
602
603    pub fn into_channel(self) -> fidl::Channel {
604        self.client.into_channel()
605    }
606
607    /// Waits until an event arrives and returns it. It is safe for other
608    /// threads to make concurrent requests while waiting for an event.
609    pub fn wait_for_event(
610        &self,
611        deadline: zx::MonotonicInstant,
612    ) -> Result<ProviderEvent, fidl::Error> {
613        ProviderEvent::decode(self.client.wait_for_event(deadline)?)
614    }
615
616    /// Deprecated. See `GetTypeface`.
617    ///
618    /// Returns font that matches specified `request`.
619    pub fn r#get_font(
620        &self,
621        mut request: &Request,
622        ___deadline: zx::MonotonicInstant,
623    ) -> Result<Option<Box<Response>>, fidl::Error> {
624        let _response = self.client.send_query::<ProviderGetFontRequest, ProviderGetFontResponse>(
625            (request,),
626            0x6daeaad83184076b,
627            fidl::encoding::DynamicFlags::empty(),
628            ___deadline,
629        )?;
630        Ok(_response.response)
631    }
632
633    /// Deprecated. See `GetFontFamilyInfo`.
634    ///
635    /// Returns information for the specified font family or null if there is
636    /// no family with the specified name. This function respects family name
637    /// aliases and ignores case, so request for "robotoSLAB" will return
638    /// FamilyInfo for "Roboto Slab".
639    pub fn r#get_family_info(
640        &self,
641        mut family: &str,
642        ___deadline: zx::MonotonicInstant,
643    ) -> Result<Option<Box<FamilyInfo>>, fidl::Error> {
644        let _response =
645            self.client.send_query::<ProviderGetFamilyInfoRequest, ProviderGetFamilyInfoResponse>(
646                (family,),
647                0x27aba13280090db3,
648                fidl::encoding::DynamicFlags::empty(),
649                ___deadline,
650            )?;
651        Ok(_response.family_info)
652    }
653
654    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
655    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
656    /// is used to disable fallbacks.)
657    pub fn r#get_typeface(
658        &self,
659        mut request: &TypefaceRequest,
660        ___deadline: zx::MonotonicInstant,
661    ) -> Result<TypefaceResponse, fidl::Error> {
662        let _response =
663            self.client.send_query::<ProviderGetTypefaceRequest, ProviderGetTypefaceResponse>(
664                (request,),
665                0x5481d24f1a4b0671,
666                fidl::encoding::DynamicFlags::empty(),
667                ___deadline,
668            )?;
669        Ok(_response.response)
670    }
671
672    /// Returns information for the specified font family, or an empty table if there is no family
673    /// with the specified name.
674    ///
675    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
676    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
677    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
678    pub fn r#get_font_family_info(
679        &self,
680        mut family: &FamilyName,
681        ___deadline: zx::MonotonicInstant,
682    ) -> Result<FontFamilyInfo, fidl::Error> {
683        let _response = self
684            .client
685            .send_query::<ProviderGetFontFamilyInfoRequest, ProviderGetFontFamilyInfoResponse>(
686                (family,),
687                0x7520ee83bf25c9ca,
688                fidl::encoding::DynamicFlags::empty(),
689                ___deadline,
690            )?;
691        Ok(_response.family_info)
692    }
693
694    /// Register a listener to be notified when the set of available fonts or mappings has changed.
695    /// A client can register as many listeners as it wishes.
696    ///
697    /// To unregister, close the channel.
698    pub fn r#register_font_set_event_listener(
699        &self,
700        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
701        ___deadline: zx::MonotonicInstant,
702    ) -> Result<(), fidl::Error> {
703        let _response = self.client.send_query::<
704            ProviderRegisterFontSetEventListenerRequest,
705            fidl::encoding::EmptyPayload,
706        >(
707            (listener,),
708            0x196898fd17cb694c,
709            fidl::encoding::DynamicFlags::empty(),
710            ___deadline,
711        )?;
712        Ok(_response)
713    }
714}
715
716#[cfg(target_os = "fuchsia")]
717impl From<ProviderSynchronousProxy> for zx::Handle {
718    fn from(value: ProviderSynchronousProxy) -> Self {
719        value.into_channel().into()
720    }
721}
722
723#[cfg(target_os = "fuchsia")]
724impl From<fidl::Channel> for ProviderSynchronousProxy {
725    fn from(value: fidl::Channel) -> Self {
726        Self::new(value)
727    }
728}
729
730#[cfg(target_os = "fuchsia")]
731impl fidl::endpoints::FromClient for ProviderSynchronousProxy {
732    type Protocol = ProviderMarker;
733
734    fn from_client(value: fidl::endpoints::ClientEnd<ProviderMarker>) -> Self {
735        Self::new(value.into_channel())
736    }
737}
738
739#[derive(Debug, Clone)]
740pub struct ProviderProxy {
741    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
742}
743
744impl fidl::endpoints::Proxy for ProviderProxy {
745    type Protocol = ProviderMarker;
746
747    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
748        Self::new(inner)
749    }
750
751    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
752        self.client.into_channel().map_err(|client| Self { client })
753    }
754
755    fn as_channel(&self) -> &::fidl::AsyncChannel {
756        self.client.as_channel()
757    }
758}
759
760impl ProviderProxy {
761    /// Create a new Proxy for fuchsia.fonts/Provider.
762    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
763        let protocol_name = <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
764        Self { client: fidl::client::Client::new(channel, protocol_name) }
765    }
766
767    /// Get a Stream of events from the remote end of the protocol.
768    ///
769    /// # Panics
770    ///
771    /// Panics if the event stream was already taken.
772    pub fn take_event_stream(&self) -> ProviderEventStream {
773        ProviderEventStream { event_receiver: self.client.take_event_receiver() }
774    }
775
776    /// Deprecated. See `GetTypeface`.
777    ///
778    /// Returns font that matches specified `request`.
779    pub fn r#get_font(
780        &self,
781        mut request: &Request,
782    ) -> fidl::client::QueryResponseFut<
783        Option<Box<Response>>,
784        fidl::encoding::DefaultFuchsiaResourceDialect,
785    > {
786        ProviderProxyInterface::r#get_font(self, request)
787    }
788
789    /// Deprecated. See `GetFontFamilyInfo`.
790    ///
791    /// Returns information for the specified font family or null if there is
792    /// no family with the specified name. This function respects family name
793    /// aliases and ignores case, so request for "robotoSLAB" will return
794    /// FamilyInfo for "Roboto Slab".
795    pub fn r#get_family_info(
796        &self,
797        mut family: &str,
798    ) -> fidl::client::QueryResponseFut<
799        Option<Box<FamilyInfo>>,
800        fidl::encoding::DefaultFuchsiaResourceDialect,
801    > {
802        ProviderProxyInterface::r#get_family_info(self, family)
803    }
804
805    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
806    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
807    /// is used to disable fallbacks.)
808    pub fn r#get_typeface(
809        &self,
810        mut request: &TypefaceRequest,
811    ) -> fidl::client::QueryResponseFut<
812        TypefaceResponse,
813        fidl::encoding::DefaultFuchsiaResourceDialect,
814    > {
815        ProviderProxyInterface::r#get_typeface(self, request)
816    }
817
818    /// Returns information for the specified font family, or an empty table if there is no family
819    /// with the specified name.
820    ///
821    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
822    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
823    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
824    pub fn r#get_font_family_info(
825        &self,
826        mut family: &FamilyName,
827    ) -> fidl::client::QueryResponseFut<FontFamilyInfo, fidl::encoding::DefaultFuchsiaResourceDialect>
828    {
829        ProviderProxyInterface::r#get_font_family_info(self, family)
830    }
831
832    /// Register a listener to be notified when the set of available fonts or mappings has changed.
833    /// A client can register as many listeners as it wishes.
834    ///
835    /// To unregister, close the channel.
836    pub fn r#register_font_set_event_listener(
837        &self,
838        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
839    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
840        ProviderProxyInterface::r#register_font_set_event_listener(self, listener)
841    }
842}
843
844impl ProviderProxyInterface for ProviderProxy {
845    type GetFontResponseFut = fidl::client::QueryResponseFut<
846        Option<Box<Response>>,
847        fidl::encoding::DefaultFuchsiaResourceDialect,
848    >;
849    fn r#get_font(&self, mut request: &Request) -> Self::GetFontResponseFut {
850        fn _decode(
851            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
852        ) -> Result<Option<Box<Response>>, fidl::Error> {
853            let _response = fidl::client::decode_transaction_body::<
854                ProviderGetFontResponse,
855                fidl::encoding::DefaultFuchsiaResourceDialect,
856                0x6daeaad83184076b,
857            >(_buf?)?;
858            Ok(_response.response)
859        }
860        self.client.send_query_and_decode::<ProviderGetFontRequest, Option<Box<Response>>>(
861            (request,),
862            0x6daeaad83184076b,
863            fidl::encoding::DynamicFlags::empty(),
864            _decode,
865        )
866    }
867
868    type GetFamilyInfoResponseFut = fidl::client::QueryResponseFut<
869        Option<Box<FamilyInfo>>,
870        fidl::encoding::DefaultFuchsiaResourceDialect,
871    >;
872    fn r#get_family_info(&self, mut family: &str) -> Self::GetFamilyInfoResponseFut {
873        fn _decode(
874            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
875        ) -> Result<Option<Box<FamilyInfo>>, fidl::Error> {
876            let _response = fidl::client::decode_transaction_body::<
877                ProviderGetFamilyInfoResponse,
878                fidl::encoding::DefaultFuchsiaResourceDialect,
879                0x27aba13280090db3,
880            >(_buf?)?;
881            Ok(_response.family_info)
882        }
883        self.client.send_query_and_decode::<ProviderGetFamilyInfoRequest, Option<Box<FamilyInfo>>>(
884            (family,),
885            0x27aba13280090db3,
886            fidl::encoding::DynamicFlags::empty(),
887            _decode,
888        )
889    }
890
891    type GetTypefaceResponseFut = fidl::client::QueryResponseFut<
892        TypefaceResponse,
893        fidl::encoding::DefaultFuchsiaResourceDialect,
894    >;
895    fn r#get_typeface(&self, mut request: &TypefaceRequest) -> Self::GetTypefaceResponseFut {
896        fn _decode(
897            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
898        ) -> Result<TypefaceResponse, fidl::Error> {
899            let _response = fidl::client::decode_transaction_body::<
900                ProviderGetTypefaceResponse,
901                fidl::encoding::DefaultFuchsiaResourceDialect,
902                0x5481d24f1a4b0671,
903            >(_buf?)?;
904            Ok(_response.response)
905        }
906        self.client.send_query_and_decode::<ProviderGetTypefaceRequest, TypefaceResponse>(
907            (request,),
908            0x5481d24f1a4b0671,
909            fidl::encoding::DynamicFlags::empty(),
910            _decode,
911        )
912    }
913
914    type GetFontFamilyInfoResponseFut = fidl::client::QueryResponseFut<
915        FontFamilyInfo,
916        fidl::encoding::DefaultFuchsiaResourceDialect,
917    >;
918    fn r#get_font_family_info(
919        &self,
920        mut family: &FamilyName,
921    ) -> Self::GetFontFamilyInfoResponseFut {
922        fn _decode(
923            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
924        ) -> Result<FontFamilyInfo, fidl::Error> {
925            let _response = fidl::client::decode_transaction_body::<
926                ProviderGetFontFamilyInfoResponse,
927                fidl::encoding::DefaultFuchsiaResourceDialect,
928                0x7520ee83bf25c9ca,
929            >(_buf?)?;
930            Ok(_response.family_info)
931        }
932        self.client.send_query_and_decode::<ProviderGetFontFamilyInfoRequest, FontFamilyInfo>(
933            (family,),
934            0x7520ee83bf25c9ca,
935            fidl::encoding::DynamicFlags::empty(),
936            _decode,
937        )
938    }
939
940    type RegisterFontSetEventListenerResponseFut =
941        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
942    fn r#register_font_set_event_listener(
943        &self,
944        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
945    ) -> Self::RegisterFontSetEventListenerResponseFut {
946        fn _decode(
947            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
948        ) -> Result<(), fidl::Error> {
949            let _response = fidl::client::decode_transaction_body::<
950                fidl::encoding::EmptyPayload,
951                fidl::encoding::DefaultFuchsiaResourceDialect,
952                0x196898fd17cb694c,
953            >(_buf?)?;
954            Ok(_response)
955        }
956        self.client.send_query_and_decode::<ProviderRegisterFontSetEventListenerRequest, ()>(
957            (listener,),
958            0x196898fd17cb694c,
959            fidl::encoding::DynamicFlags::empty(),
960            _decode,
961        )
962    }
963}
964
965pub struct ProviderEventStream {
966    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
967}
968
969impl std::marker::Unpin for ProviderEventStream {}
970
971impl futures::stream::FusedStream for ProviderEventStream {
972    fn is_terminated(&self) -> bool {
973        self.event_receiver.is_terminated()
974    }
975}
976
977impl futures::Stream for ProviderEventStream {
978    type Item = Result<ProviderEvent, fidl::Error>;
979
980    fn poll_next(
981        mut self: std::pin::Pin<&mut Self>,
982        cx: &mut std::task::Context<'_>,
983    ) -> std::task::Poll<Option<Self::Item>> {
984        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
985            &mut self.event_receiver,
986            cx
987        )?) {
988            Some(buf) => std::task::Poll::Ready(Some(ProviderEvent::decode(buf))),
989            None => std::task::Poll::Ready(None),
990        }
991    }
992}
993
994#[derive(Debug)]
995pub enum ProviderEvent {}
996
997impl ProviderEvent {
998    /// Decodes a message buffer as a [`ProviderEvent`].
999    fn decode(
1000        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1001    ) -> Result<ProviderEvent, fidl::Error> {
1002        let (bytes, _handles) = buf.split_mut();
1003        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1004        debug_assert_eq!(tx_header.tx_id, 0);
1005        match tx_header.ordinal {
1006            _ => Err(fidl::Error::UnknownOrdinal {
1007                ordinal: tx_header.ordinal,
1008                protocol_name: <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1009            }),
1010        }
1011    }
1012}
1013
1014/// A Stream of incoming requests for fuchsia.fonts/Provider.
1015pub struct ProviderRequestStream {
1016    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1017    is_terminated: bool,
1018}
1019
1020impl std::marker::Unpin for ProviderRequestStream {}
1021
1022impl futures::stream::FusedStream for ProviderRequestStream {
1023    fn is_terminated(&self) -> bool {
1024        self.is_terminated
1025    }
1026}
1027
1028impl fidl::endpoints::RequestStream for ProviderRequestStream {
1029    type Protocol = ProviderMarker;
1030    type ControlHandle = ProviderControlHandle;
1031
1032    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1033        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1034    }
1035
1036    fn control_handle(&self) -> Self::ControlHandle {
1037        ProviderControlHandle { inner: self.inner.clone() }
1038    }
1039
1040    fn into_inner(
1041        self,
1042    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1043    {
1044        (self.inner, self.is_terminated)
1045    }
1046
1047    fn from_inner(
1048        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1049        is_terminated: bool,
1050    ) -> Self {
1051        Self { inner, is_terminated }
1052    }
1053}
1054
1055impl futures::Stream for ProviderRequestStream {
1056    type Item = Result<ProviderRequest, fidl::Error>;
1057
1058    fn poll_next(
1059        mut self: std::pin::Pin<&mut Self>,
1060        cx: &mut std::task::Context<'_>,
1061    ) -> std::task::Poll<Option<Self::Item>> {
1062        let this = &mut *self;
1063        if this.inner.check_shutdown(cx) {
1064            this.is_terminated = true;
1065            return std::task::Poll::Ready(None);
1066        }
1067        if this.is_terminated {
1068            panic!("polled ProviderRequestStream after completion");
1069        }
1070        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1071            |bytes, handles| {
1072                match this.inner.channel().read_etc(cx, bytes, handles) {
1073                    std::task::Poll::Ready(Ok(())) => {}
1074                    std::task::Poll::Pending => return std::task::Poll::Pending,
1075                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1076                        this.is_terminated = true;
1077                        return std::task::Poll::Ready(None);
1078                    }
1079                    std::task::Poll::Ready(Err(e)) => {
1080                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1081                            e.into(),
1082                        ))))
1083                    }
1084                }
1085
1086                // A message has been received from the channel
1087                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1088
1089                std::task::Poll::Ready(Some(match header.ordinal {
1090                    0x6daeaad83184076b => {
1091                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1092                        let mut req = fidl::new_empty!(
1093                            ProviderGetFontRequest,
1094                            fidl::encoding::DefaultFuchsiaResourceDialect
1095                        );
1096                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFontRequest>(&header, _body_bytes, handles, &mut req)?;
1097                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1098                        Ok(ProviderRequest::GetFont {
1099                            request: req.request,
1100
1101                            responder: ProviderGetFontResponder {
1102                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1103                                tx_id: header.tx_id,
1104                            },
1105                        })
1106                    }
1107                    0x27aba13280090db3 => {
1108                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1109                        let mut req = fidl::new_empty!(
1110                            ProviderGetFamilyInfoRequest,
1111                            fidl::encoding::DefaultFuchsiaResourceDialect
1112                        );
1113                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFamilyInfoRequest>(&header, _body_bytes, handles, &mut req)?;
1114                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1115                        Ok(ProviderRequest::GetFamilyInfo {
1116                            family: req.family,
1117
1118                            responder: ProviderGetFamilyInfoResponder {
1119                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1120                                tx_id: header.tx_id,
1121                            },
1122                        })
1123                    }
1124                    0x5481d24f1a4b0671 => {
1125                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1126                        let mut req = fidl::new_empty!(
1127                            ProviderGetTypefaceRequest,
1128                            fidl::encoding::DefaultFuchsiaResourceDialect
1129                        );
1130                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetTypefaceRequest>(&header, _body_bytes, handles, &mut req)?;
1131                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1132                        Ok(ProviderRequest::GetTypeface {
1133                            request: req.request,
1134
1135                            responder: ProviderGetTypefaceResponder {
1136                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1137                                tx_id: header.tx_id,
1138                            },
1139                        })
1140                    }
1141                    0x7520ee83bf25c9ca => {
1142                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1143                        let mut req = fidl::new_empty!(
1144                            ProviderGetFontFamilyInfoRequest,
1145                            fidl::encoding::DefaultFuchsiaResourceDialect
1146                        );
1147                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFontFamilyInfoRequest>(&header, _body_bytes, handles, &mut req)?;
1148                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1149                        Ok(ProviderRequest::GetFontFamilyInfo {
1150                            family: req.family,
1151
1152                            responder: ProviderGetFontFamilyInfoResponder {
1153                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1154                                tx_id: header.tx_id,
1155                            },
1156                        })
1157                    }
1158                    0x196898fd17cb694c => {
1159                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1160                        let mut req = fidl::new_empty!(
1161                            ProviderRegisterFontSetEventListenerRequest,
1162                            fidl::encoding::DefaultFuchsiaResourceDialect
1163                        );
1164                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderRegisterFontSetEventListenerRequest>(&header, _body_bytes, handles, &mut req)?;
1165                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1166                        Ok(ProviderRequest::RegisterFontSetEventListener {
1167                            listener: req.listener,
1168
1169                            responder: ProviderRegisterFontSetEventListenerResponder {
1170                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1171                                tx_id: header.tx_id,
1172                            },
1173                        })
1174                    }
1175                    _ => Err(fidl::Error::UnknownOrdinal {
1176                        ordinal: header.ordinal,
1177                        protocol_name:
1178                            <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1179                    }),
1180                }))
1181            },
1182        )
1183    }
1184}
1185
1186/// Provider of digital font files and metadata.
1187///
1188/// TODO(https://fxbug.dev/42170326): Remove deprecated methods and move to provider.fidl.
1189#[derive(Debug)]
1190pub enum ProviderRequest {
1191    /// Deprecated. See `GetTypeface`.
1192    ///
1193    /// Returns font that matches specified `request`.
1194    GetFont { request: Request, responder: ProviderGetFontResponder },
1195    /// Deprecated. See `GetFontFamilyInfo`.
1196    ///
1197    /// Returns information for the specified font family or null if there is
1198    /// no family with the specified name. This function respects family name
1199    /// aliases and ignores case, so request for "robotoSLAB" will return
1200    /// FamilyInfo for "Roboto Slab".
1201    GetFamilyInfo { family: String, responder: ProviderGetFamilyInfoResponder },
1202    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
1203    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
1204    /// is used to disable fallbacks.)
1205    GetTypeface { request: TypefaceRequest, responder: ProviderGetTypefaceResponder },
1206    /// Returns information for the specified font family, or an empty table if there is no family
1207    /// with the specified name.
1208    ///
1209    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
1210    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
1211    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
1212    GetFontFamilyInfo { family: FamilyName, responder: ProviderGetFontFamilyInfoResponder },
1213    /// Register a listener to be notified when the set of available fonts or mappings has changed.
1214    /// A client can register as many listeners as it wishes.
1215    ///
1216    /// To unregister, close the channel.
1217    RegisterFontSetEventListener {
1218        listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1219        responder: ProviderRegisterFontSetEventListenerResponder,
1220    },
1221}
1222
1223impl ProviderRequest {
1224    #[allow(irrefutable_let_patterns)]
1225    pub fn into_get_font(self) -> Option<(Request, ProviderGetFontResponder)> {
1226        if let ProviderRequest::GetFont { request, responder } = self {
1227            Some((request, responder))
1228        } else {
1229            None
1230        }
1231    }
1232
1233    #[allow(irrefutable_let_patterns)]
1234    pub fn into_get_family_info(self) -> Option<(String, ProviderGetFamilyInfoResponder)> {
1235        if let ProviderRequest::GetFamilyInfo { family, responder } = self {
1236            Some((family, responder))
1237        } else {
1238            None
1239        }
1240    }
1241
1242    #[allow(irrefutable_let_patterns)]
1243    pub fn into_get_typeface(self) -> Option<(TypefaceRequest, ProviderGetTypefaceResponder)> {
1244        if let ProviderRequest::GetTypeface { request, responder } = self {
1245            Some((request, responder))
1246        } else {
1247            None
1248        }
1249    }
1250
1251    #[allow(irrefutable_let_patterns)]
1252    pub fn into_get_font_family_info(
1253        self,
1254    ) -> Option<(FamilyName, ProviderGetFontFamilyInfoResponder)> {
1255        if let ProviderRequest::GetFontFamilyInfo { family, responder } = self {
1256            Some((family, responder))
1257        } else {
1258            None
1259        }
1260    }
1261
1262    #[allow(irrefutable_let_patterns)]
1263    pub fn into_register_font_set_event_listener(
1264        self,
1265    ) -> Option<(
1266        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1267        ProviderRegisterFontSetEventListenerResponder,
1268    )> {
1269        if let ProviderRequest::RegisterFontSetEventListener { listener, responder } = self {
1270            Some((listener, responder))
1271        } else {
1272            None
1273        }
1274    }
1275
1276    /// Name of the method defined in FIDL
1277    pub fn method_name(&self) -> &'static str {
1278        match *self {
1279            ProviderRequest::GetFont { .. } => "get_font",
1280            ProviderRequest::GetFamilyInfo { .. } => "get_family_info",
1281            ProviderRequest::GetTypeface { .. } => "get_typeface",
1282            ProviderRequest::GetFontFamilyInfo { .. } => "get_font_family_info",
1283            ProviderRequest::RegisterFontSetEventListener { .. } => {
1284                "register_font_set_event_listener"
1285            }
1286        }
1287    }
1288}
1289
1290#[derive(Debug, Clone)]
1291pub struct ProviderControlHandle {
1292    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1293}
1294
1295impl fidl::endpoints::ControlHandle for ProviderControlHandle {
1296    fn shutdown(&self) {
1297        self.inner.shutdown()
1298    }
1299    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1300        self.inner.shutdown_with_epitaph(status)
1301    }
1302
1303    fn is_closed(&self) -> bool {
1304        self.inner.channel().is_closed()
1305    }
1306    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1307        self.inner.channel().on_closed()
1308    }
1309
1310    #[cfg(target_os = "fuchsia")]
1311    fn signal_peer(
1312        &self,
1313        clear_mask: zx::Signals,
1314        set_mask: zx::Signals,
1315    ) -> Result<(), zx_status::Status> {
1316        use fidl::Peered;
1317        self.inner.channel().signal_peer(clear_mask, set_mask)
1318    }
1319}
1320
1321impl ProviderControlHandle {}
1322
1323#[must_use = "FIDL methods require a response to be sent"]
1324#[derive(Debug)]
1325pub struct ProviderGetFontResponder {
1326    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1327    tx_id: u32,
1328}
1329
1330/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1331/// if the responder is dropped without sending a response, so that the client
1332/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1333impl std::ops::Drop for ProviderGetFontResponder {
1334    fn drop(&mut self) {
1335        self.control_handle.shutdown();
1336        // Safety: drops once, never accessed again
1337        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1338    }
1339}
1340
1341impl fidl::endpoints::Responder for ProviderGetFontResponder {
1342    type ControlHandle = ProviderControlHandle;
1343
1344    fn control_handle(&self) -> &ProviderControlHandle {
1345        &self.control_handle
1346    }
1347
1348    fn drop_without_shutdown(mut self) {
1349        // Safety: drops once, never accessed again due to mem::forget
1350        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1351        // Prevent Drop from running (which would shut down the channel)
1352        std::mem::forget(self);
1353    }
1354}
1355
1356impl ProviderGetFontResponder {
1357    /// Sends a response to the FIDL transaction.
1358    ///
1359    /// Sets the channel to shutdown if an error occurs.
1360    pub fn send(self, mut response: Option<Response>) -> Result<(), fidl::Error> {
1361        let _result = self.send_raw(response);
1362        if _result.is_err() {
1363            self.control_handle.shutdown();
1364        }
1365        self.drop_without_shutdown();
1366        _result
1367    }
1368
1369    /// Similar to "send" but does not shutdown the channel if an error occurs.
1370    pub fn send_no_shutdown_on_err(
1371        self,
1372        mut response: Option<Response>,
1373    ) -> Result<(), fidl::Error> {
1374        let _result = self.send_raw(response);
1375        self.drop_without_shutdown();
1376        _result
1377    }
1378
1379    fn send_raw(&self, mut response: Option<Response>) -> Result<(), fidl::Error> {
1380        self.control_handle.inner.send::<ProviderGetFontResponse>(
1381            (response.as_mut(),),
1382            self.tx_id,
1383            0x6daeaad83184076b,
1384            fidl::encoding::DynamicFlags::empty(),
1385        )
1386    }
1387}
1388
1389#[must_use = "FIDL methods require a response to be sent"]
1390#[derive(Debug)]
1391pub struct ProviderGetFamilyInfoResponder {
1392    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1393    tx_id: u32,
1394}
1395
1396/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1397/// if the responder is dropped without sending a response, so that the client
1398/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1399impl std::ops::Drop for ProviderGetFamilyInfoResponder {
1400    fn drop(&mut self) {
1401        self.control_handle.shutdown();
1402        // Safety: drops once, never accessed again
1403        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1404    }
1405}
1406
1407impl fidl::endpoints::Responder for ProviderGetFamilyInfoResponder {
1408    type ControlHandle = ProviderControlHandle;
1409
1410    fn control_handle(&self) -> &ProviderControlHandle {
1411        &self.control_handle
1412    }
1413
1414    fn drop_without_shutdown(mut self) {
1415        // Safety: drops once, never accessed again due to mem::forget
1416        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1417        // Prevent Drop from running (which would shut down the channel)
1418        std::mem::forget(self);
1419    }
1420}
1421
1422impl ProviderGetFamilyInfoResponder {
1423    /// Sends a response to the FIDL transaction.
1424    ///
1425    /// Sets the channel to shutdown if an error occurs.
1426    pub fn send(self, mut family_info: Option<&FamilyInfo>) -> Result<(), fidl::Error> {
1427        let _result = self.send_raw(family_info);
1428        if _result.is_err() {
1429            self.control_handle.shutdown();
1430        }
1431        self.drop_without_shutdown();
1432        _result
1433    }
1434
1435    /// Similar to "send" but does not shutdown the channel if an error occurs.
1436    pub fn send_no_shutdown_on_err(
1437        self,
1438        mut family_info: Option<&FamilyInfo>,
1439    ) -> Result<(), fidl::Error> {
1440        let _result = self.send_raw(family_info);
1441        self.drop_without_shutdown();
1442        _result
1443    }
1444
1445    fn send_raw(&self, mut family_info: Option<&FamilyInfo>) -> Result<(), fidl::Error> {
1446        self.control_handle.inner.send::<ProviderGetFamilyInfoResponse>(
1447            (family_info,),
1448            self.tx_id,
1449            0x27aba13280090db3,
1450            fidl::encoding::DynamicFlags::empty(),
1451        )
1452    }
1453}
1454
1455#[must_use = "FIDL methods require a response to be sent"]
1456#[derive(Debug)]
1457pub struct ProviderGetTypefaceResponder {
1458    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1459    tx_id: u32,
1460}
1461
1462/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1463/// if the responder is dropped without sending a response, so that the client
1464/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1465impl std::ops::Drop for ProviderGetTypefaceResponder {
1466    fn drop(&mut self) {
1467        self.control_handle.shutdown();
1468        // Safety: drops once, never accessed again
1469        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1470    }
1471}
1472
1473impl fidl::endpoints::Responder for ProviderGetTypefaceResponder {
1474    type ControlHandle = ProviderControlHandle;
1475
1476    fn control_handle(&self) -> &ProviderControlHandle {
1477        &self.control_handle
1478    }
1479
1480    fn drop_without_shutdown(mut self) {
1481        // Safety: drops once, never accessed again due to mem::forget
1482        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1483        // Prevent Drop from running (which would shut down the channel)
1484        std::mem::forget(self);
1485    }
1486}
1487
1488impl ProviderGetTypefaceResponder {
1489    /// Sends a response to the FIDL transaction.
1490    ///
1491    /// Sets the channel to shutdown if an error occurs.
1492    pub fn send(self, mut response: TypefaceResponse) -> Result<(), fidl::Error> {
1493        let _result = self.send_raw(response);
1494        if _result.is_err() {
1495            self.control_handle.shutdown();
1496        }
1497        self.drop_without_shutdown();
1498        _result
1499    }
1500
1501    /// Similar to "send" but does not shutdown the channel if an error occurs.
1502    pub fn send_no_shutdown_on_err(
1503        self,
1504        mut response: TypefaceResponse,
1505    ) -> Result<(), fidl::Error> {
1506        let _result = self.send_raw(response);
1507        self.drop_without_shutdown();
1508        _result
1509    }
1510
1511    fn send_raw(&self, mut response: TypefaceResponse) -> Result<(), fidl::Error> {
1512        self.control_handle.inner.send::<ProviderGetTypefaceResponse>(
1513            (&mut response,),
1514            self.tx_id,
1515            0x5481d24f1a4b0671,
1516            fidl::encoding::DynamicFlags::empty(),
1517        )
1518    }
1519}
1520
1521#[must_use = "FIDL methods require a response to be sent"]
1522#[derive(Debug)]
1523pub struct ProviderGetFontFamilyInfoResponder {
1524    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1525    tx_id: u32,
1526}
1527
1528/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1529/// if the responder is dropped without sending a response, so that the client
1530/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1531impl std::ops::Drop for ProviderGetFontFamilyInfoResponder {
1532    fn drop(&mut self) {
1533        self.control_handle.shutdown();
1534        // Safety: drops once, never accessed again
1535        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1536    }
1537}
1538
1539impl fidl::endpoints::Responder for ProviderGetFontFamilyInfoResponder {
1540    type ControlHandle = ProviderControlHandle;
1541
1542    fn control_handle(&self) -> &ProviderControlHandle {
1543        &self.control_handle
1544    }
1545
1546    fn drop_without_shutdown(mut self) {
1547        // Safety: drops once, never accessed again due to mem::forget
1548        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1549        // Prevent Drop from running (which would shut down the channel)
1550        std::mem::forget(self);
1551    }
1552}
1553
1554impl ProviderGetFontFamilyInfoResponder {
1555    /// Sends a response to the FIDL transaction.
1556    ///
1557    /// Sets the channel to shutdown if an error occurs.
1558    pub fn send(self, mut family_info: &FontFamilyInfo) -> Result<(), fidl::Error> {
1559        let _result = self.send_raw(family_info);
1560        if _result.is_err() {
1561            self.control_handle.shutdown();
1562        }
1563        self.drop_without_shutdown();
1564        _result
1565    }
1566
1567    /// Similar to "send" but does not shutdown the channel if an error occurs.
1568    pub fn send_no_shutdown_on_err(
1569        self,
1570        mut family_info: &FontFamilyInfo,
1571    ) -> Result<(), fidl::Error> {
1572        let _result = self.send_raw(family_info);
1573        self.drop_without_shutdown();
1574        _result
1575    }
1576
1577    fn send_raw(&self, mut family_info: &FontFamilyInfo) -> Result<(), fidl::Error> {
1578        self.control_handle.inner.send::<ProviderGetFontFamilyInfoResponse>(
1579            (family_info,),
1580            self.tx_id,
1581            0x7520ee83bf25c9ca,
1582            fidl::encoding::DynamicFlags::empty(),
1583        )
1584    }
1585}
1586
1587#[must_use = "FIDL methods require a response to be sent"]
1588#[derive(Debug)]
1589pub struct ProviderRegisterFontSetEventListenerResponder {
1590    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1591    tx_id: u32,
1592}
1593
1594/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1595/// if the responder is dropped without sending a response, so that the client
1596/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1597impl std::ops::Drop for ProviderRegisterFontSetEventListenerResponder {
1598    fn drop(&mut self) {
1599        self.control_handle.shutdown();
1600        // Safety: drops once, never accessed again
1601        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1602    }
1603}
1604
1605impl fidl::endpoints::Responder for ProviderRegisterFontSetEventListenerResponder {
1606    type ControlHandle = ProviderControlHandle;
1607
1608    fn control_handle(&self) -> &ProviderControlHandle {
1609        &self.control_handle
1610    }
1611
1612    fn drop_without_shutdown(mut self) {
1613        // Safety: drops once, never accessed again due to mem::forget
1614        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1615        // Prevent Drop from running (which would shut down the channel)
1616        std::mem::forget(self);
1617    }
1618}
1619
1620impl ProviderRegisterFontSetEventListenerResponder {
1621    /// Sends a response to the FIDL transaction.
1622    ///
1623    /// Sets the channel to shutdown if an error occurs.
1624    pub fn send(self) -> Result<(), fidl::Error> {
1625        let _result = self.send_raw();
1626        if _result.is_err() {
1627            self.control_handle.shutdown();
1628        }
1629        self.drop_without_shutdown();
1630        _result
1631    }
1632
1633    /// Similar to "send" but does not shutdown the channel if an error occurs.
1634    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1635        let _result = self.send_raw();
1636        self.drop_without_shutdown();
1637        _result
1638    }
1639
1640    fn send_raw(&self) -> Result<(), fidl::Error> {
1641        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
1642            (),
1643            self.tx_id,
1644            0x196898fd17cb694c,
1645            fidl::encoding::DynamicFlags::empty(),
1646        )
1647    }
1648}
1649
1650mod internal {
1651    use super::*;
1652
1653    impl fidl::encoding::ResourceTypeMarker for ProviderGetFontResponse {
1654        type Borrowed<'a> = &'a mut Self;
1655        fn take_or_borrow<'a>(
1656            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1657        ) -> Self::Borrowed<'a> {
1658            value
1659        }
1660    }
1661
1662    unsafe impl fidl::encoding::TypeMarker for ProviderGetFontResponse {
1663        type Owned = Self;
1664
1665        #[inline(always)]
1666        fn inline_align(_context: fidl::encoding::Context) -> usize {
1667            8
1668        }
1669
1670        #[inline(always)]
1671        fn inline_size(_context: fidl::encoding::Context) -> usize {
1672            8
1673        }
1674    }
1675
1676    unsafe impl
1677        fidl::encoding::Encode<
1678            ProviderGetFontResponse,
1679            fidl::encoding::DefaultFuchsiaResourceDialect,
1680        > for &mut ProviderGetFontResponse
1681    {
1682        #[inline]
1683        unsafe fn encode(
1684            self,
1685            encoder: &mut fidl::encoding::Encoder<
1686                '_,
1687                fidl::encoding::DefaultFuchsiaResourceDialect,
1688            >,
1689            offset: usize,
1690            _depth: fidl::encoding::Depth,
1691        ) -> fidl::Result<()> {
1692            encoder.debug_check_bounds::<ProviderGetFontResponse>(offset);
1693            // Delegate to tuple encoding.
1694            fidl::encoding::Encode::<ProviderGetFontResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
1695                (
1696                    <fidl::encoding::Boxed<Response> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.response),
1697                ),
1698                encoder, offset, _depth
1699            )
1700        }
1701    }
1702    unsafe impl<
1703            T0: fidl::encoding::Encode<
1704                fidl::encoding::Boxed<Response>,
1705                fidl::encoding::DefaultFuchsiaResourceDialect,
1706            >,
1707        >
1708        fidl::encoding::Encode<
1709            ProviderGetFontResponse,
1710            fidl::encoding::DefaultFuchsiaResourceDialect,
1711        > for (T0,)
1712    {
1713        #[inline]
1714        unsafe fn encode(
1715            self,
1716            encoder: &mut fidl::encoding::Encoder<
1717                '_,
1718                fidl::encoding::DefaultFuchsiaResourceDialect,
1719            >,
1720            offset: usize,
1721            depth: fidl::encoding::Depth,
1722        ) -> fidl::Result<()> {
1723            encoder.debug_check_bounds::<ProviderGetFontResponse>(offset);
1724            // Zero out padding regions. There's no need to apply masks
1725            // because the unmasked parts will be overwritten by fields.
1726            // Write the fields.
1727            self.0.encode(encoder, offset + 0, depth)?;
1728            Ok(())
1729        }
1730    }
1731
1732    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1733        for ProviderGetFontResponse
1734    {
1735        #[inline(always)]
1736        fn new_empty() -> Self {
1737            Self {
1738                response: fidl::new_empty!(
1739                    fidl::encoding::Boxed<Response>,
1740                    fidl::encoding::DefaultFuchsiaResourceDialect
1741                ),
1742            }
1743        }
1744
1745        #[inline]
1746        unsafe fn decode(
1747            &mut self,
1748            decoder: &mut fidl::encoding::Decoder<
1749                '_,
1750                fidl::encoding::DefaultFuchsiaResourceDialect,
1751            >,
1752            offset: usize,
1753            _depth: fidl::encoding::Depth,
1754        ) -> fidl::Result<()> {
1755            decoder.debug_check_bounds::<Self>(offset);
1756            // Verify that padding bytes are zero.
1757            fidl::decode!(
1758                fidl::encoding::Boxed<Response>,
1759                fidl::encoding::DefaultFuchsiaResourceDialect,
1760                &mut self.response,
1761                decoder,
1762                offset + 0,
1763                _depth
1764            )?;
1765            Ok(())
1766        }
1767    }
1768
1769    impl fidl::encoding::ResourceTypeMarker for ProviderGetTypefaceResponse {
1770        type Borrowed<'a> = &'a mut Self;
1771        fn take_or_borrow<'a>(
1772            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1773        ) -> Self::Borrowed<'a> {
1774            value
1775        }
1776    }
1777
1778    unsafe impl fidl::encoding::TypeMarker for ProviderGetTypefaceResponse {
1779        type Owned = Self;
1780
1781        #[inline(always)]
1782        fn inline_align(_context: fidl::encoding::Context) -> usize {
1783            8
1784        }
1785
1786        #[inline(always)]
1787        fn inline_size(_context: fidl::encoding::Context) -> usize {
1788            16
1789        }
1790    }
1791
1792    unsafe impl
1793        fidl::encoding::Encode<
1794            ProviderGetTypefaceResponse,
1795            fidl::encoding::DefaultFuchsiaResourceDialect,
1796        > for &mut ProviderGetTypefaceResponse
1797    {
1798        #[inline]
1799        unsafe fn encode(
1800            self,
1801            encoder: &mut fidl::encoding::Encoder<
1802                '_,
1803                fidl::encoding::DefaultFuchsiaResourceDialect,
1804            >,
1805            offset: usize,
1806            _depth: fidl::encoding::Depth,
1807        ) -> fidl::Result<()> {
1808            encoder.debug_check_bounds::<ProviderGetTypefaceResponse>(offset);
1809            // Delegate to tuple encoding.
1810            fidl::encoding::Encode::<
1811                ProviderGetTypefaceResponse,
1812                fidl::encoding::DefaultFuchsiaResourceDialect,
1813            >::encode(
1814                (<TypefaceResponse as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1815                    &mut self.response,
1816                ),),
1817                encoder,
1818                offset,
1819                _depth,
1820            )
1821        }
1822    }
1823    unsafe impl<
1824            T0: fidl::encoding::Encode<TypefaceResponse, fidl::encoding::DefaultFuchsiaResourceDialect>,
1825        >
1826        fidl::encoding::Encode<
1827            ProviderGetTypefaceResponse,
1828            fidl::encoding::DefaultFuchsiaResourceDialect,
1829        > for (T0,)
1830    {
1831        #[inline]
1832        unsafe fn encode(
1833            self,
1834            encoder: &mut fidl::encoding::Encoder<
1835                '_,
1836                fidl::encoding::DefaultFuchsiaResourceDialect,
1837            >,
1838            offset: usize,
1839            depth: fidl::encoding::Depth,
1840        ) -> fidl::Result<()> {
1841            encoder.debug_check_bounds::<ProviderGetTypefaceResponse>(offset);
1842            // Zero out padding regions. There's no need to apply masks
1843            // because the unmasked parts will be overwritten by fields.
1844            // Write the fields.
1845            self.0.encode(encoder, offset + 0, depth)?;
1846            Ok(())
1847        }
1848    }
1849
1850    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1851        for ProviderGetTypefaceResponse
1852    {
1853        #[inline(always)]
1854        fn new_empty() -> Self {
1855            Self {
1856                response: fidl::new_empty!(
1857                    TypefaceResponse,
1858                    fidl::encoding::DefaultFuchsiaResourceDialect
1859                ),
1860            }
1861        }
1862
1863        #[inline]
1864        unsafe fn decode(
1865            &mut self,
1866            decoder: &mut fidl::encoding::Decoder<
1867                '_,
1868                fidl::encoding::DefaultFuchsiaResourceDialect,
1869            >,
1870            offset: usize,
1871            _depth: fidl::encoding::Depth,
1872        ) -> fidl::Result<()> {
1873            decoder.debug_check_bounds::<Self>(offset);
1874            // Verify that padding bytes are zero.
1875            fidl::decode!(
1876                TypefaceResponse,
1877                fidl::encoding::DefaultFuchsiaResourceDialect,
1878                &mut self.response,
1879                decoder,
1880                offset + 0,
1881                _depth
1882            )?;
1883            Ok(())
1884        }
1885    }
1886
1887    impl fidl::encoding::ResourceTypeMarker for ProviderRegisterFontSetEventListenerRequest {
1888        type Borrowed<'a> = &'a mut Self;
1889        fn take_or_borrow<'a>(
1890            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1891        ) -> Self::Borrowed<'a> {
1892            value
1893        }
1894    }
1895
1896    unsafe impl fidl::encoding::TypeMarker for ProviderRegisterFontSetEventListenerRequest {
1897        type Owned = Self;
1898
1899        #[inline(always)]
1900        fn inline_align(_context: fidl::encoding::Context) -> usize {
1901            4
1902        }
1903
1904        #[inline(always)]
1905        fn inline_size(_context: fidl::encoding::Context) -> usize {
1906            4
1907        }
1908    }
1909
1910    unsafe impl
1911        fidl::encoding::Encode<
1912            ProviderRegisterFontSetEventListenerRequest,
1913            fidl::encoding::DefaultFuchsiaResourceDialect,
1914        > for &mut ProviderRegisterFontSetEventListenerRequest
1915    {
1916        #[inline]
1917        unsafe fn encode(
1918            self,
1919            encoder: &mut fidl::encoding::Encoder<
1920                '_,
1921                fidl::encoding::DefaultFuchsiaResourceDialect,
1922            >,
1923            offset: usize,
1924            _depth: fidl::encoding::Depth,
1925        ) -> fidl::Result<()> {
1926            encoder.debug_check_bounds::<ProviderRegisterFontSetEventListenerRequest>(offset);
1927            // Delegate to tuple encoding.
1928            fidl::encoding::Encode::<
1929                ProviderRegisterFontSetEventListenerRequest,
1930                fidl::encoding::DefaultFuchsiaResourceDialect,
1931            >::encode(
1932                (
1933                    <fidl::encoding::Endpoint<
1934                        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1935                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
1936                        &mut self.listener
1937                    ),
1938                ),
1939                encoder,
1940                offset,
1941                _depth,
1942            )
1943        }
1944    }
1945    unsafe impl<
1946            T0: fidl::encoding::Encode<
1947                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<FontSetEventListenerMarker>>,
1948                fidl::encoding::DefaultFuchsiaResourceDialect,
1949            >,
1950        >
1951        fidl::encoding::Encode<
1952            ProviderRegisterFontSetEventListenerRequest,
1953            fidl::encoding::DefaultFuchsiaResourceDialect,
1954        > for (T0,)
1955    {
1956        #[inline]
1957        unsafe fn encode(
1958            self,
1959            encoder: &mut fidl::encoding::Encoder<
1960                '_,
1961                fidl::encoding::DefaultFuchsiaResourceDialect,
1962            >,
1963            offset: usize,
1964            depth: fidl::encoding::Depth,
1965        ) -> fidl::Result<()> {
1966            encoder.debug_check_bounds::<ProviderRegisterFontSetEventListenerRequest>(offset);
1967            // Zero out padding regions. There's no need to apply masks
1968            // because the unmasked parts will be overwritten by fields.
1969            // Write the fields.
1970            self.0.encode(encoder, offset + 0, depth)?;
1971            Ok(())
1972        }
1973    }
1974
1975    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1976        for ProviderRegisterFontSetEventListenerRequest
1977    {
1978        #[inline(always)]
1979        fn new_empty() -> Self {
1980            Self {
1981                listener: fidl::new_empty!(
1982                    fidl::encoding::Endpoint<
1983                        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1984                    >,
1985                    fidl::encoding::DefaultFuchsiaResourceDialect
1986                ),
1987            }
1988        }
1989
1990        #[inline]
1991        unsafe fn decode(
1992            &mut self,
1993            decoder: &mut fidl::encoding::Decoder<
1994                '_,
1995                fidl::encoding::DefaultFuchsiaResourceDialect,
1996            >,
1997            offset: usize,
1998            _depth: fidl::encoding::Depth,
1999        ) -> fidl::Result<()> {
2000            decoder.debug_check_bounds::<Self>(offset);
2001            // Verify that padding bytes are zero.
2002            fidl::decode!(
2003                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<FontSetEventListenerMarker>>,
2004                fidl::encoding::DefaultFuchsiaResourceDialect,
2005                &mut self.listener,
2006                decoder,
2007                offset + 0,
2008                _depth
2009            )?;
2010            Ok(())
2011        }
2012    }
2013
2014    impl fidl::encoding::ResourceTypeMarker for Response {
2015        type Borrowed<'a> = &'a mut Self;
2016        fn take_or_borrow<'a>(
2017            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2018        ) -> Self::Borrowed<'a> {
2019            value
2020        }
2021    }
2022
2023    unsafe impl fidl::encoding::TypeMarker for Response {
2024        type Owned = Self;
2025
2026        #[inline(always)]
2027        fn inline_align(_context: fidl::encoding::Context) -> usize {
2028            8
2029        }
2030
2031        #[inline(always)]
2032        fn inline_size(_context: fidl::encoding::Context) -> usize {
2033            24
2034        }
2035    }
2036
2037    unsafe impl fidl::encoding::Encode<Response, fidl::encoding::DefaultFuchsiaResourceDialect>
2038        for &mut Response
2039    {
2040        #[inline]
2041        unsafe fn encode(
2042            self,
2043            encoder: &mut fidl::encoding::Encoder<
2044                '_,
2045                fidl::encoding::DefaultFuchsiaResourceDialect,
2046            >,
2047            offset: usize,
2048            _depth: fidl::encoding::Depth,
2049        ) -> fidl::Result<()> {
2050            encoder.debug_check_bounds::<Response>(offset);
2051            // Delegate to tuple encoding.
2052            fidl::encoding::Encode::<Response, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2053                (
2054                    <fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.buffer),
2055                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.buffer_id),
2056                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.font_index),
2057                ),
2058                encoder, offset, _depth
2059            )
2060        }
2061    }
2062    unsafe impl<
2063            T0: fidl::encoding::Encode<
2064                fidl_fuchsia_mem::Buffer,
2065                fidl::encoding::DefaultFuchsiaResourceDialect,
2066            >,
2067            T1: fidl::encoding::Encode<u32, fidl::encoding::DefaultFuchsiaResourceDialect>,
2068            T2: fidl::encoding::Encode<u32, fidl::encoding::DefaultFuchsiaResourceDialect>,
2069        > fidl::encoding::Encode<Response, fidl::encoding::DefaultFuchsiaResourceDialect>
2070        for (T0, T1, T2)
2071    {
2072        #[inline]
2073        unsafe fn encode(
2074            self,
2075            encoder: &mut fidl::encoding::Encoder<
2076                '_,
2077                fidl::encoding::DefaultFuchsiaResourceDialect,
2078            >,
2079            offset: usize,
2080            depth: fidl::encoding::Depth,
2081        ) -> fidl::Result<()> {
2082            encoder.debug_check_bounds::<Response>(offset);
2083            // Zero out padding regions. There's no need to apply masks
2084            // because the unmasked parts will be overwritten by fields.
2085            // Write the fields.
2086            self.0.encode(encoder, offset + 0, depth)?;
2087            self.1.encode(encoder, offset + 16, depth)?;
2088            self.2.encode(encoder, offset + 20, depth)?;
2089            Ok(())
2090        }
2091    }
2092
2093    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Response {
2094        #[inline(always)]
2095        fn new_empty() -> Self {
2096            Self {
2097                buffer: fidl::new_empty!(
2098                    fidl_fuchsia_mem::Buffer,
2099                    fidl::encoding::DefaultFuchsiaResourceDialect
2100                ),
2101                buffer_id: fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect),
2102                font_index: fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect),
2103            }
2104        }
2105
2106        #[inline]
2107        unsafe fn decode(
2108            &mut self,
2109            decoder: &mut fidl::encoding::Decoder<
2110                '_,
2111                fidl::encoding::DefaultFuchsiaResourceDialect,
2112            >,
2113            offset: usize,
2114            _depth: fidl::encoding::Depth,
2115        ) -> fidl::Result<()> {
2116            decoder.debug_check_bounds::<Self>(offset);
2117            // Verify that padding bytes are zero.
2118            fidl::decode!(
2119                fidl_fuchsia_mem::Buffer,
2120                fidl::encoding::DefaultFuchsiaResourceDialect,
2121                &mut self.buffer,
2122                decoder,
2123                offset + 0,
2124                _depth
2125            )?;
2126            fidl::decode!(
2127                u32,
2128                fidl::encoding::DefaultFuchsiaResourceDialect,
2129                &mut self.buffer_id,
2130                decoder,
2131                offset + 16,
2132                _depth
2133            )?;
2134            fidl::decode!(
2135                u32,
2136                fidl::encoding::DefaultFuchsiaResourceDialect,
2137                &mut self.font_index,
2138                decoder,
2139                offset + 20,
2140                _depth
2141            )?;
2142            Ok(())
2143        }
2144    }
2145
2146    impl TypefaceResponse {
2147        #[inline(always)]
2148        fn max_ordinal_present(&self) -> u64 {
2149            if let Some(_) = self.font_index {
2150                return 3;
2151            }
2152            if let Some(_) = self.buffer_id {
2153                return 2;
2154            }
2155            if let Some(_) = self.buffer {
2156                return 1;
2157            }
2158            0
2159        }
2160    }
2161
2162    impl fidl::encoding::ResourceTypeMarker for TypefaceResponse {
2163        type Borrowed<'a> = &'a mut Self;
2164        fn take_or_borrow<'a>(
2165            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2166        ) -> Self::Borrowed<'a> {
2167            value
2168        }
2169    }
2170
2171    unsafe impl fidl::encoding::TypeMarker for TypefaceResponse {
2172        type Owned = Self;
2173
2174        #[inline(always)]
2175        fn inline_align(_context: fidl::encoding::Context) -> usize {
2176            8
2177        }
2178
2179        #[inline(always)]
2180        fn inline_size(_context: fidl::encoding::Context) -> usize {
2181            16
2182        }
2183    }
2184
2185    unsafe impl
2186        fidl::encoding::Encode<TypefaceResponse, fidl::encoding::DefaultFuchsiaResourceDialect>
2187        for &mut TypefaceResponse
2188    {
2189        unsafe fn encode(
2190            self,
2191            encoder: &mut fidl::encoding::Encoder<
2192                '_,
2193                fidl::encoding::DefaultFuchsiaResourceDialect,
2194            >,
2195            offset: usize,
2196            mut depth: fidl::encoding::Depth,
2197        ) -> fidl::Result<()> {
2198            encoder.debug_check_bounds::<TypefaceResponse>(offset);
2199            // Vector header
2200            let max_ordinal: u64 = self.max_ordinal_present();
2201            encoder.write_num(max_ordinal, offset);
2202            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2203            // Calling encoder.out_of_line_offset(0) is not allowed.
2204            if max_ordinal == 0 {
2205                return Ok(());
2206            }
2207            depth.increment()?;
2208            let envelope_size = 8;
2209            let bytes_len = max_ordinal as usize * envelope_size;
2210            #[allow(unused_variables)]
2211            let offset = encoder.out_of_line_offset(bytes_len);
2212            let mut _prev_end_offset: usize = 0;
2213            if 1 > max_ordinal {
2214                return Ok(());
2215            }
2216
2217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2218            // are envelope_size bytes.
2219            let cur_offset: usize = (1 - 1) * envelope_size;
2220
2221            // Zero reserved fields.
2222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2223
2224            // Safety:
2225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2227            //   envelope_size bytes, there is always sufficient room.
2228            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_mem::Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>(
2229            self.buffer.as_mut().map(<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
2230            encoder, offset + cur_offset, depth
2231        )?;
2232
2233            _prev_end_offset = cur_offset + envelope_size;
2234            if 2 > max_ordinal {
2235                return Ok(());
2236            }
2237
2238            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2239            // are envelope_size bytes.
2240            let cur_offset: usize = (2 - 1) * envelope_size;
2241
2242            // Zero reserved fields.
2243            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2244
2245            // Safety:
2246            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2247            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2248            //   envelope_size bytes, there is always sufficient room.
2249            fidl::encoding::encode_in_envelope_optional::<
2250                u32,
2251                fidl::encoding::DefaultFuchsiaResourceDialect,
2252            >(
2253                self.buffer_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2254                encoder,
2255                offset + cur_offset,
2256                depth,
2257            )?;
2258
2259            _prev_end_offset = cur_offset + envelope_size;
2260            if 3 > max_ordinal {
2261                return Ok(());
2262            }
2263
2264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2265            // are envelope_size bytes.
2266            let cur_offset: usize = (3 - 1) * envelope_size;
2267
2268            // Zero reserved fields.
2269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2270
2271            // Safety:
2272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2274            //   envelope_size bytes, there is always sufficient room.
2275            fidl::encoding::encode_in_envelope_optional::<
2276                u32,
2277                fidl::encoding::DefaultFuchsiaResourceDialect,
2278            >(
2279                self.font_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2280                encoder,
2281                offset + cur_offset,
2282                depth,
2283            )?;
2284
2285            _prev_end_offset = cur_offset + envelope_size;
2286
2287            Ok(())
2288        }
2289    }
2290
2291    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2292        for TypefaceResponse
2293    {
2294        #[inline(always)]
2295        fn new_empty() -> Self {
2296            Self::default()
2297        }
2298
2299        unsafe fn decode(
2300            &mut self,
2301            decoder: &mut fidl::encoding::Decoder<
2302                '_,
2303                fidl::encoding::DefaultFuchsiaResourceDialect,
2304            >,
2305            offset: usize,
2306            mut depth: fidl::encoding::Depth,
2307        ) -> fidl::Result<()> {
2308            decoder.debug_check_bounds::<Self>(offset);
2309            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2310                None => return Err(fidl::Error::NotNullable),
2311                Some(len) => len,
2312            };
2313            // Calling decoder.out_of_line_offset(0) is not allowed.
2314            if len == 0 {
2315                return Ok(());
2316            };
2317            depth.increment()?;
2318            let envelope_size = 8;
2319            let bytes_len = len * envelope_size;
2320            let offset = decoder.out_of_line_offset(bytes_len)?;
2321            // Decode the envelope for each type.
2322            let mut _next_ordinal_to_read = 0;
2323            let mut next_offset = offset;
2324            let end_offset = offset + bytes_len;
2325            _next_ordinal_to_read += 1;
2326            if next_offset >= end_offset {
2327                return Ok(());
2328            }
2329
2330            // Decode unknown envelopes for gaps in ordinals.
2331            while _next_ordinal_to_read < 1 {
2332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2333                _next_ordinal_to_read += 1;
2334                next_offset += envelope_size;
2335            }
2336
2337            let next_out_of_line = decoder.next_out_of_line();
2338            let handles_before = decoder.remaining_handles();
2339            if let Some((inlined, num_bytes, num_handles)) =
2340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2341            {
2342                let member_inline_size =
2343                    <fidl_fuchsia_mem::Buffer as fidl::encoding::TypeMarker>::inline_size(
2344                        decoder.context,
2345                    );
2346                if inlined != (member_inline_size <= 4) {
2347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2348                }
2349                let inner_offset;
2350                let mut inner_depth = depth.clone();
2351                if inlined {
2352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2353                    inner_offset = next_offset;
2354                } else {
2355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2356                    inner_depth.increment()?;
2357                }
2358                let val_ref = self.buffer.get_or_insert_with(|| {
2359                    fidl::new_empty!(
2360                        fidl_fuchsia_mem::Buffer,
2361                        fidl::encoding::DefaultFuchsiaResourceDialect
2362                    )
2363                });
2364                fidl::decode!(
2365                    fidl_fuchsia_mem::Buffer,
2366                    fidl::encoding::DefaultFuchsiaResourceDialect,
2367                    val_ref,
2368                    decoder,
2369                    inner_offset,
2370                    inner_depth
2371                )?;
2372                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2373                {
2374                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2375                }
2376                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2377                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2378                }
2379            }
2380
2381            next_offset += envelope_size;
2382            _next_ordinal_to_read += 1;
2383            if next_offset >= end_offset {
2384                return Ok(());
2385            }
2386
2387            // Decode unknown envelopes for gaps in ordinals.
2388            while _next_ordinal_to_read < 2 {
2389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2390                _next_ordinal_to_read += 1;
2391                next_offset += envelope_size;
2392            }
2393
2394            let next_out_of_line = decoder.next_out_of_line();
2395            let handles_before = decoder.remaining_handles();
2396            if let Some((inlined, num_bytes, num_handles)) =
2397                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2398            {
2399                let member_inline_size =
2400                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2401                if inlined != (member_inline_size <= 4) {
2402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2403                }
2404                let inner_offset;
2405                let mut inner_depth = depth.clone();
2406                if inlined {
2407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2408                    inner_offset = next_offset;
2409                } else {
2410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2411                    inner_depth.increment()?;
2412                }
2413                let val_ref = self.buffer_id.get_or_insert_with(|| {
2414                    fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect)
2415                });
2416                fidl::decode!(
2417                    u32,
2418                    fidl::encoding::DefaultFuchsiaResourceDialect,
2419                    val_ref,
2420                    decoder,
2421                    inner_offset,
2422                    inner_depth
2423                )?;
2424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2425                {
2426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2427                }
2428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2430                }
2431            }
2432
2433            next_offset += envelope_size;
2434            _next_ordinal_to_read += 1;
2435            if next_offset >= end_offset {
2436                return Ok(());
2437            }
2438
2439            // Decode unknown envelopes for gaps in ordinals.
2440            while _next_ordinal_to_read < 3 {
2441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2442                _next_ordinal_to_read += 1;
2443                next_offset += envelope_size;
2444            }
2445
2446            let next_out_of_line = decoder.next_out_of_line();
2447            let handles_before = decoder.remaining_handles();
2448            if let Some((inlined, num_bytes, num_handles)) =
2449                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2450            {
2451                let member_inline_size =
2452                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2453                if inlined != (member_inline_size <= 4) {
2454                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2455                }
2456                let inner_offset;
2457                let mut inner_depth = depth.clone();
2458                if inlined {
2459                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2460                    inner_offset = next_offset;
2461                } else {
2462                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2463                    inner_depth.increment()?;
2464                }
2465                let val_ref = self.font_index.get_or_insert_with(|| {
2466                    fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect)
2467                });
2468                fidl::decode!(
2469                    u32,
2470                    fidl::encoding::DefaultFuchsiaResourceDialect,
2471                    val_ref,
2472                    decoder,
2473                    inner_offset,
2474                    inner_depth
2475                )?;
2476                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2477                {
2478                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2479                }
2480                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2481                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2482                }
2483            }
2484
2485            next_offset += envelope_size;
2486
2487            // Decode the remaining unknown envelopes.
2488            while next_offset < end_offset {
2489                _next_ordinal_to_read += 1;
2490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2491                next_offset += envelope_size;
2492            }
2493
2494            Ok(())
2495        }
2496    }
2497}