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 _};
10use futures::future::{self, MaybeDone, TryFutureExt};
11use zx_status;
12
13pub type Weight = u16;
14
15/// Default slant of a typeface when none is specified.
16pub const DEFAULT_SLANT: Slant = Slant::Upright;
17
18/// Default weight of a typeface when none is specified.
19pub const DEFAULT_WEIGHT: u16 = WEIGHT_NORMAL as u16;
20
21/// Default width of a typeface when none is specified.
22pub const DEFAULT_WIDTH: Width = Width::Normal;
23
24/// The maximum number of code points allowed in a typeface query.
25pub const MAX_FACE_QUERY_CODE_POINTS: u32 = 128;
26
27/// The maximum number of preferred languages allowed in a typeface query.
28pub const MAX_FACE_QUERY_LANGUAGES: u32 = 8;
29
30/// The maximum length of a font family name.
31pub const MAX_FAMILY_NAME_LENGTH: u32 = 128;
32
33/// The maximum number of styles that will be returned for a font family.
34pub const MAX_FAMILY_STYLES: u32 = 300;
35
36/// The maximum length of a typeface's Postscript name. The limit comes from the OpenType `name`
37/// table specification.
38pub const MAX_POSTSCRIPT_TYPEFACE_NAME_LENGTH: u32 = 63;
39
40/// The maximum length of a typeface's full name.
41pub const MAX_TYPEFACE_NAME_LENGTH: u32 = 128;
42
43/// Deprecated. See `FaceRequestFlags`.
44/// Disables approximate style matching. The service will only return font that
45/// matches the requested style exactly.
46pub const REQUEST_FLAG_EXACT_MATCH: u32 = 2;
47
48/// Deprecated. See `FaceRequestFlags`.
49/// Disables font fallback. The service won't try to search fallback font set if
50/// there is no requested font family or if it doesn't contain requested
51/// character.
52pub const REQUEST_FLAG_NO_FALLBACK: u32 = 1;
53
54pub const WEIGHT_BLACK: u16 = 900;
55
56pub const WEIGHT_BOLD: u16 = 700;
57
58pub const WEIGHT_EXTRA_BOLD: u16 = 800;
59
60pub const WEIGHT_EXTRA_LIGHT: u16 = 200;
61
62pub const WEIGHT_LIGHT: u16 = 300;
63
64pub const WEIGHT_MEDIUM: u16 = 500;
65
66pub const WEIGHT_NORMAL: u16 = 400;
67
68pub const WEIGHT_SEMI_BOLD: u16 = 600;
69
70pub const WEIGHT_THIN: u16 = 100;
71
72bitflags! {
73    /// Boolean flags for `TypefaceRequest`.
74    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
75    pub struct TypefaceRequestFlags: u32 {
76        /// Disables font family fallback. The service won't try to search the fallback font set if the
77        /// requested font family doesn't exist or if it doesn't contain the requested code point.
78        const EXACT_FAMILY = 1;
79        /// Disables approximate style matching. The service will only return a face that matches the
80        /// requested style exactly. For example, there will be no substitutions of "medium" for a
81        /// requested "semi-bold" weight, or "oblique" for a requested "italic" slant.
82        const EXACT_STYLE = 2;
83    }
84}
85
86impl TypefaceRequestFlags {
87    #[deprecated = "Strict bits should not use `has_unknown_bits`"]
88    #[inline(always)]
89    pub fn has_unknown_bits(&self) -> bool {
90        false
91    }
92
93    #[deprecated = "Strict bits should not use `get_unknown_bits`"]
94    #[inline(always)]
95    pub fn get_unknown_bits(&self) -> u32 {
96        0
97    }
98}
99
100/// Options for what the font server should do if the client requests a typeface that is not yet
101/// cached.
102#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
103#[repr(u32)]
104pub enum CacheMissPolicy {
105    /// The server will attempt to load the uncached typeface before providing a response. This is
106    /// the *default* behavior.
107    ///
108    /// This option is not recommended for synchronous clients that block rendering while waiting
109    /// for a font.
110    BlockUntilDownloaded = 1,
111    /// The server will tell the client that the uncached typeface is unavailable, by returning an
112    /// empty [`fuchsia.fonts/TypefaceResponse`]. The uncached typeface may be downloaded
113    /// asynchronously to be available for future requests.
114    ///
115    /// This is similar to `font-display: block` in CSS.
116    ReturnEmptyResponse = 2,
117    /// The server will attempt to provide a cached fallback typeface (if allowed by the fallback
118    /// restrictions in [`fuchsia.fonts/TypefaceRequestFlags`]). The uncached typeface may be
119    /// downloaded asynchronously to be available for future requests.
120    ///
121    /// This is similar to `font-display: swap` in CSS.
122    ReturnFallback = 3,
123}
124
125impl CacheMissPolicy {
126    #[inline]
127    pub fn from_primitive(prim: u32) -> Option<Self> {
128        match prim {
129            1 => Some(Self::BlockUntilDownloaded),
130            2 => Some(Self::ReturnEmptyResponse),
131            3 => Some(Self::ReturnFallback),
132            _ => None,
133        }
134    }
135
136    #[inline]
137    pub const fn into_primitive(self) -> u32 {
138        self as u32
139    }
140
141    #[deprecated = "Strict enums should not use `is_unknown`"]
142    #[inline]
143    pub fn is_unknown(&self) -> bool {
144        false
145    }
146}
147
148/// Deprecated. See `GenericFontFamily`.
149#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
150#[repr(u32)]
151pub enum FallbackGroup {
152    None = 0,
153    Serif = 1,
154    SansSerif = 2,
155    Monospace = 3,
156    Cursive = 4,
157    Fantasy = 5,
158}
159
160impl FallbackGroup {
161    #[inline]
162    pub fn from_primitive(prim: u32) -> Option<Self> {
163        match prim {
164            0 => Some(Self::None),
165            1 => Some(Self::Serif),
166            2 => Some(Self::SansSerif),
167            3 => Some(Self::Monospace),
168            4 => Some(Self::Cursive),
169            5 => Some(Self::Fantasy),
170            _ => None,
171        }
172    }
173
174    #[inline]
175    pub const fn into_primitive(self) -> u32 {
176        self as u32
177    }
178
179    #[deprecated = "Strict enums should not use `is_unknown`"]
180    #[inline]
181    pub fn is_unknown(&self) -> bool {
182        false
183    }
184}
185
186/// Generic groups of font families that can serve as fallbacks for a specific family.
187///
188/// Every font family belongs to some _generic_ font family (see examples below).
189///
190/// If an exact requested family is unavailable but a fallback group is specified in the request,
191/// the provider may return some other family that belongs to the fallback group. For example, if
192/// the client requests the "Arial" family with a `SANS_SERIF` fallback, and "Arial" is unavailable,
193/// the provider may return another available sans serif family, such as "Roboto Regular", instead.
194///
195/// See also:
196/// https://www.w3.org/TR/css-fonts-4/#generic-font-families
197#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
198#[repr(u32)]
199pub enum GenericFontFamily {
200    /// Glyphs have little "serifs", hooks, or notches at the ends of most strokes.
201    /// Examples: Georgia, Noto Serif, Times New Roman.
202    Serif = 1,
203    /// Glyphs that have no serifs at the ends of most strokes.
204    /// Examples: Arial, Noto Sans, Roboto, Tahoma.
205    SansSerif = 2,
206    /// Fixed-width fonts.
207    /// Examples: Consolas, Courier New, Inconsolata.
208    Monospace = 3,
209    /// Handwritten or cursive fonts.
210    /// Examples: Brush Script, Comic Sans, Lucida Calligraphy.
211    Cursive = 4,
212    /// Decorative fonts.
213    /// Examples: Impact, Papyrus.
214    Fantasy = 5,
215    /// The default user interface font on the target platform.
216    /// This is included for completeness with the CSS specification; font manifests should not
217    /// declare that a font belongs to the `SYSTEM_UI` generic family, but instead should declare a
218    /// more specific option (e.g. `SERIF` for Roboto).
219    ///
220    /// Not commonly used.
221    SystemUi = 6,
222    /// Fonts that are used specifically for rendering emoji code points.
223    /// Examples: Noto Color Emoji.
224    Emoji = 7,
225    /// Fonts that are used primarily for rendering mathematical expressions.
226    ///
227    /// Not commonly used.
228    Math = 8,
229    /// A group of Chinese fonts between serif and cursive, often used for official Chinese
230    /// Government documents.
231    ///
232    /// Not commonly used.
233    Fangsong = 9,
234}
235
236impl GenericFontFamily {
237    #[inline]
238    pub fn from_primitive(prim: u32) -> Option<Self> {
239        match prim {
240            1 => Some(Self::Serif),
241            2 => Some(Self::SansSerif),
242            3 => Some(Self::Monospace),
243            4 => Some(Self::Cursive),
244            5 => Some(Self::Fantasy),
245            6 => Some(Self::SystemUi),
246            7 => Some(Self::Emoji),
247            8 => Some(Self::Math),
248            9 => Some(Self::Fangsong),
249            _ => None,
250        }
251    }
252
253    #[inline]
254    pub const fn into_primitive(self) -> u32 {
255        self as u32
256    }
257
258    #[deprecated = "Strict enums should not use `is_unknown`"]
259    #[inline]
260    pub fn is_unknown(&self) -> bool {
261        false
262    }
263}
264
265/// The type of slant of a type face.
266#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
267#[repr(u32)]
268pub enum Slant {
269    /// The default; upright glyphs.
270    Upright = 1,
271    /// Specially designed, slanted and slightly calligraphic glyphs.
272    Italic = 2,
273    /// Skewed glyphs. Oblique usually means an geometric transformation of the upright variant,
274    /// rather than a custom-designed variant.
275    Oblique = 3,
276}
277
278impl Slant {
279    #[inline]
280    pub fn from_primitive(prim: u32) -> Option<Self> {
281        match prim {
282            1 => Some(Self::Upright),
283            2 => Some(Self::Italic),
284            3 => Some(Self::Oblique),
285            _ => None,
286        }
287    }
288
289    #[inline]
290    pub const fn into_primitive(self) -> u32 {
291        self as u32
292    }
293
294    #[deprecated = "Strict enums should not use `is_unknown`"]
295    #[inline]
296    pub fn is_unknown(&self) -> bool {
297        false
298    }
299}
300
301/// Horizontal width class of the glyphs.
302///
303/// See https://docs.microsoft.com/en-us/typography/opentype/spec/os2#uswidthclass.
304#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
305#[repr(u32)]
306pub enum Width {
307    /// 50% of normal width
308    UltraCondensed = 1,
309    /// 62.5% of normal width
310    ExtraCondensed = 2,
311    /// 75% of normal width
312    Condensed = 3,
313    /// 87.5% of normal width
314    SemiCondensed = 4,
315    /// Normal width
316    Normal = 5,
317    /// 112.5% of normal width
318    SemiExpanded = 6,
319    /// 125% of normal width
320    Expanded = 7,
321    /// 150% of normal width
322    ExtraExpanded = 8,
323    /// 200% of normal width
324    UltraExpanded = 9,
325}
326
327impl Width {
328    #[inline]
329    pub fn from_primitive(prim: u32) -> Option<Self> {
330        match prim {
331            1 => Some(Self::UltraCondensed),
332            2 => Some(Self::ExtraCondensed),
333            3 => Some(Self::Condensed),
334            4 => Some(Self::SemiCondensed),
335            5 => Some(Self::Normal),
336            6 => Some(Self::SemiExpanded),
337            7 => Some(Self::Expanded),
338            8 => Some(Self::ExtraExpanded),
339            9 => Some(Self::UltraExpanded),
340            _ => None,
341        }
342    }
343
344    #[inline]
345    pub const fn into_primitive(self) -> u32 {
346        self as u32
347    }
348
349    #[deprecated = "Strict enums should not use `is_unknown`"]
350    #[inline]
351    pub fn is_unknown(&self) -> bool {
352        false
353    }
354}
355
356/// Deprecated. See `FontFamilyInfo`.
357///
358/// Information about font family that can be requested using GetFamilyInfo().
359#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
360pub struct FamilyInfo {
361    /// Canonical font family name. Note that this may be different from the
362    /// value passed to GetFamilyInfo() because GetFamilyInfo() also resolves
363    /// font aliases and ignores case. For example GetFamilyInfo("robotoslab")
364    /// will FamilyInfo.name = "Robot Slab".
365    pub name: String,
366    /// Unordered list of all available styles in the family.
367    pub styles: Vec<Style>,
368}
369
370impl fidl::Persistable for FamilyInfo {}
371
372/// The name of a family of fonts.
373///
374/// Examples: "Roboto", "Noto Serif".
375#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
376pub struct FamilyName {
377    /// The characters that make up the name.
378    pub name: String,
379}
380
381impl fidl::Persistable for FamilyName {}
382
383#[derive(Clone, Debug, PartialEq)]
384pub struct FontSetEventListenerOnFontSetUpdatedRequest {
385    pub event: FontSetUpdatedEvent,
386}
387
388impl fidl::Persistable for FontSetEventListenerOnFontSetUpdatedRequest {}
389
390#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
391pub struct ProviderGetFamilyInfoRequest {
392    pub family: String,
393}
394
395impl fidl::Persistable for ProviderGetFamilyInfoRequest {}
396
397#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
398pub struct ProviderGetFamilyInfoResponse {
399    pub family_info: Option<Box<FamilyInfo>>,
400}
401
402impl fidl::Persistable for ProviderGetFamilyInfoResponse {}
403
404#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
405pub struct ProviderGetFontFamilyInfoRequest {
406    pub family: FamilyName,
407}
408
409impl fidl::Persistable for ProviderGetFontFamilyInfoRequest {}
410
411#[derive(Clone, Debug, PartialEq)]
412pub struct ProviderGetFontFamilyInfoResponse {
413    pub family_info: FontFamilyInfo,
414}
415
416impl fidl::Persistable for ProviderGetFontFamilyInfoResponse {}
417
418#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
419pub struct ProviderGetFontRequest {
420    pub request: Request,
421}
422
423impl fidl::Persistable for ProviderGetFontRequest {}
424
425#[derive(Debug, PartialEq)]
426pub struct ProviderGetFontResponse {
427    pub response: Option<Box<Response>>,
428}
429
430impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for ProviderGetFontResponse {}
431
432#[derive(Clone, Debug, PartialEq)]
433pub struct ProviderGetTypefaceRequest {
434    pub request: TypefaceRequest,
435}
436
437impl fidl::Persistable for ProviderGetTypefaceRequest {}
438
439#[derive(Debug, PartialEq)]
440pub struct ProviderGetTypefaceResponse {
441    pub response: TypefaceResponse,
442}
443
444impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
445    for ProviderGetTypefaceResponse
446{
447}
448
449#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
450pub struct ProviderRegisterFontSetEventListenerRequest {
451    pub listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
452}
453
454impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
455    for ProviderRegisterFontSetEventListenerRequest
456{
457}
458
459/// Deprecated. See `FaceRequest`.
460#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
461pub struct Request {
462    /// Desired font family name, e.g. "Roboto". Font family search is
463    /// case-insensitive. In case when there is no specified family or the
464    /// specified family doesn't have glyph for the requested `character` then
465    /// a font from another family may be returned. This behavior can be disabled
466    /// using `REQUEST_FLAG_NO_FALLBACK`.
467    pub family: Option<String>,
468    /// For example, 400 is normal, 700 is bold.
469    pub weight: u32,
470    /// Numeric values matching OS/2 & Windows Metrics usWidthClass table.
471    /// https://www.microsoft.com/typography/otspec/os2.htm
472    /// For example, 5 is normal.
473    pub width: u32,
474    pub slant: Slant,
475    /// BCP47 language tags in order of preference. See
476    /// https://tools.ietf.org/html/bcp47 .
477    pub language: Option<Vec<String>>,
478    /// Codepoint for the character that must be present in the returned font or 0.
479    /// Caller that specify this field are expected to extract character set from
480    /// the result and cache it in order to avoid calling the API more than
481    /// necessary.
482    pub character: u32,
483    /// Fallback group preference. Caller can leave this field set to NONE. In
484    /// that case the font provider will use fallback group of the specified font
485    /// family.
486    pub fallback_group: FallbackGroup,
487    pub flags: u32,
488}
489
490impl fidl::Persistable for Request {}
491
492#[derive(Debug, PartialEq)]
493pub struct Response {
494    pub buffer: fidl_fuchsia_mem::Buffer,
495    /// Buffer identifier for the buffer. Responses with the same buffer_id are
496    /// guaranteed to contain the same data in the buffer. Clients may use this
497    /// value to detect if they already have the font cached in parsed form.
498    pub buffer_id: u32,
499    /// Font index within `buffer`. Used for font formats that may contain more
500    /// than one font per file, e.g. TTC (TrueType Collection).
501    pub font_index: u32,
502}
503
504impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Response {}
505
506/// Deprecated.
507/// See `Style2`.
508#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
509pub struct Style {
510    pub weight: u32,
511    pub width: u32,
512    pub slant: Slant,
513}
514
515impl fidl::Persistable for Style {}
516
517/// Information about a font family that can be requested using `Provider.GetFontFamilyInfo()`.
518///
519/// If a matching font family is not found, the table will be empty.
520#[derive(Clone, Debug, Default, PartialEq)]
521pub struct FontFamilyInfo {
522    /// Canonical font family name. Note that this may be different from the value passed to
523    /// `GetFontFamilyInfo()` due to the resolution of font aliases, and/or differences in
524    /// whitespace and capitalization.
525    pub name: Option<FamilyName>,
526    /// Unordered list of all available styles in the family.
527    pub styles: Option<Vec<Style2>>,
528    #[doc(hidden)]
529    pub __source_breaking: fidl::marker::SourceBreaking,
530}
531
532impl fidl::Persistable for FontFamilyInfo {}
533
534/// An event indicating that the set of fonts available in the `Provider` has changed. This is most
535/// frequently caused by an ephemeral font being downloaded and cached. Clients should consider
536/// re-requesting fonts and re-rendering any displayed text.
537#[derive(Clone, Debug, Default, PartialEq)]
538pub struct FontSetUpdatedEvent {
539    #[doc(hidden)]
540    pub __source_breaking: fidl::marker::SourceBreaking,
541}
542
543impl fidl::Persistable for FontSetUpdatedEvent {}
544
545/// Style properties that can be used when requesting or describing a type face.
546#[derive(Clone, Debug, Default, PartialEq)]
547pub struct Style2 {
548    /// See `Slant`.
549    pub slant: Option<Slant>,
550    /// Weight or thickness of the glyphs. Allowed values are integers in the range [1, 1000], but
551    /// most real-world font families only support some integer multiples of 100:
552    /// {100, 200, ..., 900}. Normal text (`WEIGHT_NORMAL`) is 400; `WEIGHT_BOLD` is 700.
553    ///
554    /// See:
555    /// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Common_weight_name_mapping
556    /// https://docs.microsoft.com/en-us/typography/opentype/spec/os2#usweightclass
557    pub weight: Option<u16>,
558    /// See `Width`.
559    pub width: Option<Width>,
560    #[doc(hidden)]
561    pub __source_breaking: fidl::marker::SourceBreaking,
562}
563
564impl fidl::Persistable for Style2 {}
565
566/// Parameters for looking up a typeface.
567#[derive(Clone, Debug, Default, PartialEq)]
568pub struct TypefaceQuery {
569    /// Desired font family name, e.g. "Roboto". Font family search is case-insensitive.
570    ///
571    /// Note: In cases where the specified family doesn't exist, or the specified family doesn't
572    /// have a glyph for the requested `code_point`, a face from another family may be returned.
573    /// This behavior can be disabled using `TypefaceRequestFlags.EXACT_FAMILY`.
574    pub family: Option<FamilyName>,
575    /// Style properties of the desired typeface.
576    pub style: Option<Style2>,
577    /// Language tags in order of preference. This allows disambiguating code points that map
578    /// to different glyphs in different languages (e.g. CJK code points).
579    ///
580    /// See `fuchsia.intl.LocaleId`.
581    pub languages: Option<Vec<fidl_fuchsia_intl::LocaleId>>,
582    /// Optional code points for which glyphs must be present in the returned face.
583    ///
584    /// Callers that specify this field are expected to extract the character set from the result
585    /// and cache it in order to avoid calling the API more than necessary.
586    pub code_points: Option<Vec<u32>>,
587    /// A generic font family to fall back to if an exact match is unavailable or does not contain
588    /// the requested code point.
589    ///
590    /// Every font family belongs to a generic family (configured in the font manifest). If a
591    /// particular font family doesn't contain a requested code point, the provider can search for
592    /// the code point in other font families _in the same generic family_ as a fallback.
593    ///
594    /// Specifying `fallback_family` in a query allows the client to override the generic family
595    /// that would be used as a fallback.
596    pub fallback_family: Option<GenericFontFamily>,
597    /// The exact Postscript name of the typeface to look up. This corresponds to name ID `6` in
598    /// the TrueType/OpenType `name` table.
599    ///
600    /// All characters must be in the printable ASCII range (U+0021 to U+007E), and must not be
601    /// '[', ']', '(', ')', '{', '}', '<', '>', '/', or '%'.
602    ///
603    /// If this field is specified, all the other query fields are ignored.
604    pub postscript_name: Option<String>,
605    /// The exact full name of the typeface to look up. This corresponds to name ID `4` in the
606    /// TrueType/OpenType `name` table.
607    ///
608    /// If this field is specified, all the other query fields are ignored.
609    pub full_name: Option<String>,
610    #[doc(hidden)]
611    pub __source_breaking: fidl::marker::SourceBreaking,
612}
613
614impl fidl::Persistable for TypefaceQuery {}
615
616/// Parameters for requesting a typeface.
617#[derive(Clone, Debug, Default, PartialEq)]
618pub struct TypefaceRequest {
619    /// Parameters for looking up a typeface.
620    pub query: Option<TypefaceQuery>,
621    /// Flags for how to process the request, such as which kinds of substitutions are permitted.
622    pub flags: Option<TypefaceRequestFlags>,
623    /// Setting for what to do if the requested typeface exists but is not cached, and therefore
624    /// cannot be served immediately.
625    ///
626    /// If this field is empty, the default policy is
627    /// [`fuchsia.fonts/CacheMissPolicy.BLOCK_UNTIL_DOWNLOADED`].
628    ///
629    /// If the client needs an immediate response, it can choose one of the non-blocking policies.
630    /// In this case, clients can also register to be notified when new fonts have been added to the
631    /// cache by calling [`fuchsia.fonts/Provider.RegisterFontSetEventListener`].
632    pub cache_miss_policy: Option<CacheMissPolicy>,
633    #[doc(hidden)]
634    pub __source_breaking: fidl::marker::SourceBreaking,
635}
636
637impl fidl::Persistable for TypefaceRequest {}
638
639/// Response to a TypefaceRequest. Contains the digital font file and metadata corresponding to a
640/// returned typeface. Clients are expected to cache the results if they plan to reuse them.
641///
642/// If a matching typeface cannot be found, the table will be empty.
643#[derive(Debug, Default, PartialEq)]
644pub struct TypefaceResponse {
645    /// A memory buffer containing the bytes of a digital font file.
646    /// It is the client's responsibility to identify the type of file and to parse it (usually by
647    /// delegating to FreeType or a similar library).
648    pub buffer: Option<fidl_fuchsia_mem::Buffer>,
649    /// Identifier for the buffer. Responses with the same `buffer_id` are guaranteed to contain the
650    /// same data in the buffer. Clients may use this value to detect if they already have the font
651    /// cached in parsed form.
652    pub buffer_id: Option<u32>,
653    /// Index of the returned typeface within `buffer`. Used for digital font formats that may
654    /// contain more than one typeface per file, e.g. TTC (TrueType Collection).
655    pub font_index: Option<u32>,
656    #[doc(hidden)]
657    pub __source_breaking: fidl::marker::SourceBreaking,
658}
659
660impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for TypefaceResponse {}
661
662#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
663pub struct FontSetEventListenerMarker;
664
665impl fidl::endpoints::ProtocolMarker for FontSetEventListenerMarker {
666    type Proxy = FontSetEventListenerProxy;
667    type RequestStream = FontSetEventListenerRequestStream;
668    #[cfg(target_os = "fuchsia")]
669    type SynchronousProxy = FontSetEventListenerSynchronousProxy;
670
671    const DEBUG_NAME: &'static str = "(anonymous) FontSetEventListener";
672}
673
674pub trait FontSetEventListenerProxyInterface: Send + Sync {
675    type OnFontSetUpdatedResponseFut: std::future::Future<Output = Result<(), fidl::Error>> + Send;
676    fn r#on_font_set_updated(
677        &self,
678        event: &FontSetUpdatedEvent,
679    ) -> Self::OnFontSetUpdatedResponseFut;
680}
681#[derive(Debug)]
682#[cfg(target_os = "fuchsia")]
683pub struct FontSetEventListenerSynchronousProxy {
684    client: fidl::client::sync::Client,
685}
686
687#[cfg(target_os = "fuchsia")]
688impl fidl::endpoints::SynchronousProxy for FontSetEventListenerSynchronousProxy {
689    type Proxy = FontSetEventListenerProxy;
690    type Protocol = FontSetEventListenerMarker;
691
692    fn from_channel(inner: fidl::Channel) -> Self {
693        Self::new(inner)
694    }
695
696    fn into_channel(self) -> fidl::Channel {
697        self.client.into_channel()
698    }
699
700    fn as_channel(&self) -> &fidl::Channel {
701        self.client.as_channel()
702    }
703}
704
705#[cfg(target_os = "fuchsia")]
706impl FontSetEventListenerSynchronousProxy {
707    pub fn new(channel: fidl::Channel) -> Self {
708        let protocol_name =
709            <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
710        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
711    }
712
713    pub fn into_channel(self) -> fidl::Channel {
714        self.client.into_channel()
715    }
716
717    /// Waits until an event arrives and returns it. It is safe for other
718    /// threads to make concurrent requests while waiting for an event.
719    pub fn wait_for_event(
720        &self,
721        deadline: zx::MonotonicInstant,
722    ) -> Result<FontSetEventListenerEvent, fidl::Error> {
723        FontSetEventListenerEvent::decode(self.client.wait_for_event(deadline)?)
724    }
725
726    /// The set of fonts available in the `Provider` has changed. See
727    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
728    pub fn r#on_font_set_updated(
729        &self,
730        mut event: &FontSetUpdatedEvent,
731        ___deadline: zx::MonotonicInstant,
732    ) -> Result<(), fidl::Error> {
733        let _response = self.client.send_query::<
734            FontSetEventListenerOnFontSetUpdatedRequest,
735            fidl::encoding::EmptyPayload,
736        >(
737            (event,),
738            0xf0cd2d121f881f9,
739            fidl::encoding::DynamicFlags::empty(),
740            ___deadline,
741        )?;
742        Ok(_response)
743    }
744}
745
746#[derive(Debug, Clone)]
747pub struct FontSetEventListenerProxy {
748    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
749}
750
751impl fidl::endpoints::Proxy for FontSetEventListenerProxy {
752    type Protocol = FontSetEventListenerMarker;
753
754    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
755        Self::new(inner)
756    }
757
758    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
759        self.client.into_channel().map_err(|client| Self { client })
760    }
761
762    fn as_channel(&self) -> &::fidl::AsyncChannel {
763        self.client.as_channel()
764    }
765}
766
767impl FontSetEventListenerProxy {
768    /// Create a new Proxy for fuchsia.fonts/FontSetEventListener.
769    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
770        let protocol_name =
771            <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
772        Self { client: fidl::client::Client::new(channel, protocol_name) }
773    }
774
775    /// Get a Stream of events from the remote end of the protocol.
776    ///
777    /// # Panics
778    ///
779    /// Panics if the event stream was already taken.
780    pub fn take_event_stream(&self) -> FontSetEventListenerEventStream {
781        FontSetEventListenerEventStream { event_receiver: self.client.take_event_receiver() }
782    }
783
784    /// The set of fonts available in the `Provider` has changed. See
785    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
786    pub fn r#on_font_set_updated(
787        &self,
788        mut event: &FontSetUpdatedEvent,
789    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
790        FontSetEventListenerProxyInterface::r#on_font_set_updated(self, event)
791    }
792}
793
794impl FontSetEventListenerProxyInterface for FontSetEventListenerProxy {
795    type OnFontSetUpdatedResponseFut =
796        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
797    fn r#on_font_set_updated(
798        &self,
799        mut event: &FontSetUpdatedEvent,
800    ) -> Self::OnFontSetUpdatedResponseFut {
801        fn _decode(
802            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
803        ) -> Result<(), fidl::Error> {
804            let _response = fidl::client::decode_transaction_body::<
805                fidl::encoding::EmptyPayload,
806                fidl::encoding::DefaultFuchsiaResourceDialect,
807                0xf0cd2d121f881f9,
808            >(_buf?)?;
809            Ok(_response)
810        }
811        self.client.send_query_and_decode::<FontSetEventListenerOnFontSetUpdatedRequest, ()>(
812            (event,),
813            0xf0cd2d121f881f9,
814            fidl::encoding::DynamicFlags::empty(),
815            _decode,
816        )
817    }
818}
819
820pub struct FontSetEventListenerEventStream {
821    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
822}
823
824impl std::marker::Unpin for FontSetEventListenerEventStream {}
825
826impl futures::stream::FusedStream for FontSetEventListenerEventStream {
827    fn is_terminated(&self) -> bool {
828        self.event_receiver.is_terminated()
829    }
830}
831
832impl futures::Stream for FontSetEventListenerEventStream {
833    type Item = Result<FontSetEventListenerEvent, fidl::Error>;
834
835    fn poll_next(
836        mut self: std::pin::Pin<&mut Self>,
837        cx: &mut std::task::Context<'_>,
838    ) -> std::task::Poll<Option<Self::Item>> {
839        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
840            &mut self.event_receiver,
841            cx
842        )?) {
843            Some(buf) => std::task::Poll::Ready(Some(FontSetEventListenerEvent::decode(buf))),
844            None => std::task::Poll::Ready(None),
845        }
846    }
847}
848
849#[derive(Debug)]
850pub enum FontSetEventListenerEvent {}
851
852impl FontSetEventListenerEvent {
853    /// Decodes a message buffer as a [`FontSetEventListenerEvent`].
854    fn decode(
855        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
856    ) -> Result<FontSetEventListenerEvent, fidl::Error> {
857        let (bytes, _handles) = buf.split_mut();
858        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
859        debug_assert_eq!(tx_header.tx_id, 0);
860        match tx_header.ordinal {
861            _ => Err(fidl::Error::UnknownOrdinal {
862                ordinal: tx_header.ordinal,
863                protocol_name:
864                    <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
865            }),
866        }
867    }
868}
869
870/// A Stream of incoming requests for fuchsia.fonts/FontSetEventListener.
871pub struct FontSetEventListenerRequestStream {
872    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
873    is_terminated: bool,
874}
875
876impl std::marker::Unpin for FontSetEventListenerRequestStream {}
877
878impl futures::stream::FusedStream for FontSetEventListenerRequestStream {
879    fn is_terminated(&self) -> bool {
880        self.is_terminated
881    }
882}
883
884impl fidl::endpoints::RequestStream for FontSetEventListenerRequestStream {
885    type Protocol = FontSetEventListenerMarker;
886    type ControlHandle = FontSetEventListenerControlHandle;
887
888    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
889        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
890    }
891
892    fn control_handle(&self) -> Self::ControlHandle {
893        FontSetEventListenerControlHandle { inner: self.inner.clone() }
894    }
895
896    fn into_inner(
897        self,
898    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
899    {
900        (self.inner, self.is_terminated)
901    }
902
903    fn from_inner(
904        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
905        is_terminated: bool,
906    ) -> Self {
907        Self { inner, is_terminated }
908    }
909}
910
911impl futures::Stream for FontSetEventListenerRequestStream {
912    type Item = Result<FontSetEventListenerRequest, fidl::Error>;
913
914    fn poll_next(
915        mut self: std::pin::Pin<&mut Self>,
916        cx: &mut std::task::Context<'_>,
917    ) -> std::task::Poll<Option<Self::Item>> {
918        let this = &mut *self;
919        if this.inner.check_shutdown(cx) {
920            this.is_terminated = true;
921            return std::task::Poll::Ready(None);
922        }
923        if this.is_terminated {
924            panic!("polled FontSetEventListenerRequestStream after completion");
925        }
926        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
927            |bytes, handles| {
928                match this.inner.channel().read_etc(cx, bytes, handles) {
929                    std::task::Poll::Ready(Ok(())) => {}
930                    std::task::Poll::Pending => return std::task::Poll::Pending,
931                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
932                        this.is_terminated = true;
933                        return std::task::Poll::Ready(None);
934                    }
935                    std::task::Poll::Ready(Err(e)) => {
936                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
937                            e.into(),
938                        ))))
939                    }
940                }
941
942                // A message has been received from the channel
943                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
944
945                std::task::Poll::Ready(Some(match header.ordinal {
946                0xf0cd2d121f881f9 => {
947                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
948                    let mut req = fidl::new_empty!(FontSetEventListenerOnFontSetUpdatedRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
949                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<FontSetEventListenerOnFontSetUpdatedRequest>(&header, _body_bytes, handles, &mut req)?;
950                    let control_handle = FontSetEventListenerControlHandle {
951                        inner: this.inner.clone(),
952                    };
953                    Ok(FontSetEventListenerRequest::OnFontSetUpdated {event: req.event,
954
955                        responder: FontSetEventListenerOnFontSetUpdatedResponder {
956                            control_handle: std::mem::ManuallyDrop::new(control_handle),
957                            tx_id: header.tx_id,
958                        },
959                    })
960                }
961                _ => Err(fidl::Error::UnknownOrdinal {
962                    ordinal: header.ordinal,
963                    protocol_name: <FontSetEventListenerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
964                }),
965            }))
966            },
967        )
968    }
969}
970
971/// Protocol for listening to possible events that may occur in the `Provider`'s set of fonts.
972///
973/// Register a listener using [`fuchsia.fonts/Provider.RegisterFontSetEventListener`].
974#[derive(Debug)]
975pub enum FontSetEventListenerRequest {
976    /// The set of fonts available in the `Provider` has changed. See
977    /// [`fuchsia.fonts/FontSetUpdatedEvent`].
978    OnFontSetUpdated {
979        event: FontSetUpdatedEvent,
980        responder: FontSetEventListenerOnFontSetUpdatedResponder,
981    },
982}
983
984impl FontSetEventListenerRequest {
985    #[allow(irrefutable_let_patterns)]
986    pub fn into_on_font_set_updated(
987        self,
988    ) -> Option<(FontSetUpdatedEvent, FontSetEventListenerOnFontSetUpdatedResponder)> {
989        if let FontSetEventListenerRequest::OnFontSetUpdated { event, responder } = self {
990            Some((event, responder))
991        } else {
992            None
993        }
994    }
995
996    /// Name of the method defined in FIDL
997    pub fn method_name(&self) -> &'static str {
998        match *self {
999            FontSetEventListenerRequest::OnFontSetUpdated { .. } => "on_font_set_updated",
1000        }
1001    }
1002}
1003
1004#[derive(Debug, Clone)]
1005pub struct FontSetEventListenerControlHandle {
1006    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1007}
1008
1009impl fidl::endpoints::ControlHandle for FontSetEventListenerControlHandle {
1010    fn shutdown(&self) {
1011        self.inner.shutdown()
1012    }
1013    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1014        self.inner.shutdown_with_epitaph(status)
1015    }
1016
1017    fn is_closed(&self) -> bool {
1018        self.inner.channel().is_closed()
1019    }
1020    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1021        self.inner.channel().on_closed()
1022    }
1023
1024    #[cfg(target_os = "fuchsia")]
1025    fn signal_peer(
1026        &self,
1027        clear_mask: zx::Signals,
1028        set_mask: zx::Signals,
1029    ) -> Result<(), zx_status::Status> {
1030        use fidl::Peered;
1031        self.inner.channel().signal_peer(clear_mask, set_mask)
1032    }
1033}
1034
1035impl FontSetEventListenerControlHandle {}
1036
1037#[must_use = "FIDL methods require a response to be sent"]
1038#[derive(Debug)]
1039pub struct FontSetEventListenerOnFontSetUpdatedResponder {
1040    control_handle: std::mem::ManuallyDrop<FontSetEventListenerControlHandle>,
1041    tx_id: u32,
1042}
1043
1044/// Set the the channel to be shutdown (see [`FontSetEventListenerControlHandle::shutdown`])
1045/// if the responder is dropped without sending a response, so that the client
1046/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1047impl std::ops::Drop for FontSetEventListenerOnFontSetUpdatedResponder {
1048    fn drop(&mut self) {
1049        self.control_handle.shutdown();
1050        // Safety: drops once, never accessed again
1051        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1052    }
1053}
1054
1055impl fidl::endpoints::Responder for FontSetEventListenerOnFontSetUpdatedResponder {
1056    type ControlHandle = FontSetEventListenerControlHandle;
1057
1058    fn control_handle(&self) -> &FontSetEventListenerControlHandle {
1059        &self.control_handle
1060    }
1061
1062    fn drop_without_shutdown(mut self) {
1063        // Safety: drops once, never accessed again due to mem::forget
1064        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1065        // Prevent Drop from running (which would shut down the channel)
1066        std::mem::forget(self);
1067    }
1068}
1069
1070impl FontSetEventListenerOnFontSetUpdatedResponder {
1071    /// Sends a response to the FIDL transaction.
1072    ///
1073    /// Sets the channel to shutdown if an error occurs.
1074    pub fn send(self) -> Result<(), fidl::Error> {
1075        let _result = self.send_raw();
1076        if _result.is_err() {
1077            self.control_handle.shutdown();
1078        }
1079        self.drop_without_shutdown();
1080        _result
1081    }
1082
1083    /// Similar to "send" but does not shutdown the channel if an error occurs.
1084    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
1085        let _result = self.send_raw();
1086        self.drop_without_shutdown();
1087        _result
1088    }
1089
1090    fn send_raw(&self) -> Result<(), fidl::Error> {
1091        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
1092            (),
1093            self.tx_id,
1094            0xf0cd2d121f881f9,
1095            fidl::encoding::DynamicFlags::empty(),
1096        )
1097    }
1098}
1099
1100#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1101pub struct ProviderMarker;
1102
1103impl fidl::endpoints::ProtocolMarker for ProviderMarker {
1104    type Proxy = ProviderProxy;
1105    type RequestStream = ProviderRequestStream;
1106    #[cfg(target_os = "fuchsia")]
1107    type SynchronousProxy = ProviderSynchronousProxy;
1108
1109    const DEBUG_NAME: &'static str = "fuchsia.fonts.Provider";
1110}
1111impl fidl::endpoints::DiscoverableProtocolMarker for ProviderMarker {}
1112
1113pub trait ProviderProxyInterface: Send + Sync {
1114    type GetFontResponseFut: std::future::Future<Output = Result<Option<Box<Response>>, fidl::Error>>
1115        + Send;
1116    fn r#get_font(&self, request: &Request) -> Self::GetFontResponseFut;
1117    type GetFamilyInfoResponseFut: std::future::Future<Output = Result<Option<Box<FamilyInfo>>, fidl::Error>>
1118        + Send;
1119    fn r#get_family_info(&self, family: &str) -> Self::GetFamilyInfoResponseFut;
1120    type GetTypefaceResponseFut: std::future::Future<Output = Result<TypefaceResponse, fidl::Error>>
1121        + Send;
1122    fn r#get_typeface(&self, request: &TypefaceRequest) -> Self::GetTypefaceResponseFut;
1123    type GetFontFamilyInfoResponseFut: std::future::Future<Output = Result<FontFamilyInfo, fidl::Error>>
1124        + Send;
1125    fn r#get_font_family_info(&self, family: &FamilyName) -> Self::GetFontFamilyInfoResponseFut;
1126    type RegisterFontSetEventListenerResponseFut: std::future::Future<Output = Result<(), fidl::Error>>
1127        + Send;
1128    fn r#register_font_set_event_listener(
1129        &self,
1130        listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1131    ) -> Self::RegisterFontSetEventListenerResponseFut;
1132}
1133#[derive(Debug)]
1134#[cfg(target_os = "fuchsia")]
1135pub struct ProviderSynchronousProxy {
1136    client: fidl::client::sync::Client,
1137}
1138
1139#[cfg(target_os = "fuchsia")]
1140impl fidl::endpoints::SynchronousProxy for ProviderSynchronousProxy {
1141    type Proxy = ProviderProxy;
1142    type Protocol = ProviderMarker;
1143
1144    fn from_channel(inner: fidl::Channel) -> Self {
1145        Self::new(inner)
1146    }
1147
1148    fn into_channel(self) -> fidl::Channel {
1149        self.client.into_channel()
1150    }
1151
1152    fn as_channel(&self) -> &fidl::Channel {
1153        self.client.as_channel()
1154    }
1155}
1156
1157#[cfg(target_os = "fuchsia")]
1158impl ProviderSynchronousProxy {
1159    pub fn new(channel: fidl::Channel) -> Self {
1160        let protocol_name = <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1161        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1162    }
1163
1164    pub fn into_channel(self) -> fidl::Channel {
1165        self.client.into_channel()
1166    }
1167
1168    /// Waits until an event arrives and returns it. It is safe for other
1169    /// threads to make concurrent requests while waiting for an event.
1170    pub fn wait_for_event(
1171        &self,
1172        deadline: zx::MonotonicInstant,
1173    ) -> Result<ProviderEvent, fidl::Error> {
1174        ProviderEvent::decode(self.client.wait_for_event(deadline)?)
1175    }
1176
1177    /// Deprecated. See `GetTypeface`.
1178    ///
1179    /// Returns font that matches specified `request`.
1180    pub fn r#get_font(
1181        &self,
1182        mut request: &Request,
1183        ___deadline: zx::MonotonicInstant,
1184    ) -> Result<Option<Box<Response>>, fidl::Error> {
1185        let _response = self.client.send_query::<ProviderGetFontRequest, ProviderGetFontResponse>(
1186            (request,),
1187            0x6daeaad83184076b,
1188            fidl::encoding::DynamicFlags::empty(),
1189            ___deadline,
1190        )?;
1191        Ok(_response.response)
1192    }
1193
1194    /// Deprecated. See `GetFontFamilyInfo`.
1195    ///
1196    /// Returns information for the specified font family or null if there is
1197    /// no family with the specified name. This function respects family name
1198    /// aliases and ignores case, so request for "robotoSLAB" will return
1199    /// FamilyInfo for "Roboto Slab".
1200    pub fn r#get_family_info(
1201        &self,
1202        mut family: &str,
1203        ___deadline: zx::MonotonicInstant,
1204    ) -> Result<Option<Box<FamilyInfo>>, fidl::Error> {
1205        let _response =
1206            self.client.send_query::<ProviderGetFamilyInfoRequest, ProviderGetFamilyInfoResponse>(
1207                (family,),
1208                0x27aba13280090db3,
1209                fidl::encoding::DynamicFlags::empty(),
1210                ___deadline,
1211            )?;
1212        Ok(_response.family_info)
1213    }
1214
1215    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
1216    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
1217    /// is used to disable fallbacks.)
1218    pub fn r#get_typeface(
1219        &self,
1220        mut request: &TypefaceRequest,
1221        ___deadline: zx::MonotonicInstant,
1222    ) -> Result<TypefaceResponse, fidl::Error> {
1223        let _response =
1224            self.client.send_query::<ProviderGetTypefaceRequest, ProviderGetTypefaceResponse>(
1225                (request,),
1226                0x5481d24f1a4b0671,
1227                fidl::encoding::DynamicFlags::empty(),
1228                ___deadline,
1229            )?;
1230        Ok(_response.response)
1231    }
1232
1233    /// Returns information for the specified font family, or an empty table if there is no family
1234    /// with the specified name.
1235    ///
1236    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
1237    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
1238    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
1239    pub fn r#get_font_family_info(
1240        &self,
1241        mut family: &FamilyName,
1242        ___deadline: zx::MonotonicInstant,
1243    ) -> Result<FontFamilyInfo, fidl::Error> {
1244        let _response = self
1245            .client
1246            .send_query::<ProviderGetFontFamilyInfoRequest, ProviderGetFontFamilyInfoResponse>(
1247                (family,),
1248                0x7520ee83bf25c9ca,
1249                fidl::encoding::DynamicFlags::empty(),
1250                ___deadline,
1251            )?;
1252        Ok(_response.family_info)
1253    }
1254
1255    /// Register a listener to be notified when the set of available fonts or mappings has changed.
1256    /// A client can register as many listeners as it wishes.
1257    ///
1258    /// To unregister, close the channel.
1259    pub fn r#register_font_set_event_listener(
1260        &self,
1261        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1262        ___deadline: zx::MonotonicInstant,
1263    ) -> Result<(), fidl::Error> {
1264        let _response = self.client.send_query::<
1265            ProviderRegisterFontSetEventListenerRequest,
1266            fidl::encoding::EmptyPayload,
1267        >(
1268            (listener,),
1269            0x196898fd17cb694c,
1270            fidl::encoding::DynamicFlags::empty(),
1271            ___deadline,
1272        )?;
1273        Ok(_response)
1274    }
1275}
1276
1277#[derive(Debug, Clone)]
1278pub struct ProviderProxy {
1279    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1280}
1281
1282impl fidl::endpoints::Proxy for ProviderProxy {
1283    type Protocol = ProviderMarker;
1284
1285    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1286        Self::new(inner)
1287    }
1288
1289    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1290        self.client.into_channel().map_err(|client| Self { client })
1291    }
1292
1293    fn as_channel(&self) -> &::fidl::AsyncChannel {
1294        self.client.as_channel()
1295    }
1296}
1297
1298impl ProviderProxy {
1299    /// Create a new Proxy for fuchsia.fonts/Provider.
1300    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1301        let protocol_name = <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1302        Self { client: fidl::client::Client::new(channel, protocol_name) }
1303    }
1304
1305    /// Get a Stream of events from the remote end of the protocol.
1306    ///
1307    /// # Panics
1308    ///
1309    /// Panics if the event stream was already taken.
1310    pub fn take_event_stream(&self) -> ProviderEventStream {
1311        ProviderEventStream { event_receiver: self.client.take_event_receiver() }
1312    }
1313
1314    /// Deprecated. See `GetTypeface`.
1315    ///
1316    /// Returns font that matches specified `request`.
1317    pub fn r#get_font(
1318        &self,
1319        mut request: &Request,
1320    ) -> fidl::client::QueryResponseFut<
1321        Option<Box<Response>>,
1322        fidl::encoding::DefaultFuchsiaResourceDialect,
1323    > {
1324        ProviderProxyInterface::r#get_font(self, request)
1325    }
1326
1327    /// Deprecated. See `GetFontFamilyInfo`.
1328    ///
1329    /// Returns information for the specified font family or null if there is
1330    /// no family with the specified name. This function respects family name
1331    /// aliases and ignores case, so request for "robotoSLAB" will return
1332    /// FamilyInfo for "Roboto Slab".
1333    pub fn r#get_family_info(
1334        &self,
1335        mut family: &str,
1336    ) -> fidl::client::QueryResponseFut<
1337        Option<Box<FamilyInfo>>,
1338        fidl::encoding::DefaultFuchsiaResourceDialect,
1339    > {
1340        ProviderProxyInterface::r#get_family_info(self, family)
1341    }
1342
1343    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
1344    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
1345    /// is used to disable fallbacks.)
1346    pub fn r#get_typeface(
1347        &self,
1348        mut request: &TypefaceRequest,
1349    ) -> fidl::client::QueryResponseFut<
1350        TypefaceResponse,
1351        fidl::encoding::DefaultFuchsiaResourceDialect,
1352    > {
1353        ProviderProxyInterface::r#get_typeface(self, request)
1354    }
1355
1356    /// Returns information for the specified font family, or an empty table if there is no family
1357    /// with the specified name.
1358    ///
1359    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
1360    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
1361    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
1362    pub fn r#get_font_family_info(
1363        &self,
1364        mut family: &FamilyName,
1365    ) -> fidl::client::QueryResponseFut<FontFamilyInfo, fidl::encoding::DefaultFuchsiaResourceDialect>
1366    {
1367        ProviderProxyInterface::r#get_font_family_info(self, family)
1368    }
1369
1370    /// Register a listener to be notified when the set of available fonts or mappings has changed.
1371    /// A client can register as many listeners as it wishes.
1372    ///
1373    /// To unregister, close the channel.
1374    pub fn r#register_font_set_event_listener(
1375        &self,
1376        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1377    ) -> fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect> {
1378        ProviderProxyInterface::r#register_font_set_event_listener(self, listener)
1379    }
1380}
1381
1382impl ProviderProxyInterface for ProviderProxy {
1383    type GetFontResponseFut = fidl::client::QueryResponseFut<
1384        Option<Box<Response>>,
1385        fidl::encoding::DefaultFuchsiaResourceDialect,
1386    >;
1387    fn r#get_font(&self, mut request: &Request) -> Self::GetFontResponseFut {
1388        fn _decode(
1389            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1390        ) -> Result<Option<Box<Response>>, fidl::Error> {
1391            let _response = fidl::client::decode_transaction_body::<
1392                ProviderGetFontResponse,
1393                fidl::encoding::DefaultFuchsiaResourceDialect,
1394                0x6daeaad83184076b,
1395            >(_buf?)?;
1396            Ok(_response.response)
1397        }
1398        self.client.send_query_and_decode::<ProviderGetFontRequest, Option<Box<Response>>>(
1399            (request,),
1400            0x6daeaad83184076b,
1401            fidl::encoding::DynamicFlags::empty(),
1402            _decode,
1403        )
1404    }
1405
1406    type GetFamilyInfoResponseFut = fidl::client::QueryResponseFut<
1407        Option<Box<FamilyInfo>>,
1408        fidl::encoding::DefaultFuchsiaResourceDialect,
1409    >;
1410    fn r#get_family_info(&self, mut family: &str) -> Self::GetFamilyInfoResponseFut {
1411        fn _decode(
1412            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1413        ) -> Result<Option<Box<FamilyInfo>>, fidl::Error> {
1414            let _response = fidl::client::decode_transaction_body::<
1415                ProviderGetFamilyInfoResponse,
1416                fidl::encoding::DefaultFuchsiaResourceDialect,
1417                0x27aba13280090db3,
1418            >(_buf?)?;
1419            Ok(_response.family_info)
1420        }
1421        self.client.send_query_and_decode::<ProviderGetFamilyInfoRequest, Option<Box<FamilyInfo>>>(
1422            (family,),
1423            0x27aba13280090db3,
1424            fidl::encoding::DynamicFlags::empty(),
1425            _decode,
1426        )
1427    }
1428
1429    type GetTypefaceResponseFut = fidl::client::QueryResponseFut<
1430        TypefaceResponse,
1431        fidl::encoding::DefaultFuchsiaResourceDialect,
1432    >;
1433    fn r#get_typeface(&self, mut request: &TypefaceRequest) -> Self::GetTypefaceResponseFut {
1434        fn _decode(
1435            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1436        ) -> Result<TypefaceResponse, fidl::Error> {
1437            let _response = fidl::client::decode_transaction_body::<
1438                ProviderGetTypefaceResponse,
1439                fidl::encoding::DefaultFuchsiaResourceDialect,
1440                0x5481d24f1a4b0671,
1441            >(_buf?)?;
1442            Ok(_response.response)
1443        }
1444        self.client.send_query_and_decode::<ProviderGetTypefaceRequest, TypefaceResponse>(
1445            (request,),
1446            0x5481d24f1a4b0671,
1447            fidl::encoding::DynamicFlags::empty(),
1448            _decode,
1449        )
1450    }
1451
1452    type GetFontFamilyInfoResponseFut = fidl::client::QueryResponseFut<
1453        FontFamilyInfo,
1454        fidl::encoding::DefaultFuchsiaResourceDialect,
1455    >;
1456    fn r#get_font_family_info(
1457        &self,
1458        mut family: &FamilyName,
1459    ) -> Self::GetFontFamilyInfoResponseFut {
1460        fn _decode(
1461            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1462        ) -> Result<FontFamilyInfo, fidl::Error> {
1463            let _response = fidl::client::decode_transaction_body::<
1464                ProviderGetFontFamilyInfoResponse,
1465                fidl::encoding::DefaultFuchsiaResourceDialect,
1466                0x7520ee83bf25c9ca,
1467            >(_buf?)?;
1468            Ok(_response.family_info)
1469        }
1470        self.client.send_query_and_decode::<ProviderGetFontFamilyInfoRequest, FontFamilyInfo>(
1471            (family,),
1472            0x7520ee83bf25c9ca,
1473            fidl::encoding::DynamicFlags::empty(),
1474            _decode,
1475        )
1476    }
1477
1478    type RegisterFontSetEventListenerResponseFut =
1479        fidl::client::QueryResponseFut<(), fidl::encoding::DefaultFuchsiaResourceDialect>;
1480    fn r#register_font_set_event_listener(
1481        &self,
1482        mut listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1483    ) -> Self::RegisterFontSetEventListenerResponseFut {
1484        fn _decode(
1485            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1486        ) -> Result<(), fidl::Error> {
1487            let _response = fidl::client::decode_transaction_body::<
1488                fidl::encoding::EmptyPayload,
1489                fidl::encoding::DefaultFuchsiaResourceDialect,
1490                0x196898fd17cb694c,
1491            >(_buf?)?;
1492            Ok(_response)
1493        }
1494        self.client.send_query_and_decode::<ProviderRegisterFontSetEventListenerRequest, ()>(
1495            (listener,),
1496            0x196898fd17cb694c,
1497            fidl::encoding::DynamicFlags::empty(),
1498            _decode,
1499        )
1500    }
1501}
1502
1503pub struct ProviderEventStream {
1504    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1505}
1506
1507impl std::marker::Unpin for ProviderEventStream {}
1508
1509impl futures::stream::FusedStream for ProviderEventStream {
1510    fn is_terminated(&self) -> bool {
1511        self.event_receiver.is_terminated()
1512    }
1513}
1514
1515impl futures::Stream for ProviderEventStream {
1516    type Item = Result<ProviderEvent, fidl::Error>;
1517
1518    fn poll_next(
1519        mut self: std::pin::Pin<&mut Self>,
1520        cx: &mut std::task::Context<'_>,
1521    ) -> std::task::Poll<Option<Self::Item>> {
1522        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1523            &mut self.event_receiver,
1524            cx
1525        )?) {
1526            Some(buf) => std::task::Poll::Ready(Some(ProviderEvent::decode(buf))),
1527            None => std::task::Poll::Ready(None),
1528        }
1529    }
1530}
1531
1532#[derive(Debug)]
1533pub enum ProviderEvent {}
1534
1535impl ProviderEvent {
1536    /// Decodes a message buffer as a [`ProviderEvent`].
1537    fn decode(
1538        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1539    ) -> Result<ProviderEvent, fidl::Error> {
1540        let (bytes, _handles) = buf.split_mut();
1541        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1542        debug_assert_eq!(tx_header.tx_id, 0);
1543        match tx_header.ordinal {
1544            _ => Err(fidl::Error::UnknownOrdinal {
1545                ordinal: tx_header.ordinal,
1546                protocol_name: <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1547            }),
1548        }
1549    }
1550}
1551
1552/// A Stream of incoming requests for fuchsia.fonts/Provider.
1553pub struct ProviderRequestStream {
1554    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1555    is_terminated: bool,
1556}
1557
1558impl std::marker::Unpin for ProviderRequestStream {}
1559
1560impl futures::stream::FusedStream for ProviderRequestStream {
1561    fn is_terminated(&self) -> bool {
1562        self.is_terminated
1563    }
1564}
1565
1566impl fidl::endpoints::RequestStream for ProviderRequestStream {
1567    type Protocol = ProviderMarker;
1568    type ControlHandle = ProviderControlHandle;
1569
1570    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1571        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1572    }
1573
1574    fn control_handle(&self) -> Self::ControlHandle {
1575        ProviderControlHandle { inner: self.inner.clone() }
1576    }
1577
1578    fn into_inner(
1579        self,
1580    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1581    {
1582        (self.inner, self.is_terminated)
1583    }
1584
1585    fn from_inner(
1586        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1587        is_terminated: bool,
1588    ) -> Self {
1589        Self { inner, is_terminated }
1590    }
1591}
1592
1593impl futures::Stream for ProviderRequestStream {
1594    type Item = Result<ProviderRequest, fidl::Error>;
1595
1596    fn poll_next(
1597        mut self: std::pin::Pin<&mut Self>,
1598        cx: &mut std::task::Context<'_>,
1599    ) -> std::task::Poll<Option<Self::Item>> {
1600        let this = &mut *self;
1601        if this.inner.check_shutdown(cx) {
1602            this.is_terminated = true;
1603            return std::task::Poll::Ready(None);
1604        }
1605        if this.is_terminated {
1606            panic!("polled ProviderRequestStream after completion");
1607        }
1608        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1609            |bytes, handles| {
1610                match this.inner.channel().read_etc(cx, bytes, handles) {
1611                    std::task::Poll::Ready(Ok(())) => {}
1612                    std::task::Poll::Pending => return std::task::Poll::Pending,
1613                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1614                        this.is_terminated = true;
1615                        return std::task::Poll::Ready(None);
1616                    }
1617                    std::task::Poll::Ready(Err(e)) => {
1618                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1619                            e.into(),
1620                        ))))
1621                    }
1622                }
1623
1624                // A message has been received from the channel
1625                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1626
1627                std::task::Poll::Ready(Some(match header.ordinal {
1628                    0x6daeaad83184076b => {
1629                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1630                        let mut req = fidl::new_empty!(
1631                            ProviderGetFontRequest,
1632                            fidl::encoding::DefaultFuchsiaResourceDialect
1633                        );
1634                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFontRequest>(&header, _body_bytes, handles, &mut req)?;
1635                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1636                        Ok(ProviderRequest::GetFont {
1637                            request: req.request,
1638
1639                            responder: ProviderGetFontResponder {
1640                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1641                                tx_id: header.tx_id,
1642                            },
1643                        })
1644                    }
1645                    0x27aba13280090db3 => {
1646                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1647                        let mut req = fidl::new_empty!(
1648                            ProviderGetFamilyInfoRequest,
1649                            fidl::encoding::DefaultFuchsiaResourceDialect
1650                        );
1651                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFamilyInfoRequest>(&header, _body_bytes, handles, &mut req)?;
1652                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1653                        Ok(ProviderRequest::GetFamilyInfo {
1654                            family: req.family,
1655
1656                            responder: ProviderGetFamilyInfoResponder {
1657                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1658                                tx_id: header.tx_id,
1659                            },
1660                        })
1661                    }
1662                    0x5481d24f1a4b0671 => {
1663                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1664                        let mut req = fidl::new_empty!(
1665                            ProviderGetTypefaceRequest,
1666                            fidl::encoding::DefaultFuchsiaResourceDialect
1667                        );
1668                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetTypefaceRequest>(&header, _body_bytes, handles, &mut req)?;
1669                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1670                        Ok(ProviderRequest::GetTypeface {
1671                            request: req.request,
1672
1673                            responder: ProviderGetTypefaceResponder {
1674                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1675                                tx_id: header.tx_id,
1676                            },
1677                        })
1678                    }
1679                    0x7520ee83bf25c9ca => {
1680                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1681                        let mut req = fidl::new_empty!(
1682                            ProviderGetFontFamilyInfoRequest,
1683                            fidl::encoding::DefaultFuchsiaResourceDialect
1684                        );
1685                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderGetFontFamilyInfoRequest>(&header, _body_bytes, handles, &mut req)?;
1686                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1687                        Ok(ProviderRequest::GetFontFamilyInfo {
1688                            family: req.family,
1689
1690                            responder: ProviderGetFontFamilyInfoResponder {
1691                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1692                                tx_id: header.tx_id,
1693                            },
1694                        })
1695                    }
1696                    0x196898fd17cb694c => {
1697                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1698                        let mut req = fidl::new_empty!(
1699                            ProviderRegisterFontSetEventListenerRequest,
1700                            fidl::encoding::DefaultFuchsiaResourceDialect
1701                        );
1702                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<ProviderRegisterFontSetEventListenerRequest>(&header, _body_bytes, handles, &mut req)?;
1703                        let control_handle = ProviderControlHandle { inner: this.inner.clone() };
1704                        Ok(ProviderRequest::RegisterFontSetEventListener {
1705                            listener: req.listener,
1706
1707                            responder: ProviderRegisterFontSetEventListenerResponder {
1708                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1709                                tx_id: header.tx_id,
1710                            },
1711                        })
1712                    }
1713                    _ => Err(fidl::Error::UnknownOrdinal {
1714                        ordinal: header.ordinal,
1715                        protocol_name:
1716                            <ProviderMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1717                    }),
1718                }))
1719            },
1720        )
1721    }
1722}
1723
1724/// Provider of digital font files and metadata.
1725///
1726/// TODO(https://fxbug.dev/42170326): Remove deprecated methods and move to provider.fidl.
1727#[derive(Debug)]
1728pub enum ProviderRequest {
1729    /// Deprecated. See `GetTypeface`.
1730    ///
1731    /// Returns font that matches specified `request`.
1732    GetFont { request: Request, responder: ProviderGetFontResponder },
1733    /// Deprecated. See `GetFontFamilyInfo`.
1734    ///
1735    /// Returns information for the specified font family or null if there is
1736    /// no family with the specified name. This function respects family name
1737    /// aliases and ignores case, so request for "robotoSLAB" will return
1738    /// FamilyInfo for "Roboto Slab".
1739    GetFamilyInfo { family: String, responder: ProviderGetFamilyInfoResponder },
1740    /// Returns a typeface that matches the specified `request`, or an empty table if no matching
1741    /// face is found. (The latter is more likely to happen if `TypefaceRequestFlags.EXACT_FAMILY`
1742    /// is used to disable fallbacks.)
1743    GetTypeface { request: TypefaceRequest, responder: ProviderGetTypefaceResponder },
1744    /// Returns information for the specified font family, or an empty table if there is no family
1745    /// with the specified name.
1746    ///
1747    /// This function respects family name aliases and ignores case. For example, "RobotoSlab" is an
1748    /// alias for the canonical name "Roboto Slab". A request for "robotoSLAB" would return the
1749    /// `FontFamilyInfo` for "Roboto Slab" due to the case-insensitivity and alias resolution.
1750    GetFontFamilyInfo { family: FamilyName, responder: ProviderGetFontFamilyInfoResponder },
1751    /// Register a listener to be notified when the set of available fonts or mappings has changed.
1752    /// A client can register as many listeners as it wishes.
1753    ///
1754    /// To unregister, close the channel.
1755    RegisterFontSetEventListener {
1756        listener: fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1757        responder: ProviderRegisterFontSetEventListenerResponder,
1758    },
1759}
1760
1761impl ProviderRequest {
1762    #[allow(irrefutable_let_patterns)]
1763    pub fn into_get_font(self) -> Option<(Request, ProviderGetFontResponder)> {
1764        if let ProviderRequest::GetFont { request, responder } = self {
1765            Some((request, responder))
1766        } else {
1767            None
1768        }
1769    }
1770
1771    #[allow(irrefutable_let_patterns)]
1772    pub fn into_get_family_info(self) -> Option<(String, ProviderGetFamilyInfoResponder)> {
1773        if let ProviderRequest::GetFamilyInfo { family, responder } = self {
1774            Some((family, responder))
1775        } else {
1776            None
1777        }
1778    }
1779
1780    #[allow(irrefutable_let_patterns)]
1781    pub fn into_get_typeface(self) -> Option<(TypefaceRequest, ProviderGetTypefaceResponder)> {
1782        if let ProviderRequest::GetTypeface { request, responder } = self {
1783            Some((request, responder))
1784        } else {
1785            None
1786        }
1787    }
1788
1789    #[allow(irrefutable_let_patterns)]
1790    pub fn into_get_font_family_info(
1791        self,
1792    ) -> Option<(FamilyName, ProviderGetFontFamilyInfoResponder)> {
1793        if let ProviderRequest::GetFontFamilyInfo { family, responder } = self {
1794            Some((family, responder))
1795        } else {
1796            None
1797        }
1798    }
1799
1800    #[allow(irrefutable_let_patterns)]
1801    pub fn into_register_font_set_event_listener(
1802        self,
1803    ) -> Option<(
1804        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
1805        ProviderRegisterFontSetEventListenerResponder,
1806    )> {
1807        if let ProviderRequest::RegisterFontSetEventListener { listener, responder } = self {
1808            Some((listener, responder))
1809        } else {
1810            None
1811        }
1812    }
1813
1814    /// Name of the method defined in FIDL
1815    pub fn method_name(&self) -> &'static str {
1816        match *self {
1817            ProviderRequest::GetFont { .. } => "get_font",
1818            ProviderRequest::GetFamilyInfo { .. } => "get_family_info",
1819            ProviderRequest::GetTypeface { .. } => "get_typeface",
1820            ProviderRequest::GetFontFamilyInfo { .. } => "get_font_family_info",
1821            ProviderRequest::RegisterFontSetEventListener { .. } => {
1822                "register_font_set_event_listener"
1823            }
1824        }
1825    }
1826}
1827
1828#[derive(Debug, Clone)]
1829pub struct ProviderControlHandle {
1830    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1831}
1832
1833impl fidl::endpoints::ControlHandle for ProviderControlHandle {
1834    fn shutdown(&self) {
1835        self.inner.shutdown()
1836    }
1837    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1838        self.inner.shutdown_with_epitaph(status)
1839    }
1840
1841    fn is_closed(&self) -> bool {
1842        self.inner.channel().is_closed()
1843    }
1844    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1845        self.inner.channel().on_closed()
1846    }
1847
1848    #[cfg(target_os = "fuchsia")]
1849    fn signal_peer(
1850        &self,
1851        clear_mask: zx::Signals,
1852        set_mask: zx::Signals,
1853    ) -> Result<(), zx_status::Status> {
1854        use fidl::Peered;
1855        self.inner.channel().signal_peer(clear_mask, set_mask)
1856    }
1857}
1858
1859impl ProviderControlHandle {}
1860
1861#[must_use = "FIDL methods require a response to be sent"]
1862#[derive(Debug)]
1863pub struct ProviderGetFontResponder {
1864    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1865    tx_id: u32,
1866}
1867
1868/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1869/// if the responder is dropped without sending a response, so that the client
1870/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1871impl std::ops::Drop for ProviderGetFontResponder {
1872    fn drop(&mut self) {
1873        self.control_handle.shutdown();
1874        // Safety: drops once, never accessed again
1875        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1876    }
1877}
1878
1879impl fidl::endpoints::Responder for ProviderGetFontResponder {
1880    type ControlHandle = ProviderControlHandle;
1881
1882    fn control_handle(&self) -> &ProviderControlHandle {
1883        &self.control_handle
1884    }
1885
1886    fn drop_without_shutdown(mut self) {
1887        // Safety: drops once, never accessed again due to mem::forget
1888        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1889        // Prevent Drop from running (which would shut down the channel)
1890        std::mem::forget(self);
1891    }
1892}
1893
1894impl ProviderGetFontResponder {
1895    /// Sends a response to the FIDL transaction.
1896    ///
1897    /// Sets the channel to shutdown if an error occurs.
1898    pub fn send(self, mut response: Option<Response>) -> Result<(), fidl::Error> {
1899        let _result = self.send_raw(response);
1900        if _result.is_err() {
1901            self.control_handle.shutdown();
1902        }
1903        self.drop_without_shutdown();
1904        _result
1905    }
1906
1907    /// Similar to "send" but does not shutdown the channel if an error occurs.
1908    pub fn send_no_shutdown_on_err(
1909        self,
1910        mut response: Option<Response>,
1911    ) -> Result<(), fidl::Error> {
1912        let _result = self.send_raw(response);
1913        self.drop_without_shutdown();
1914        _result
1915    }
1916
1917    fn send_raw(&self, mut response: Option<Response>) -> Result<(), fidl::Error> {
1918        self.control_handle.inner.send::<ProviderGetFontResponse>(
1919            (response.as_mut(),),
1920            self.tx_id,
1921            0x6daeaad83184076b,
1922            fidl::encoding::DynamicFlags::empty(),
1923        )
1924    }
1925}
1926
1927#[must_use = "FIDL methods require a response to be sent"]
1928#[derive(Debug)]
1929pub struct ProviderGetFamilyInfoResponder {
1930    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1931    tx_id: u32,
1932}
1933
1934/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
1935/// if the responder is dropped without sending a response, so that the client
1936/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1937impl std::ops::Drop for ProviderGetFamilyInfoResponder {
1938    fn drop(&mut self) {
1939        self.control_handle.shutdown();
1940        // Safety: drops once, never accessed again
1941        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1942    }
1943}
1944
1945impl fidl::endpoints::Responder for ProviderGetFamilyInfoResponder {
1946    type ControlHandle = ProviderControlHandle;
1947
1948    fn control_handle(&self) -> &ProviderControlHandle {
1949        &self.control_handle
1950    }
1951
1952    fn drop_without_shutdown(mut self) {
1953        // Safety: drops once, never accessed again due to mem::forget
1954        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1955        // Prevent Drop from running (which would shut down the channel)
1956        std::mem::forget(self);
1957    }
1958}
1959
1960impl ProviderGetFamilyInfoResponder {
1961    /// Sends a response to the FIDL transaction.
1962    ///
1963    /// Sets the channel to shutdown if an error occurs.
1964    pub fn send(self, mut family_info: Option<&FamilyInfo>) -> Result<(), fidl::Error> {
1965        let _result = self.send_raw(family_info);
1966        if _result.is_err() {
1967            self.control_handle.shutdown();
1968        }
1969        self.drop_without_shutdown();
1970        _result
1971    }
1972
1973    /// Similar to "send" but does not shutdown the channel if an error occurs.
1974    pub fn send_no_shutdown_on_err(
1975        self,
1976        mut family_info: Option<&FamilyInfo>,
1977    ) -> Result<(), fidl::Error> {
1978        let _result = self.send_raw(family_info);
1979        self.drop_without_shutdown();
1980        _result
1981    }
1982
1983    fn send_raw(&self, mut family_info: Option<&FamilyInfo>) -> Result<(), fidl::Error> {
1984        self.control_handle.inner.send::<ProviderGetFamilyInfoResponse>(
1985            (family_info,),
1986            self.tx_id,
1987            0x27aba13280090db3,
1988            fidl::encoding::DynamicFlags::empty(),
1989        )
1990    }
1991}
1992
1993#[must_use = "FIDL methods require a response to be sent"]
1994#[derive(Debug)]
1995pub struct ProviderGetTypefaceResponder {
1996    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
1997    tx_id: u32,
1998}
1999
2000/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
2001/// if the responder is dropped without sending a response, so that the client
2002/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2003impl std::ops::Drop for ProviderGetTypefaceResponder {
2004    fn drop(&mut self) {
2005        self.control_handle.shutdown();
2006        // Safety: drops once, never accessed again
2007        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2008    }
2009}
2010
2011impl fidl::endpoints::Responder for ProviderGetTypefaceResponder {
2012    type ControlHandle = ProviderControlHandle;
2013
2014    fn control_handle(&self) -> &ProviderControlHandle {
2015        &self.control_handle
2016    }
2017
2018    fn drop_without_shutdown(mut self) {
2019        // Safety: drops once, never accessed again due to mem::forget
2020        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2021        // Prevent Drop from running (which would shut down the channel)
2022        std::mem::forget(self);
2023    }
2024}
2025
2026impl ProviderGetTypefaceResponder {
2027    /// Sends a response to the FIDL transaction.
2028    ///
2029    /// Sets the channel to shutdown if an error occurs.
2030    pub fn send(self, mut response: TypefaceResponse) -> Result<(), fidl::Error> {
2031        let _result = self.send_raw(response);
2032        if _result.is_err() {
2033            self.control_handle.shutdown();
2034        }
2035        self.drop_without_shutdown();
2036        _result
2037    }
2038
2039    /// Similar to "send" but does not shutdown the channel if an error occurs.
2040    pub fn send_no_shutdown_on_err(
2041        self,
2042        mut response: TypefaceResponse,
2043    ) -> Result<(), fidl::Error> {
2044        let _result = self.send_raw(response);
2045        self.drop_without_shutdown();
2046        _result
2047    }
2048
2049    fn send_raw(&self, mut response: TypefaceResponse) -> Result<(), fidl::Error> {
2050        self.control_handle.inner.send::<ProviderGetTypefaceResponse>(
2051            (&mut response,),
2052            self.tx_id,
2053            0x5481d24f1a4b0671,
2054            fidl::encoding::DynamicFlags::empty(),
2055        )
2056    }
2057}
2058
2059#[must_use = "FIDL methods require a response to be sent"]
2060#[derive(Debug)]
2061pub struct ProviderGetFontFamilyInfoResponder {
2062    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
2063    tx_id: u32,
2064}
2065
2066/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
2067/// if the responder is dropped without sending a response, so that the client
2068/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2069impl std::ops::Drop for ProviderGetFontFamilyInfoResponder {
2070    fn drop(&mut self) {
2071        self.control_handle.shutdown();
2072        // Safety: drops once, never accessed again
2073        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2074    }
2075}
2076
2077impl fidl::endpoints::Responder for ProviderGetFontFamilyInfoResponder {
2078    type ControlHandle = ProviderControlHandle;
2079
2080    fn control_handle(&self) -> &ProviderControlHandle {
2081        &self.control_handle
2082    }
2083
2084    fn drop_without_shutdown(mut self) {
2085        // Safety: drops once, never accessed again due to mem::forget
2086        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2087        // Prevent Drop from running (which would shut down the channel)
2088        std::mem::forget(self);
2089    }
2090}
2091
2092impl ProviderGetFontFamilyInfoResponder {
2093    /// Sends a response to the FIDL transaction.
2094    ///
2095    /// Sets the channel to shutdown if an error occurs.
2096    pub fn send(self, mut family_info: &FontFamilyInfo) -> Result<(), fidl::Error> {
2097        let _result = self.send_raw(family_info);
2098        if _result.is_err() {
2099            self.control_handle.shutdown();
2100        }
2101        self.drop_without_shutdown();
2102        _result
2103    }
2104
2105    /// Similar to "send" but does not shutdown the channel if an error occurs.
2106    pub fn send_no_shutdown_on_err(
2107        self,
2108        mut family_info: &FontFamilyInfo,
2109    ) -> Result<(), fidl::Error> {
2110        let _result = self.send_raw(family_info);
2111        self.drop_without_shutdown();
2112        _result
2113    }
2114
2115    fn send_raw(&self, mut family_info: &FontFamilyInfo) -> Result<(), fidl::Error> {
2116        self.control_handle.inner.send::<ProviderGetFontFamilyInfoResponse>(
2117            (family_info,),
2118            self.tx_id,
2119            0x7520ee83bf25c9ca,
2120            fidl::encoding::DynamicFlags::empty(),
2121        )
2122    }
2123}
2124
2125#[must_use = "FIDL methods require a response to be sent"]
2126#[derive(Debug)]
2127pub struct ProviderRegisterFontSetEventListenerResponder {
2128    control_handle: std::mem::ManuallyDrop<ProviderControlHandle>,
2129    tx_id: u32,
2130}
2131
2132/// Set the the channel to be shutdown (see [`ProviderControlHandle::shutdown`])
2133/// if the responder is dropped without sending a response, so that the client
2134/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2135impl std::ops::Drop for ProviderRegisterFontSetEventListenerResponder {
2136    fn drop(&mut self) {
2137        self.control_handle.shutdown();
2138        // Safety: drops once, never accessed again
2139        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2140    }
2141}
2142
2143impl fidl::endpoints::Responder for ProviderRegisterFontSetEventListenerResponder {
2144    type ControlHandle = ProviderControlHandle;
2145
2146    fn control_handle(&self) -> &ProviderControlHandle {
2147        &self.control_handle
2148    }
2149
2150    fn drop_without_shutdown(mut self) {
2151        // Safety: drops once, never accessed again due to mem::forget
2152        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2153        // Prevent Drop from running (which would shut down the channel)
2154        std::mem::forget(self);
2155    }
2156}
2157
2158impl ProviderRegisterFontSetEventListenerResponder {
2159    /// Sends a response to the FIDL transaction.
2160    ///
2161    /// Sets the channel to shutdown if an error occurs.
2162    pub fn send(self) -> Result<(), fidl::Error> {
2163        let _result = self.send_raw();
2164        if _result.is_err() {
2165            self.control_handle.shutdown();
2166        }
2167        self.drop_without_shutdown();
2168        _result
2169    }
2170
2171    /// Similar to "send" but does not shutdown the channel if an error occurs.
2172    pub fn send_no_shutdown_on_err(self) -> Result<(), fidl::Error> {
2173        let _result = self.send_raw();
2174        self.drop_without_shutdown();
2175        _result
2176    }
2177
2178    fn send_raw(&self) -> Result<(), fidl::Error> {
2179        self.control_handle.inner.send::<fidl::encoding::EmptyPayload>(
2180            (),
2181            self.tx_id,
2182            0x196898fd17cb694c,
2183            fidl::encoding::DynamicFlags::empty(),
2184        )
2185    }
2186}
2187
2188mod internal {
2189    use super::*;
2190    unsafe impl fidl::encoding::TypeMarker for TypefaceRequestFlags {
2191        type Owned = Self;
2192
2193        #[inline(always)]
2194        fn inline_align(_context: fidl::encoding::Context) -> usize {
2195            4
2196        }
2197
2198        #[inline(always)]
2199        fn inline_size(_context: fidl::encoding::Context) -> usize {
2200            4
2201        }
2202    }
2203
2204    impl fidl::encoding::ValueTypeMarker for TypefaceRequestFlags {
2205        type Borrowed<'a> = Self;
2206        #[inline(always)]
2207        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2208            *value
2209        }
2210    }
2211
2212    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2213        for TypefaceRequestFlags
2214    {
2215        #[inline]
2216        unsafe fn encode(
2217            self,
2218            encoder: &mut fidl::encoding::Encoder<'_, D>,
2219            offset: usize,
2220            _depth: fidl::encoding::Depth,
2221        ) -> fidl::Result<()> {
2222            encoder.debug_check_bounds::<Self>(offset);
2223            if self.bits() & Self::all().bits() != self.bits() {
2224                return Err(fidl::Error::InvalidBitsValue);
2225            }
2226            encoder.write_num(self.bits(), offset);
2227            Ok(())
2228        }
2229    }
2230
2231    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TypefaceRequestFlags {
2232        #[inline(always)]
2233        fn new_empty() -> Self {
2234            Self::empty()
2235        }
2236
2237        #[inline]
2238        unsafe fn decode(
2239            &mut self,
2240            decoder: &mut fidl::encoding::Decoder<'_, D>,
2241            offset: usize,
2242            _depth: fidl::encoding::Depth,
2243        ) -> fidl::Result<()> {
2244            decoder.debug_check_bounds::<Self>(offset);
2245            let prim = decoder.read_num::<u32>(offset);
2246            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
2247            Ok(())
2248        }
2249    }
2250    unsafe impl fidl::encoding::TypeMarker for CacheMissPolicy {
2251        type Owned = Self;
2252
2253        #[inline(always)]
2254        fn inline_align(_context: fidl::encoding::Context) -> usize {
2255            std::mem::align_of::<u32>()
2256        }
2257
2258        #[inline(always)]
2259        fn inline_size(_context: fidl::encoding::Context) -> usize {
2260            std::mem::size_of::<u32>()
2261        }
2262
2263        #[inline(always)]
2264        fn encode_is_copy() -> bool {
2265            true
2266        }
2267
2268        #[inline(always)]
2269        fn decode_is_copy() -> bool {
2270            false
2271        }
2272    }
2273
2274    impl fidl::encoding::ValueTypeMarker for CacheMissPolicy {
2275        type Borrowed<'a> = Self;
2276        #[inline(always)]
2277        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2278            *value
2279        }
2280    }
2281
2282    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2283        for CacheMissPolicy
2284    {
2285        #[inline]
2286        unsafe fn encode(
2287            self,
2288            encoder: &mut fidl::encoding::Encoder<'_, D>,
2289            offset: usize,
2290            _depth: fidl::encoding::Depth,
2291        ) -> fidl::Result<()> {
2292            encoder.debug_check_bounds::<Self>(offset);
2293            encoder.write_num(self.into_primitive(), offset);
2294            Ok(())
2295        }
2296    }
2297
2298    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CacheMissPolicy {
2299        #[inline(always)]
2300        fn new_empty() -> Self {
2301            Self::BlockUntilDownloaded
2302        }
2303
2304        #[inline]
2305        unsafe fn decode(
2306            &mut self,
2307            decoder: &mut fidl::encoding::Decoder<'_, D>,
2308            offset: usize,
2309            _depth: fidl::encoding::Depth,
2310        ) -> fidl::Result<()> {
2311            decoder.debug_check_bounds::<Self>(offset);
2312            let prim = decoder.read_num::<u32>(offset);
2313
2314            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2315            Ok(())
2316        }
2317    }
2318    unsafe impl fidl::encoding::TypeMarker for FallbackGroup {
2319        type Owned = Self;
2320
2321        #[inline(always)]
2322        fn inline_align(_context: fidl::encoding::Context) -> usize {
2323            std::mem::align_of::<u32>()
2324        }
2325
2326        #[inline(always)]
2327        fn inline_size(_context: fidl::encoding::Context) -> usize {
2328            std::mem::size_of::<u32>()
2329        }
2330
2331        #[inline(always)]
2332        fn encode_is_copy() -> bool {
2333            true
2334        }
2335
2336        #[inline(always)]
2337        fn decode_is_copy() -> bool {
2338            false
2339        }
2340    }
2341
2342    impl fidl::encoding::ValueTypeMarker for FallbackGroup {
2343        type Borrowed<'a> = Self;
2344        #[inline(always)]
2345        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2346            *value
2347        }
2348    }
2349
2350    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for FallbackGroup {
2351        #[inline]
2352        unsafe fn encode(
2353            self,
2354            encoder: &mut fidl::encoding::Encoder<'_, D>,
2355            offset: usize,
2356            _depth: fidl::encoding::Depth,
2357        ) -> fidl::Result<()> {
2358            encoder.debug_check_bounds::<Self>(offset);
2359            encoder.write_num(self.into_primitive(), offset);
2360            Ok(())
2361        }
2362    }
2363
2364    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FallbackGroup {
2365        #[inline(always)]
2366        fn new_empty() -> Self {
2367            Self::None
2368        }
2369
2370        #[inline]
2371        unsafe fn decode(
2372            &mut self,
2373            decoder: &mut fidl::encoding::Decoder<'_, D>,
2374            offset: usize,
2375            _depth: fidl::encoding::Depth,
2376        ) -> fidl::Result<()> {
2377            decoder.debug_check_bounds::<Self>(offset);
2378            let prim = decoder.read_num::<u32>(offset);
2379
2380            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2381            Ok(())
2382        }
2383    }
2384    unsafe impl fidl::encoding::TypeMarker for GenericFontFamily {
2385        type Owned = Self;
2386
2387        #[inline(always)]
2388        fn inline_align(_context: fidl::encoding::Context) -> usize {
2389            std::mem::align_of::<u32>()
2390        }
2391
2392        #[inline(always)]
2393        fn inline_size(_context: fidl::encoding::Context) -> usize {
2394            std::mem::size_of::<u32>()
2395        }
2396
2397        #[inline(always)]
2398        fn encode_is_copy() -> bool {
2399            true
2400        }
2401
2402        #[inline(always)]
2403        fn decode_is_copy() -> bool {
2404            false
2405        }
2406    }
2407
2408    impl fidl::encoding::ValueTypeMarker for GenericFontFamily {
2409        type Borrowed<'a> = Self;
2410        #[inline(always)]
2411        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2412            *value
2413        }
2414    }
2415
2416    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2417        for GenericFontFamily
2418    {
2419        #[inline]
2420        unsafe fn encode(
2421            self,
2422            encoder: &mut fidl::encoding::Encoder<'_, D>,
2423            offset: usize,
2424            _depth: fidl::encoding::Depth,
2425        ) -> fidl::Result<()> {
2426            encoder.debug_check_bounds::<Self>(offset);
2427            encoder.write_num(self.into_primitive(), offset);
2428            Ok(())
2429        }
2430    }
2431
2432    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GenericFontFamily {
2433        #[inline(always)]
2434        fn new_empty() -> Self {
2435            Self::Serif
2436        }
2437
2438        #[inline]
2439        unsafe fn decode(
2440            &mut self,
2441            decoder: &mut fidl::encoding::Decoder<'_, D>,
2442            offset: usize,
2443            _depth: fidl::encoding::Depth,
2444        ) -> fidl::Result<()> {
2445            decoder.debug_check_bounds::<Self>(offset);
2446            let prim = decoder.read_num::<u32>(offset);
2447
2448            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2449            Ok(())
2450        }
2451    }
2452    unsafe impl fidl::encoding::TypeMarker for Slant {
2453        type Owned = Self;
2454
2455        #[inline(always)]
2456        fn inline_align(_context: fidl::encoding::Context) -> usize {
2457            std::mem::align_of::<u32>()
2458        }
2459
2460        #[inline(always)]
2461        fn inline_size(_context: fidl::encoding::Context) -> usize {
2462            std::mem::size_of::<u32>()
2463        }
2464
2465        #[inline(always)]
2466        fn encode_is_copy() -> bool {
2467            true
2468        }
2469
2470        #[inline(always)]
2471        fn decode_is_copy() -> bool {
2472            false
2473        }
2474    }
2475
2476    impl fidl::encoding::ValueTypeMarker for Slant {
2477        type Borrowed<'a> = Self;
2478        #[inline(always)]
2479        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2480            *value
2481        }
2482    }
2483
2484    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Slant {
2485        #[inline]
2486        unsafe fn encode(
2487            self,
2488            encoder: &mut fidl::encoding::Encoder<'_, D>,
2489            offset: usize,
2490            _depth: fidl::encoding::Depth,
2491        ) -> fidl::Result<()> {
2492            encoder.debug_check_bounds::<Self>(offset);
2493            encoder.write_num(self.into_primitive(), offset);
2494            Ok(())
2495        }
2496    }
2497
2498    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Slant {
2499        #[inline(always)]
2500        fn new_empty() -> Self {
2501            Self::Upright
2502        }
2503
2504        #[inline]
2505        unsafe fn decode(
2506            &mut self,
2507            decoder: &mut fidl::encoding::Decoder<'_, D>,
2508            offset: usize,
2509            _depth: fidl::encoding::Depth,
2510        ) -> fidl::Result<()> {
2511            decoder.debug_check_bounds::<Self>(offset);
2512            let prim = decoder.read_num::<u32>(offset);
2513
2514            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2515            Ok(())
2516        }
2517    }
2518    unsafe impl fidl::encoding::TypeMarker for Width {
2519        type Owned = Self;
2520
2521        #[inline(always)]
2522        fn inline_align(_context: fidl::encoding::Context) -> usize {
2523            std::mem::align_of::<u32>()
2524        }
2525
2526        #[inline(always)]
2527        fn inline_size(_context: fidl::encoding::Context) -> usize {
2528            std::mem::size_of::<u32>()
2529        }
2530
2531        #[inline(always)]
2532        fn encode_is_copy() -> bool {
2533            true
2534        }
2535
2536        #[inline(always)]
2537        fn decode_is_copy() -> bool {
2538            false
2539        }
2540    }
2541
2542    impl fidl::encoding::ValueTypeMarker for Width {
2543        type Borrowed<'a> = Self;
2544        #[inline(always)]
2545        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2546            *value
2547        }
2548    }
2549
2550    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Width {
2551        #[inline]
2552        unsafe fn encode(
2553            self,
2554            encoder: &mut fidl::encoding::Encoder<'_, D>,
2555            offset: usize,
2556            _depth: fidl::encoding::Depth,
2557        ) -> fidl::Result<()> {
2558            encoder.debug_check_bounds::<Self>(offset);
2559            encoder.write_num(self.into_primitive(), offset);
2560            Ok(())
2561        }
2562    }
2563
2564    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Width {
2565        #[inline(always)]
2566        fn new_empty() -> Self {
2567            Self::UltraCondensed
2568        }
2569
2570        #[inline]
2571        unsafe fn decode(
2572            &mut self,
2573            decoder: &mut fidl::encoding::Decoder<'_, D>,
2574            offset: usize,
2575            _depth: fidl::encoding::Depth,
2576        ) -> fidl::Result<()> {
2577            decoder.debug_check_bounds::<Self>(offset);
2578            let prim = decoder.read_num::<u32>(offset);
2579
2580            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2581            Ok(())
2582        }
2583    }
2584
2585    impl fidl::encoding::ValueTypeMarker for FamilyInfo {
2586        type Borrowed<'a> = &'a Self;
2587        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2588            value
2589        }
2590    }
2591
2592    unsafe impl fidl::encoding::TypeMarker for FamilyInfo {
2593        type Owned = Self;
2594
2595        #[inline(always)]
2596        fn inline_align(_context: fidl::encoding::Context) -> usize {
2597            8
2598        }
2599
2600        #[inline(always)]
2601        fn inline_size(_context: fidl::encoding::Context) -> usize {
2602            32
2603        }
2604    }
2605
2606    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FamilyInfo, D>
2607        for &FamilyInfo
2608    {
2609        #[inline]
2610        unsafe fn encode(
2611            self,
2612            encoder: &mut fidl::encoding::Encoder<'_, D>,
2613            offset: usize,
2614            _depth: fidl::encoding::Depth,
2615        ) -> fidl::Result<()> {
2616            encoder.debug_check_bounds::<FamilyInfo>(offset);
2617            // Delegate to tuple encoding.
2618            fidl::encoding::Encode::<FamilyInfo, D>::encode(
2619                (
2620                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(
2621                        &self.name,
2622                    ),
2623                    <fidl::encoding::Vector<Style, 300> as fidl::encoding::ValueTypeMarker>::borrow(
2624                        &self.styles,
2625                    ),
2626                ),
2627                encoder,
2628                offset,
2629                _depth,
2630            )
2631        }
2632    }
2633    unsafe impl<
2634            D: fidl::encoding::ResourceDialect,
2635            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
2636            T1: fidl::encoding::Encode<fidl::encoding::Vector<Style, 300>, D>,
2637        > fidl::encoding::Encode<FamilyInfo, D> for (T0, T1)
2638    {
2639        #[inline]
2640        unsafe fn encode(
2641            self,
2642            encoder: &mut fidl::encoding::Encoder<'_, D>,
2643            offset: usize,
2644            depth: fidl::encoding::Depth,
2645        ) -> fidl::Result<()> {
2646            encoder.debug_check_bounds::<FamilyInfo>(offset);
2647            // Zero out padding regions. There's no need to apply masks
2648            // because the unmasked parts will be overwritten by fields.
2649            // Write the fields.
2650            self.0.encode(encoder, offset + 0, depth)?;
2651            self.1.encode(encoder, offset + 16, depth)?;
2652            Ok(())
2653        }
2654    }
2655
2656    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FamilyInfo {
2657        #[inline(always)]
2658        fn new_empty() -> Self {
2659            Self {
2660                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
2661                styles: fidl::new_empty!(fidl::encoding::Vector<Style, 300>, D),
2662            }
2663        }
2664
2665        #[inline]
2666        unsafe fn decode(
2667            &mut self,
2668            decoder: &mut fidl::encoding::Decoder<'_, D>,
2669            offset: usize,
2670            _depth: fidl::encoding::Depth,
2671        ) -> fidl::Result<()> {
2672            decoder.debug_check_bounds::<Self>(offset);
2673            // Verify that padding bytes are zero.
2674            fidl::decode!(
2675                fidl::encoding::BoundedString<128>,
2676                D,
2677                &mut self.name,
2678                decoder,
2679                offset + 0,
2680                _depth
2681            )?;
2682            fidl::decode!(fidl::encoding::Vector<Style, 300>, D, &mut self.styles, decoder, offset + 16, _depth)?;
2683            Ok(())
2684        }
2685    }
2686
2687    impl fidl::encoding::ValueTypeMarker for FamilyName {
2688        type Borrowed<'a> = &'a Self;
2689        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2690            value
2691        }
2692    }
2693
2694    unsafe impl fidl::encoding::TypeMarker for FamilyName {
2695        type Owned = Self;
2696
2697        #[inline(always)]
2698        fn inline_align(_context: fidl::encoding::Context) -> usize {
2699            8
2700        }
2701
2702        #[inline(always)]
2703        fn inline_size(_context: fidl::encoding::Context) -> usize {
2704            16
2705        }
2706    }
2707
2708    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FamilyName, D>
2709        for &FamilyName
2710    {
2711        #[inline]
2712        unsafe fn encode(
2713            self,
2714            encoder: &mut fidl::encoding::Encoder<'_, D>,
2715            offset: usize,
2716            _depth: fidl::encoding::Depth,
2717        ) -> fidl::Result<()> {
2718            encoder.debug_check_bounds::<FamilyName>(offset);
2719            // Delegate to tuple encoding.
2720            fidl::encoding::Encode::<FamilyName, D>::encode(
2721                (<fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(
2722                    &self.name,
2723                ),),
2724                encoder,
2725                offset,
2726                _depth,
2727            )
2728        }
2729    }
2730    unsafe impl<
2731            D: fidl::encoding::ResourceDialect,
2732            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
2733        > fidl::encoding::Encode<FamilyName, D> for (T0,)
2734    {
2735        #[inline]
2736        unsafe fn encode(
2737            self,
2738            encoder: &mut fidl::encoding::Encoder<'_, D>,
2739            offset: usize,
2740            depth: fidl::encoding::Depth,
2741        ) -> fidl::Result<()> {
2742            encoder.debug_check_bounds::<FamilyName>(offset);
2743            // Zero out padding regions. There's no need to apply masks
2744            // because the unmasked parts will be overwritten by fields.
2745            // Write the fields.
2746            self.0.encode(encoder, offset + 0, depth)?;
2747            Ok(())
2748        }
2749    }
2750
2751    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FamilyName {
2752        #[inline(always)]
2753        fn new_empty() -> Self {
2754            Self { name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D) }
2755        }
2756
2757        #[inline]
2758        unsafe fn decode(
2759            &mut self,
2760            decoder: &mut fidl::encoding::Decoder<'_, D>,
2761            offset: usize,
2762            _depth: fidl::encoding::Depth,
2763        ) -> fidl::Result<()> {
2764            decoder.debug_check_bounds::<Self>(offset);
2765            // Verify that padding bytes are zero.
2766            fidl::decode!(
2767                fidl::encoding::BoundedString<128>,
2768                D,
2769                &mut self.name,
2770                decoder,
2771                offset + 0,
2772                _depth
2773            )?;
2774            Ok(())
2775        }
2776    }
2777
2778    impl fidl::encoding::ValueTypeMarker for FontSetEventListenerOnFontSetUpdatedRequest {
2779        type Borrowed<'a> = &'a Self;
2780        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2781            value
2782        }
2783    }
2784
2785    unsafe impl fidl::encoding::TypeMarker for FontSetEventListenerOnFontSetUpdatedRequest {
2786        type Owned = Self;
2787
2788        #[inline(always)]
2789        fn inline_align(_context: fidl::encoding::Context) -> usize {
2790            8
2791        }
2792
2793        #[inline(always)]
2794        fn inline_size(_context: fidl::encoding::Context) -> usize {
2795            16
2796        }
2797    }
2798
2799    unsafe impl<D: fidl::encoding::ResourceDialect>
2800        fidl::encoding::Encode<FontSetEventListenerOnFontSetUpdatedRequest, D>
2801        for &FontSetEventListenerOnFontSetUpdatedRequest
2802    {
2803        #[inline]
2804        unsafe fn encode(
2805            self,
2806            encoder: &mut fidl::encoding::Encoder<'_, D>,
2807            offset: usize,
2808            _depth: fidl::encoding::Depth,
2809        ) -> fidl::Result<()> {
2810            encoder.debug_check_bounds::<FontSetEventListenerOnFontSetUpdatedRequest>(offset);
2811            // Delegate to tuple encoding.
2812            fidl::encoding::Encode::<FontSetEventListenerOnFontSetUpdatedRequest, D>::encode(
2813                (<FontSetUpdatedEvent as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
2814                encoder,
2815                offset,
2816                _depth,
2817            )
2818        }
2819    }
2820    unsafe impl<
2821            D: fidl::encoding::ResourceDialect,
2822            T0: fidl::encoding::Encode<FontSetUpdatedEvent, D>,
2823        > fidl::encoding::Encode<FontSetEventListenerOnFontSetUpdatedRequest, D> for (T0,)
2824    {
2825        #[inline]
2826        unsafe fn encode(
2827            self,
2828            encoder: &mut fidl::encoding::Encoder<'_, D>,
2829            offset: usize,
2830            depth: fidl::encoding::Depth,
2831        ) -> fidl::Result<()> {
2832            encoder.debug_check_bounds::<FontSetEventListenerOnFontSetUpdatedRequest>(offset);
2833            // Zero out padding regions. There's no need to apply masks
2834            // because the unmasked parts will be overwritten by fields.
2835            // Write the fields.
2836            self.0.encode(encoder, offset + 0, depth)?;
2837            Ok(())
2838        }
2839    }
2840
2841    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2842        for FontSetEventListenerOnFontSetUpdatedRequest
2843    {
2844        #[inline(always)]
2845        fn new_empty() -> Self {
2846            Self { event: fidl::new_empty!(FontSetUpdatedEvent, D) }
2847        }
2848
2849        #[inline]
2850        unsafe fn decode(
2851            &mut self,
2852            decoder: &mut fidl::encoding::Decoder<'_, D>,
2853            offset: usize,
2854            _depth: fidl::encoding::Depth,
2855        ) -> fidl::Result<()> {
2856            decoder.debug_check_bounds::<Self>(offset);
2857            // Verify that padding bytes are zero.
2858            fidl::decode!(FontSetUpdatedEvent, D, &mut self.event, decoder, offset + 0, _depth)?;
2859            Ok(())
2860        }
2861    }
2862
2863    impl fidl::encoding::ValueTypeMarker for ProviderGetFamilyInfoRequest {
2864        type Borrowed<'a> = &'a Self;
2865        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2866            value
2867        }
2868    }
2869
2870    unsafe impl fidl::encoding::TypeMarker for ProviderGetFamilyInfoRequest {
2871        type Owned = Self;
2872
2873        #[inline(always)]
2874        fn inline_align(_context: fidl::encoding::Context) -> usize {
2875            8
2876        }
2877
2878        #[inline(always)]
2879        fn inline_size(_context: fidl::encoding::Context) -> usize {
2880            16
2881        }
2882    }
2883
2884    unsafe impl<D: fidl::encoding::ResourceDialect>
2885        fidl::encoding::Encode<ProviderGetFamilyInfoRequest, D> for &ProviderGetFamilyInfoRequest
2886    {
2887        #[inline]
2888        unsafe fn encode(
2889            self,
2890            encoder: &mut fidl::encoding::Encoder<'_, D>,
2891            offset: usize,
2892            _depth: fidl::encoding::Depth,
2893        ) -> fidl::Result<()> {
2894            encoder.debug_check_bounds::<ProviderGetFamilyInfoRequest>(offset);
2895            // Delegate to tuple encoding.
2896            fidl::encoding::Encode::<ProviderGetFamilyInfoRequest, D>::encode(
2897                (<fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(
2898                    &self.family,
2899                ),),
2900                encoder,
2901                offset,
2902                _depth,
2903            )
2904        }
2905    }
2906    unsafe impl<
2907            D: fidl::encoding::ResourceDialect,
2908            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
2909        > fidl::encoding::Encode<ProviderGetFamilyInfoRequest, D> for (T0,)
2910    {
2911        #[inline]
2912        unsafe fn encode(
2913            self,
2914            encoder: &mut fidl::encoding::Encoder<'_, D>,
2915            offset: usize,
2916            depth: fidl::encoding::Depth,
2917        ) -> fidl::Result<()> {
2918            encoder.debug_check_bounds::<ProviderGetFamilyInfoRequest>(offset);
2919            // Zero out padding regions. There's no need to apply masks
2920            // because the unmasked parts will be overwritten by fields.
2921            // Write the fields.
2922            self.0.encode(encoder, offset + 0, depth)?;
2923            Ok(())
2924        }
2925    }
2926
2927    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2928        for ProviderGetFamilyInfoRequest
2929    {
2930        #[inline(always)]
2931        fn new_empty() -> Self {
2932            Self { family: fidl::new_empty!(fidl::encoding::BoundedString<128>, D) }
2933        }
2934
2935        #[inline]
2936        unsafe fn decode(
2937            &mut self,
2938            decoder: &mut fidl::encoding::Decoder<'_, D>,
2939            offset: usize,
2940            _depth: fidl::encoding::Depth,
2941        ) -> fidl::Result<()> {
2942            decoder.debug_check_bounds::<Self>(offset);
2943            // Verify that padding bytes are zero.
2944            fidl::decode!(
2945                fidl::encoding::BoundedString<128>,
2946                D,
2947                &mut self.family,
2948                decoder,
2949                offset + 0,
2950                _depth
2951            )?;
2952            Ok(())
2953        }
2954    }
2955
2956    impl fidl::encoding::ValueTypeMarker for ProviderGetFamilyInfoResponse {
2957        type Borrowed<'a> = &'a Self;
2958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2959            value
2960        }
2961    }
2962
2963    unsafe impl fidl::encoding::TypeMarker for ProviderGetFamilyInfoResponse {
2964        type Owned = Self;
2965
2966        #[inline(always)]
2967        fn inline_align(_context: fidl::encoding::Context) -> usize {
2968            8
2969        }
2970
2971        #[inline(always)]
2972        fn inline_size(_context: fidl::encoding::Context) -> usize {
2973            8
2974        }
2975    }
2976
2977    unsafe impl<D: fidl::encoding::ResourceDialect>
2978        fidl::encoding::Encode<ProviderGetFamilyInfoResponse, D>
2979        for &ProviderGetFamilyInfoResponse
2980    {
2981        #[inline]
2982        unsafe fn encode(
2983            self,
2984            encoder: &mut fidl::encoding::Encoder<'_, D>,
2985            offset: usize,
2986            _depth: fidl::encoding::Depth,
2987        ) -> fidl::Result<()> {
2988            encoder.debug_check_bounds::<ProviderGetFamilyInfoResponse>(offset);
2989            // Delegate to tuple encoding.
2990            fidl::encoding::Encode::<ProviderGetFamilyInfoResponse, D>::encode(
2991                (<fidl::encoding::Boxed<FamilyInfo> as fidl::encoding::ValueTypeMarker>::borrow(
2992                    &self.family_info,
2993                ),),
2994                encoder,
2995                offset,
2996                _depth,
2997            )
2998        }
2999    }
3000    unsafe impl<
3001            D: fidl::encoding::ResourceDialect,
3002            T0: fidl::encoding::Encode<fidl::encoding::Boxed<FamilyInfo>, D>,
3003        > fidl::encoding::Encode<ProviderGetFamilyInfoResponse, D> for (T0,)
3004    {
3005        #[inline]
3006        unsafe fn encode(
3007            self,
3008            encoder: &mut fidl::encoding::Encoder<'_, D>,
3009            offset: usize,
3010            depth: fidl::encoding::Depth,
3011        ) -> fidl::Result<()> {
3012            encoder.debug_check_bounds::<ProviderGetFamilyInfoResponse>(offset);
3013            // Zero out padding regions. There's no need to apply masks
3014            // because the unmasked parts will be overwritten by fields.
3015            // Write the fields.
3016            self.0.encode(encoder, offset + 0, depth)?;
3017            Ok(())
3018        }
3019    }
3020
3021    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3022        for ProviderGetFamilyInfoResponse
3023    {
3024        #[inline(always)]
3025        fn new_empty() -> Self {
3026            Self { family_info: fidl::new_empty!(fidl::encoding::Boxed<FamilyInfo>, D) }
3027        }
3028
3029        #[inline]
3030        unsafe fn decode(
3031            &mut self,
3032            decoder: &mut fidl::encoding::Decoder<'_, D>,
3033            offset: usize,
3034            _depth: fidl::encoding::Depth,
3035        ) -> fidl::Result<()> {
3036            decoder.debug_check_bounds::<Self>(offset);
3037            // Verify that padding bytes are zero.
3038            fidl::decode!(
3039                fidl::encoding::Boxed<FamilyInfo>,
3040                D,
3041                &mut self.family_info,
3042                decoder,
3043                offset + 0,
3044                _depth
3045            )?;
3046            Ok(())
3047        }
3048    }
3049
3050    impl fidl::encoding::ValueTypeMarker for ProviderGetFontFamilyInfoRequest {
3051        type Borrowed<'a> = &'a Self;
3052        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3053            value
3054        }
3055    }
3056
3057    unsafe impl fidl::encoding::TypeMarker for ProviderGetFontFamilyInfoRequest {
3058        type Owned = Self;
3059
3060        #[inline(always)]
3061        fn inline_align(_context: fidl::encoding::Context) -> usize {
3062            8
3063        }
3064
3065        #[inline(always)]
3066        fn inline_size(_context: fidl::encoding::Context) -> usize {
3067            16
3068        }
3069    }
3070
3071    unsafe impl<D: fidl::encoding::ResourceDialect>
3072        fidl::encoding::Encode<ProviderGetFontFamilyInfoRequest, D>
3073        for &ProviderGetFontFamilyInfoRequest
3074    {
3075        #[inline]
3076        unsafe fn encode(
3077            self,
3078            encoder: &mut fidl::encoding::Encoder<'_, D>,
3079            offset: usize,
3080            _depth: fidl::encoding::Depth,
3081        ) -> fidl::Result<()> {
3082            encoder.debug_check_bounds::<ProviderGetFontFamilyInfoRequest>(offset);
3083            // Delegate to tuple encoding.
3084            fidl::encoding::Encode::<ProviderGetFontFamilyInfoRequest, D>::encode(
3085                (<FamilyName as fidl::encoding::ValueTypeMarker>::borrow(&self.family),),
3086                encoder,
3087                offset,
3088                _depth,
3089            )
3090        }
3091    }
3092    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<FamilyName, D>>
3093        fidl::encoding::Encode<ProviderGetFontFamilyInfoRequest, D> for (T0,)
3094    {
3095        #[inline]
3096        unsafe fn encode(
3097            self,
3098            encoder: &mut fidl::encoding::Encoder<'_, D>,
3099            offset: usize,
3100            depth: fidl::encoding::Depth,
3101        ) -> fidl::Result<()> {
3102            encoder.debug_check_bounds::<ProviderGetFontFamilyInfoRequest>(offset);
3103            // Zero out padding regions. There's no need to apply masks
3104            // because the unmasked parts will be overwritten by fields.
3105            // Write the fields.
3106            self.0.encode(encoder, offset + 0, depth)?;
3107            Ok(())
3108        }
3109    }
3110
3111    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3112        for ProviderGetFontFamilyInfoRequest
3113    {
3114        #[inline(always)]
3115        fn new_empty() -> Self {
3116            Self { family: fidl::new_empty!(FamilyName, D) }
3117        }
3118
3119        #[inline]
3120        unsafe fn decode(
3121            &mut self,
3122            decoder: &mut fidl::encoding::Decoder<'_, D>,
3123            offset: usize,
3124            _depth: fidl::encoding::Depth,
3125        ) -> fidl::Result<()> {
3126            decoder.debug_check_bounds::<Self>(offset);
3127            // Verify that padding bytes are zero.
3128            fidl::decode!(FamilyName, D, &mut self.family, decoder, offset + 0, _depth)?;
3129            Ok(())
3130        }
3131    }
3132
3133    impl fidl::encoding::ValueTypeMarker for ProviderGetFontFamilyInfoResponse {
3134        type Borrowed<'a> = &'a Self;
3135        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3136            value
3137        }
3138    }
3139
3140    unsafe impl fidl::encoding::TypeMarker for ProviderGetFontFamilyInfoResponse {
3141        type Owned = Self;
3142
3143        #[inline(always)]
3144        fn inline_align(_context: fidl::encoding::Context) -> usize {
3145            8
3146        }
3147
3148        #[inline(always)]
3149        fn inline_size(_context: fidl::encoding::Context) -> usize {
3150            16
3151        }
3152    }
3153
3154    unsafe impl<D: fidl::encoding::ResourceDialect>
3155        fidl::encoding::Encode<ProviderGetFontFamilyInfoResponse, D>
3156        for &ProviderGetFontFamilyInfoResponse
3157    {
3158        #[inline]
3159        unsafe fn encode(
3160            self,
3161            encoder: &mut fidl::encoding::Encoder<'_, D>,
3162            offset: usize,
3163            _depth: fidl::encoding::Depth,
3164        ) -> fidl::Result<()> {
3165            encoder.debug_check_bounds::<ProviderGetFontFamilyInfoResponse>(offset);
3166            // Delegate to tuple encoding.
3167            fidl::encoding::Encode::<ProviderGetFontFamilyInfoResponse, D>::encode(
3168                (<FontFamilyInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.family_info),),
3169                encoder,
3170                offset,
3171                _depth,
3172            )
3173        }
3174    }
3175    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<FontFamilyInfo, D>>
3176        fidl::encoding::Encode<ProviderGetFontFamilyInfoResponse, D> for (T0,)
3177    {
3178        #[inline]
3179        unsafe fn encode(
3180            self,
3181            encoder: &mut fidl::encoding::Encoder<'_, D>,
3182            offset: usize,
3183            depth: fidl::encoding::Depth,
3184        ) -> fidl::Result<()> {
3185            encoder.debug_check_bounds::<ProviderGetFontFamilyInfoResponse>(offset);
3186            // Zero out padding regions. There's no need to apply masks
3187            // because the unmasked parts will be overwritten by fields.
3188            // Write the fields.
3189            self.0.encode(encoder, offset + 0, depth)?;
3190            Ok(())
3191        }
3192    }
3193
3194    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3195        for ProviderGetFontFamilyInfoResponse
3196    {
3197        #[inline(always)]
3198        fn new_empty() -> Self {
3199            Self { family_info: fidl::new_empty!(FontFamilyInfo, D) }
3200        }
3201
3202        #[inline]
3203        unsafe fn decode(
3204            &mut self,
3205            decoder: &mut fidl::encoding::Decoder<'_, D>,
3206            offset: usize,
3207            _depth: fidl::encoding::Depth,
3208        ) -> fidl::Result<()> {
3209            decoder.debug_check_bounds::<Self>(offset);
3210            // Verify that padding bytes are zero.
3211            fidl::decode!(FontFamilyInfo, D, &mut self.family_info, decoder, offset + 0, _depth)?;
3212            Ok(())
3213        }
3214    }
3215
3216    impl fidl::encoding::ValueTypeMarker for ProviderGetFontRequest {
3217        type Borrowed<'a> = &'a Self;
3218        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3219            value
3220        }
3221    }
3222
3223    unsafe impl fidl::encoding::TypeMarker for ProviderGetFontRequest {
3224        type Owned = Self;
3225
3226        #[inline(always)]
3227        fn inline_align(_context: fidl::encoding::Context) -> usize {
3228            8
3229        }
3230
3231        #[inline(always)]
3232        fn inline_size(_context: fidl::encoding::Context) -> usize {
3233            64
3234        }
3235    }
3236
3237    unsafe impl<D: fidl::encoding::ResourceDialect>
3238        fidl::encoding::Encode<ProviderGetFontRequest, D> for &ProviderGetFontRequest
3239    {
3240        #[inline]
3241        unsafe fn encode(
3242            self,
3243            encoder: &mut fidl::encoding::Encoder<'_, D>,
3244            offset: usize,
3245            _depth: fidl::encoding::Depth,
3246        ) -> fidl::Result<()> {
3247            encoder.debug_check_bounds::<ProviderGetFontRequest>(offset);
3248            // Delegate to tuple encoding.
3249            fidl::encoding::Encode::<ProviderGetFontRequest, D>::encode(
3250                (<Request as fidl::encoding::ValueTypeMarker>::borrow(&self.request),),
3251                encoder,
3252                offset,
3253                _depth,
3254            )
3255        }
3256    }
3257    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Request, D>>
3258        fidl::encoding::Encode<ProviderGetFontRequest, D> for (T0,)
3259    {
3260        #[inline]
3261        unsafe fn encode(
3262            self,
3263            encoder: &mut fidl::encoding::Encoder<'_, D>,
3264            offset: usize,
3265            depth: fidl::encoding::Depth,
3266        ) -> fidl::Result<()> {
3267            encoder.debug_check_bounds::<ProviderGetFontRequest>(offset);
3268            // Zero out padding regions. There's no need to apply masks
3269            // because the unmasked parts will be overwritten by fields.
3270            // Write the fields.
3271            self.0.encode(encoder, offset + 0, depth)?;
3272            Ok(())
3273        }
3274    }
3275
3276    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3277        for ProviderGetFontRequest
3278    {
3279        #[inline(always)]
3280        fn new_empty() -> Self {
3281            Self { request: fidl::new_empty!(Request, D) }
3282        }
3283
3284        #[inline]
3285        unsafe fn decode(
3286            &mut self,
3287            decoder: &mut fidl::encoding::Decoder<'_, D>,
3288            offset: usize,
3289            _depth: fidl::encoding::Depth,
3290        ) -> fidl::Result<()> {
3291            decoder.debug_check_bounds::<Self>(offset);
3292            // Verify that padding bytes are zero.
3293            fidl::decode!(Request, D, &mut self.request, decoder, offset + 0, _depth)?;
3294            Ok(())
3295        }
3296    }
3297
3298    impl fidl::encoding::ResourceTypeMarker for ProviderGetFontResponse {
3299        type Borrowed<'a> = &'a mut Self;
3300        fn take_or_borrow<'a>(
3301            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3302        ) -> Self::Borrowed<'a> {
3303            value
3304        }
3305    }
3306
3307    unsafe impl fidl::encoding::TypeMarker for ProviderGetFontResponse {
3308        type Owned = Self;
3309
3310        #[inline(always)]
3311        fn inline_align(_context: fidl::encoding::Context) -> usize {
3312            8
3313        }
3314
3315        #[inline(always)]
3316        fn inline_size(_context: fidl::encoding::Context) -> usize {
3317            8
3318        }
3319    }
3320
3321    unsafe impl
3322        fidl::encoding::Encode<
3323            ProviderGetFontResponse,
3324            fidl::encoding::DefaultFuchsiaResourceDialect,
3325        > for &mut ProviderGetFontResponse
3326    {
3327        #[inline]
3328        unsafe fn encode(
3329            self,
3330            encoder: &mut fidl::encoding::Encoder<
3331                '_,
3332                fidl::encoding::DefaultFuchsiaResourceDialect,
3333            >,
3334            offset: usize,
3335            _depth: fidl::encoding::Depth,
3336        ) -> fidl::Result<()> {
3337            encoder.debug_check_bounds::<ProviderGetFontResponse>(offset);
3338            // Delegate to tuple encoding.
3339            fidl::encoding::Encode::<ProviderGetFontResponse, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3340                (
3341                    <fidl::encoding::Boxed<Response> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.response),
3342                ),
3343                encoder, offset, _depth
3344            )
3345        }
3346    }
3347    unsafe impl<
3348            T0: fidl::encoding::Encode<
3349                fidl::encoding::Boxed<Response>,
3350                fidl::encoding::DefaultFuchsiaResourceDialect,
3351            >,
3352        >
3353        fidl::encoding::Encode<
3354            ProviderGetFontResponse,
3355            fidl::encoding::DefaultFuchsiaResourceDialect,
3356        > for (T0,)
3357    {
3358        #[inline]
3359        unsafe fn encode(
3360            self,
3361            encoder: &mut fidl::encoding::Encoder<
3362                '_,
3363                fidl::encoding::DefaultFuchsiaResourceDialect,
3364            >,
3365            offset: usize,
3366            depth: fidl::encoding::Depth,
3367        ) -> fidl::Result<()> {
3368            encoder.debug_check_bounds::<ProviderGetFontResponse>(offset);
3369            // Zero out padding regions. There's no need to apply masks
3370            // because the unmasked parts will be overwritten by fields.
3371            // Write the fields.
3372            self.0.encode(encoder, offset + 0, depth)?;
3373            Ok(())
3374        }
3375    }
3376
3377    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3378        for ProviderGetFontResponse
3379    {
3380        #[inline(always)]
3381        fn new_empty() -> Self {
3382            Self {
3383                response: fidl::new_empty!(
3384                    fidl::encoding::Boxed<Response>,
3385                    fidl::encoding::DefaultFuchsiaResourceDialect
3386                ),
3387            }
3388        }
3389
3390        #[inline]
3391        unsafe fn decode(
3392            &mut self,
3393            decoder: &mut fidl::encoding::Decoder<
3394                '_,
3395                fidl::encoding::DefaultFuchsiaResourceDialect,
3396            >,
3397            offset: usize,
3398            _depth: fidl::encoding::Depth,
3399        ) -> fidl::Result<()> {
3400            decoder.debug_check_bounds::<Self>(offset);
3401            // Verify that padding bytes are zero.
3402            fidl::decode!(
3403                fidl::encoding::Boxed<Response>,
3404                fidl::encoding::DefaultFuchsiaResourceDialect,
3405                &mut self.response,
3406                decoder,
3407                offset + 0,
3408                _depth
3409            )?;
3410            Ok(())
3411        }
3412    }
3413
3414    impl fidl::encoding::ValueTypeMarker for ProviderGetTypefaceRequest {
3415        type Borrowed<'a> = &'a Self;
3416        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3417            value
3418        }
3419    }
3420
3421    unsafe impl fidl::encoding::TypeMarker for ProviderGetTypefaceRequest {
3422        type Owned = Self;
3423
3424        #[inline(always)]
3425        fn inline_align(_context: fidl::encoding::Context) -> usize {
3426            8
3427        }
3428
3429        #[inline(always)]
3430        fn inline_size(_context: fidl::encoding::Context) -> usize {
3431            16
3432        }
3433    }
3434
3435    unsafe impl<D: fidl::encoding::ResourceDialect>
3436        fidl::encoding::Encode<ProviderGetTypefaceRequest, D> for &ProviderGetTypefaceRequest
3437    {
3438        #[inline]
3439        unsafe fn encode(
3440            self,
3441            encoder: &mut fidl::encoding::Encoder<'_, D>,
3442            offset: usize,
3443            _depth: fidl::encoding::Depth,
3444        ) -> fidl::Result<()> {
3445            encoder.debug_check_bounds::<ProviderGetTypefaceRequest>(offset);
3446            // Delegate to tuple encoding.
3447            fidl::encoding::Encode::<ProviderGetTypefaceRequest, D>::encode(
3448                (<TypefaceRequest as fidl::encoding::ValueTypeMarker>::borrow(&self.request),),
3449                encoder,
3450                offset,
3451                _depth,
3452            )
3453        }
3454    }
3455    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<TypefaceRequest, D>>
3456        fidl::encoding::Encode<ProviderGetTypefaceRequest, D> for (T0,)
3457    {
3458        #[inline]
3459        unsafe fn encode(
3460            self,
3461            encoder: &mut fidl::encoding::Encoder<'_, D>,
3462            offset: usize,
3463            depth: fidl::encoding::Depth,
3464        ) -> fidl::Result<()> {
3465            encoder.debug_check_bounds::<ProviderGetTypefaceRequest>(offset);
3466            // Zero out padding regions. There's no need to apply masks
3467            // because the unmasked parts will be overwritten by fields.
3468            // Write the fields.
3469            self.0.encode(encoder, offset + 0, depth)?;
3470            Ok(())
3471        }
3472    }
3473
3474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3475        for ProviderGetTypefaceRequest
3476    {
3477        #[inline(always)]
3478        fn new_empty() -> Self {
3479            Self { request: fidl::new_empty!(TypefaceRequest, D) }
3480        }
3481
3482        #[inline]
3483        unsafe fn decode(
3484            &mut self,
3485            decoder: &mut fidl::encoding::Decoder<'_, D>,
3486            offset: usize,
3487            _depth: fidl::encoding::Depth,
3488        ) -> fidl::Result<()> {
3489            decoder.debug_check_bounds::<Self>(offset);
3490            // Verify that padding bytes are zero.
3491            fidl::decode!(TypefaceRequest, D, &mut self.request, decoder, offset + 0, _depth)?;
3492            Ok(())
3493        }
3494    }
3495
3496    impl fidl::encoding::ResourceTypeMarker for ProviderGetTypefaceResponse {
3497        type Borrowed<'a> = &'a mut Self;
3498        fn take_or_borrow<'a>(
3499            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3500        ) -> Self::Borrowed<'a> {
3501            value
3502        }
3503    }
3504
3505    unsafe impl fidl::encoding::TypeMarker for ProviderGetTypefaceResponse {
3506        type Owned = Self;
3507
3508        #[inline(always)]
3509        fn inline_align(_context: fidl::encoding::Context) -> usize {
3510            8
3511        }
3512
3513        #[inline(always)]
3514        fn inline_size(_context: fidl::encoding::Context) -> usize {
3515            16
3516        }
3517    }
3518
3519    unsafe impl
3520        fidl::encoding::Encode<
3521            ProviderGetTypefaceResponse,
3522            fidl::encoding::DefaultFuchsiaResourceDialect,
3523        > for &mut ProviderGetTypefaceResponse
3524    {
3525        #[inline]
3526        unsafe fn encode(
3527            self,
3528            encoder: &mut fidl::encoding::Encoder<
3529                '_,
3530                fidl::encoding::DefaultFuchsiaResourceDialect,
3531            >,
3532            offset: usize,
3533            _depth: fidl::encoding::Depth,
3534        ) -> fidl::Result<()> {
3535            encoder.debug_check_bounds::<ProviderGetTypefaceResponse>(offset);
3536            // Delegate to tuple encoding.
3537            fidl::encoding::Encode::<
3538                ProviderGetTypefaceResponse,
3539                fidl::encoding::DefaultFuchsiaResourceDialect,
3540            >::encode(
3541                (<TypefaceResponse as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3542                    &mut self.response,
3543                ),),
3544                encoder,
3545                offset,
3546                _depth,
3547            )
3548        }
3549    }
3550    unsafe impl<
3551            T0: fidl::encoding::Encode<TypefaceResponse, fidl::encoding::DefaultFuchsiaResourceDialect>,
3552        >
3553        fidl::encoding::Encode<
3554            ProviderGetTypefaceResponse,
3555            fidl::encoding::DefaultFuchsiaResourceDialect,
3556        > for (T0,)
3557    {
3558        #[inline]
3559        unsafe fn encode(
3560            self,
3561            encoder: &mut fidl::encoding::Encoder<
3562                '_,
3563                fidl::encoding::DefaultFuchsiaResourceDialect,
3564            >,
3565            offset: usize,
3566            depth: fidl::encoding::Depth,
3567        ) -> fidl::Result<()> {
3568            encoder.debug_check_bounds::<ProviderGetTypefaceResponse>(offset);
3569            // Zero out padding regions. There's no need to apply masks
3570            // because the unmasked parts will be overwritten by fields.
3571            // Write the fields.
3572            self.0.encode(encoder, offset + 0, depth)?;
3573            Ok(())
3574        }
3575    }
3576
3577    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3578        for ProviderGetTypefaceResponse
3579    {
3580        #[inline(always)]
3581        fn new_empty() -> Self {
3582            Self {
3583                response: fidl::new_empty!(
3584                    TypefaceResponse,
3585                    fidl::encoding::DefaultFuchsiaResourceDialect
3586                ),
3587            }
3588        }
3589
3590        #[inline]
3591        unsafe fn decode(
3592            &mut self,
3593            decoder: &mut fidl::encoding::Decoder<
3594                '_,
3595                fidl::encoding::DefaultFuchsiaResourceDialect,
3596            >,
3597            offset: usize,
3598            _depth: fidl::encoding::Depth,
3599        ) -> fidl::Result<()> {
3600            decoder.debug_check_bounds::<Self>(offset);
3601            // Verify that padding bytes are zero.
3602            fidl::decode!(
3603                TypefaceResponse,
3604                fidl::encoding::DefaultFuchsiaResourceDialect,
3605                &mut self.response,
3606                decoder,
3607                offset + 0,
3608                _depth
3609            )?;
3610            Ok(())
3611        }
3612    }
3613
3614    impl fidl::encoding::ResourceTypeMarker for ProviderRegisterFontSetEventListenerRequest {
3615        type Borrowed<'a> = &'a mut Self;
3616        fn take_or_borrow<'a>(
3617            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3618        ) -> Self::Borrowed<'a> {
3619            value
3620        }
3621    }
3622
3623    unsafe impl fidl::encoding::TypeMarker for ProviderRegisterFontSetEventListenerRequest {
3624        type Owned = Self;
3625
3626        #[inline(always)]
3627        fn inline_align(_context: fidl::encoding::Context) -> usize {
3628            4
3629        }
3630
3631        #[inline(always)]
3632        fn inline_size(_context: fidl::encoding::Context) -> usize {
3633            4
3634        }
3635    }
3636
3637    unsafe impl
3638        fidl::encoding::Encode<
3639            ProviderRegisterFontSetEventListenerRequest,
3640            fidl::encoding::DefaultFuchsiaResourceDialect,
3641        > for &mut ProviderRegisterFontSetEventListenerRequest
3642    {
3643        #[inline]
3644        unsafe fn encode(
3645            self,
3646            encoder: &mut fidl::encoding::Encoder<
3647                '_,
3648                fidl::encoding::DefaultFuchsiaResourceDialect,
3649            >,
3650            offset: usize,
3651            _depth: fidl::encoding::Depth,
3652        ) -> fidl::Result<()> {
3653            encoder.debug_check_bounds::<ProviderRegisterFontSetEventListenerRequest>(offset);
3654            // Delegate to tuple encoding.
3655            fidl::encoding::Encode::<
3656                ProviderRegisterFontSetEventListenerRequest,
3657                fidl::encoding::DefaultFuchsiaResourceDialect,
3658            >::encode(
3659                (
3660                    <fidl::encoding::Endpoint<
3661                        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
3662                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3663                        &mut self.listener
3664                    ),
3665                ),
3666                encoder,
3667                offset,
3668                _depth,
3669            )
3670        }
3671    }
3672    unsafe impl<
3673            T0: fidl::encoding::Encode<
3674                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<FontSetEventListenerMarker>>,
3675                fidl::encoding::DefaultFuchsiaResourceDialect,
3676            >,
3677        >
3678        fidl::encoding::Encode<
3679            ProviderRegisterFontSetEventListenerRequest,
3680            fidl::encoding::DefaultFuchsiaResourceDialect,
3681        > for (T0,)
3682    {
3683        #[inline]
3684        unsafe fn encode(
3685            self,
3686            encoder: &mut fidl::encoding::Encoder<
3687                '_,
3688                fidl::encoding::DefaultFuchsiaResourceDialect,
3689            >,
3690            offset: usize,
3691            depth: fidl::encoding::Depth,
3692        ) -> fidl::Result<()> {
3693            encoder.debug_check_bounds::<ProviderRegisterFontSetEventListenerRequest>(offset);
3694            // Zero out padding regions. There's no need to apply masks
3695            // because the unmasked parts will be overwritten by fields.
3696            // Write the fields.
3697            self.0.encode(encoder, offset + 0, depth)?;
3698            Ok(())
3699        }
3700    }
3701
3702    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3703        for ProviderRegisterFontSetEventListenerRequest
3704    {
3705        #[inline(always)]
3706        fn new_empty() -> Self {
3707            Self {
3708                listener: fidl::new_empty!(
3709                    fidl::encoding::Endpoint<
3710                        fidl::endpoints::ClientEnd<FontSetEventListenerMarker>,
3711                    >,
3712                    fidl::encoding::DefaultFuchsiaResourceDialect
3713                ),
3714            }
3715        }
3716
3717        #[inline]
3718        unsafe fn decode(
3719            &mut self,
3720            decoder: &mut fidl::encoding::Decoder<
3721                '_,
3722                fidl::encoding::DefaultFuchsiaResourceDialect,
3723            >,
3724            offset: usize,
3725            _depth: fidl::encoding::Depth,
3726        ) -> fidl::Result<()> {
3727            decoder.debug_check_bounds::<Self>(offset);
3728            // Verify that padding bytes are zero.
3729            fidl::decode!(
3730                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<FontSetEventListenerMarker>>,
3731                fidl::encoding::DefaultFuchsiaResourceDialect,
3732                &mut self.listener,
3733                decoder,
3734                offset + 0,
3735                _depth
3736            )?;
3737            Ok(())
3738        }
3739    }
3740
3741    impl fidl::encoding::ValueTypeMarker for Request {
3742        type Borrowed<'a> = &'a Self;
3743        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3744            value
3745        }
3746    }
3747
3748    unsafe impl fidl::encoding::TypeMarker for Request {
3749        type Owned = Self;
3750
3751        #[inline(always)]
3752        fn inline_align(_context: fidl::encoding::Context) -> usize {
3753            8
3754        }
3755
3756        #[inline(always)]
3757        fn inline_size(_context: fidl::encoding::Context) -> usize {
3758            64
3759        }
3760    }
3761
3762    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Request, D> for &Request {
3763        #[inline]
3764        unsafe fn encode(
3765            self,
3766            encoder: &mut fidl::encoding::Encoder<'_, D>,
3767            offset: usize,
3768            _depth: fidl::encoding::Depth,
3769        ) -> fidl::Result<()> {
3770            encoder.debug_check_bounds::<Request>(offset);
3771            // Delegate to tuple encoding.
3772            fidl::encoding::Encode::<Request, D>::encode(
3773                (
3774                    <fidl::encoding::Optional<fidl::encoding::BoundedString<128>> as fidl::encoding::ValueTypeMarker>::borrow(&self.family),
3775                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.weight),
3776                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.width),
3777                    <Slant as fidl::encoding::ValueTypeMarker>::borrow(&self.slant),
3778                    <fidl::encoding::Optional<fidl::encoding::Vector<fidl::encoding::BoundedString<35>, 8>> as fidl::encoding::ValueTypeMarker>::borrow(&self.language),
3779                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.character),
3780                    <FallbackGroup as fidl::encoding::ValueTypeMarker>::borrow(&self.fallback_group),
3781                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.flags),
3782                ),
3783                encoder, offset, _depth
3784            )
3785        }
3786    }
3787    unsafe impl<
3788            D: fidl::encoding::ResourceDialect,
3789            T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<128>>, D>,
3790            T1: fidl::encoding::Encode<u32, D>,
3791            T2: fidl::encoding::Encode<u32, D>,
3792            T3: fidl::encoding::Encode<Slant, D>,
3793            T4: fidl::encoding::Encode<
3794                fidl::encoding::Optional<
3795                    fidl::encoding::Vector<fidl::encoding::BoundedString<35>, 8>,
3796                >,
3797                D,
3798            >,
3799            T5: fidl::encoding::Encode<u32, D>,
3800            T6: fidl::encoding::Encode<FallbackGroup, D>,
3801            T7: fidl::encoding::Encode<u32, D>,
3802        > fidl::encoding::Encode<Request, D> for (T0, T1, T2, T3, T4, T5, T6, T7)
3803    {
3804        #[inline]
3805        unsafe fn encode(
3806            self,
3807            encoder: &mut fidl::encoding::Encoder<'_, D>,
3808            offset: usize,
3809            depth: fidl::encoding::Depth,
3810        ) -> fidl::Result<()> {
3811            encoder.debug_check_bounds::<Request>(offset);
3812            // Zero out padding regions. There's no need to apply masks
3813            // because the unmasked parts will be overwritten by fields.
3814            unsafe {
3815                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(24);
3816                (ptr as *mut u64).write_unaligned(0);
3817            }
3818            unsafe {
3819                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(56);
3820                (ptr as *mut u64).write_unaligned(0);
3821            }
3822            // Write the fields.
3823            self.0.encode(encoder, offset + 0, depth)?;
3824            self.1.encode(encoder, offset + 16, depth)?;
3825            self.2.encode(encoder, offset + 20, depth)?;
3826            self.3.encode(encoder, offset + 24, depth)?;
3827            self.4.encode(encoder, offset + 32, depth)?;
3828            self.5.encode(encoder, offset + 48, depth)?;
3829            self.6.encode(encoder, offset + 52, depth)?;
3830            self.7.encode(encoder, offset + 56, depth)?;
3831            Ok(())
3832        }
3833    }
3834
3835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Request {
3836        #[inline(always)]
3837        fn new_empty() -> Self {
3838            Self {
3839                family: fidl::new_empty!(
3840                    fidl::encoding::Optional<fidl::encoding::BoundedString<128>>,
3841                    D
3842                ),
3843                weight: fidl::new_empty!(u32, D),
3844                width: fidl::new_empty!(u32, D),
3845                slant: fidl::new_empty!(Slant, D),
3846                language: fidl::new_empty!(
3847                    fidl::encoding::Optional<
3848                        fidl::encoding::Vector<fidl::encoding::BoundedString<35>, 8>,
3849                    >,
3850                    D
3851                ),
3852                character: fidl::new_empty!(u32, D),
3853                fallback_group: fidl::new_empty!(FallbackGroup, D),
3854                flags: fidl::new_empty!(u32, D),
3855            }
3856        }
3857
3858        #[inline]
3859        unsafe fn decode(
3860            &mut self,
3861            decoder: &mut fidl::encoding::Decoder<'_, D>,
3862            offset: usize,
3863            _depth: fidl::encoding::Depth,
3864        ) -> fidl::Result<()> {
3865            decoder.debug_check_bounds::<Self>(offset);
3866            // Verify that padding bytes are zero.
3867            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(24) };
3868            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3869            let mask = 0xffffffff00000000u64;
3870            let maskedval = padval & mask;
3871            if maskedval != 0 {
3872                return Err(fidl::Error::NonZeroPadding {
3873                    padding_start: offset + 24 + ((mask as u64).trailing_zeros() / 8) as usize,
3874                });
3875            }
3876            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(56) };
3877            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3878            let mask = 0xffffffff00000000u64;
3879            let maskedval = padval & mask;
3880            if maskedval != 0 {
3881                return Err(fidl::Error::NonZeroPadding {
3882                    padding_start: offset + 56 + ((mask as u64).trailing_zeros() / 8) as usize,
3883                });
3884            }
3885            fidl::decode!(
3886                fidl::encoding::Optional<fidl::encoding::BoundedString<128>>,
3887                D,
3888                &mut self.family,
3889                decoder,
3890                offset + 0,
3891                _depth
3892            )?;
3893            fidl::decode!(u32, D, &mut self.weight, decoder, offset + 16, _depth)?;
3894            fidl::decode!(u32, D, &mut self.width, decoder, offset + 20, _depth)?;
3895            fidl::decode!(Slant, D, &mut self.slant, decoder, offset + 24, _depth)?;
3896            fidl::decode!(
3897                fidl::encoding::Optional<
3898                    fidl::encoding::Vector<fidl::encoding::BoundedString<35>, 8>,
3899                >,
3900                D,
3901                &mut self.language,
3902                decoder,
3903                offset + 32,
3904                _depth
3905            )?;
3906            fidl::decode!(u32, D, &mut self.character, decoder, offset + 48, _depth)?;
3907            fidl::decode!(
3908                FallbackGroup,
3909                D,
3910                &mut self.fallback_group,
3911                decoder,
3912                offset + 52,
3913                _depth
3914            )?;
3915            fidl::decode!(u32, D, &mut self.flags, decoder, offset + 56, _depth)?;
3916            Ok(())
3917        }
3918    }
3919
3920    impl fidl::encoding::ResourceTypeMarker for Response {
3921        type Borrowed<'a> = &'a mut Self;
3922        fn take_or_borrow<'a>(
3923            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3924        ) -> Self::Borrowed<'a> {
3925            value
3926        }
3927    }
3928
3929    unsafe impl fidl::encoding::TypeMarker for Response {
3930        type Owned = Self;
3931
3932        #[inline(always)]
3933        fn inline_align(_context: fidl::encoding::Context) -> usize {
3934            8
3935        }
3936
3937        #[inline(always)]
3938        fn inline_size(_context: fidl::encoding::Context) -> usize {
3939            24
3940        }
3941    }
3942
3943    unsafe impl fidl::encoding::Encode<Response, fidl::encoding::DefaultFuchsiaResourceDialect>
3944        for &mut Response
3945    {
3946        #[inline]
3947        unsafe fn encode(
3948            self,
3949            encoder: &mut fidl::encoding::Encoder<
3950                '_,
3951                fidl::encoding::DefaultFuchsiaResourceDialect,
3952            >,
3953            offset: usize,
3954            _depth: fidl::encoding::Depth,
3955        ) -> fidl::Result<()> {
3956            encoder.debug_check_bounds::<Response>(offset);
3957            // Delegate to tuple encoding.
3958            fidl::encoding::Encode::<Response, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3959                (
3960                    <fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.buffer),
3961                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.buffer_id),
3962                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.font_index),
3963                ),
3964                encoder, offset, _depth
3965            )
3966        }
3967    }
3968    unsafe impl<
3969            T0: fidl::encoding::Encode<
3970                fidl_fuchsia_mem::Buffer,
3971                fidl::encoding::DefaultFuchsiaResourceDialect,
3972            >,
3973            T1: fidl::encoding::Encode<u32, fidl::encoding::DefaultFuchsiaResourceDialect>,
3974            T2: fidl::encoding::Encode<u32, fidl::encoding::DefaultFuchsiaResourceDialect>,
3975        > fidl::encoding::Encode<Response, fidl::encoding::DefaultFuchsiaResourceDialect>
3976        for (T0, T1, T2)
3977    {
3978        #[inline]
3979        unsafe fn encode(
3980            self,
3981            encoder: &mut fidl::encoding::Encoder<
3982                '_,
3983                fidl::encoding::DefaultFuchsiaResourceDialect,
3984            >,
3985            offset: usize,
3986            depth: fidl::encoding::Depth,
3987        ) -> fidl::Result<()> {
3988            encoder.debug_check_bounds::<Response>(offset);
3989            // Zero out padding regions. There's no need to apply masks
3990            // because the unmasked parts will be overwritten by fields.
3991            // Write the fields.
3992            self.0.encode(encoder, offset + 0, depth)?;
3993            self.1.encode(encoder, offset + 16, depth)?;
3994            self.2.encode(encoder, offset + 20, depth)?;
3995            Ok(())
3996        }
3997    }
3998
3999    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Response {
4000        #[inline(always)]
4001        fn new_empty() -> Self {
4002            Self {
4003                buffer: fidl::new_empty!(
4004                    fidl_fuchsia_mem::Buffer,
4005                    fidl::encoding::DefaultFuchsiaResourceDialect
4006                ),
4007                buffer_id: fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect),
4008                font_index: fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect),
4009            }
4010        }
4011
4012        #[inline]
4013        unsafe fn decode(
4014            &mut self,
4015            decoder: &mut fidl::encoding::Decoder<
4016                '_,
4017                fidl::encoding::DefaultFuchsiaResourceDialect,
4018            >,
4019            offset: usize,
4020            _depth: fidl::encoding::Depth,
4021        ) -> fidl::Result<()> {
4022            decoder.debug_check_bounds::<Self>(offset);
4023            // Verify that padding bytes are zero.
4024            fidl::decode!(
4025                fidl_fuchsia_mem::Buffer,
4026                fidl::encoding::DefaultFuchsiaResourceDialect,
4027                &mut self.buffer,
4028                decoder,
4029                offset + 0,
4030                _depth
4031            )?;
4032            fidl::decode!(
4033                u32,
4034                fidl::encoding::DefaultFuchsiaResourceDialect,
4035                &mut self.buffer_id,
4036                decoder,
4037                offset + 16,
4038                _depth
4039            )?;
4040            fidl::decode!(
4041                u32,
4042                fidl::encoding::DefaultFuchsiaResourceDialect,
4043                &mut self.font_index,
4044                decoder,
4045                offset + 20,
4046                _depth
4047            )?;
4048            Ok(())
4049        }
4050    }
4051
4052    impl fidl::encoding::ValueTypeMarker for Style {
4053        type Borrowed<'a> = &'a Self;
4054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4055            value
4056        }
4057    }
4058
4059    unsafe impl fidl::encoding::TypeMarker for Style {
4060        type Owned = Self;
4061
4062        #[inline(always)]
4063        fn inline_align(_context: fidl::encoding::Context) -> usize {
4064            4
4065        }
4066
4067        #[inline(always)]
4068        fn inline_size(_context: fidl::encoding::Context) -> usize {
4069            12
4070        }
4071    }
4072
4073    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Style, D> for &Style {
4074        #[inline]
4075        unsafe fn encode(
4076            self,
4077            encoder: &mut fidl::encoding::Encoder<'_, D>,
4078            offset: usize,
4079            _depth: fidl::encoding::Depth,
4080        ) -> fidl::Result<()> {
4081            encoder.debug_check_bounds::<Style>(offset);
4082            // Delegate to tuple encoding.
4083            fidl::encoding::Encode::<Style, D>::encode(
4084                (
4085                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.weight),
4086                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.width),
4087                    <Slant as fidl::encoding::ValueTypeMarker>::borrow(&self.slant),
4088                ),
4089                encoder,
4090                offset,
4091                _depth,
4092            )
4093        }
4094    }
4095    unsafe impl<
4096            D: fidl::encoding::ResourceDialect,
4097            T0: fidl::encoding::Encode<u32, D>,
4098            T1: fidl::encoding::Encode<u32, D>,
4099            T2: fidl::encoding::Encode<Slant, D>,
4100        > fidl::encoding::Encode<Style, D> for (T0, T1, T2)
4101    {
4102        #[inline]
4103        unsafe fn encode(
4104            self,
4105            encoder: &mut fidl::encoding::Encoder<'_, D>,
4106            offset: usize,
4107            depth: fidl::encoding::Depth,
4108        ) -> fidl::Result<()> {
4109            encoder.debug_check_bounds::<Style>(offset);
4110            // Zero out padding regions. There's no need to apply masks
4111            // because the unmasked parts will be overwritten by fields.
4112            // Write the fields.
4113            self.0.encode(encoder, offset + 0, depth)?;
4114            self.1.encode(encoder, offset + 4, depth)?;
4115            self.2.encode(encoder, offset + 8, depth)?;
4116            Ok(())
4117        }
4118    }
4119
4120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Style {
4121        #[inline(always)]
4122        fn new_empty() -> Self {
4123            Self {
4124                weight: fidl::new_empty!(u32, D),
4125                width: fidl::new_empty!(u32, D),
4126                slant: fidl::new_empty!(Slant, D),
4127            }
4128        }
4129
4130        #[inline]
4131        unsafe fn decode(
4132            &mut self,
4133            decoder: &mut fidl::encoding::Decoder<'_, D>,
4134            offset: usize,
4135            _depth: fidl::encoding::Depth,
4136        ) -> fidl::Result<()> {
4137            decoder.debug_check_bounds::<Self>(offset);
4138            // Verify that padding bytes are zero.
4139            fidl::decode!(u32, D, &mut self.weight, decoder, offset + 0, _depth)?;
4140            fidl::decode!(u32, D, &mut self.width, decoder, offset + 4, _depth)?;
4141            fidl::decode!(Slant, D, &mut self.slant, decoder, offset + 8, _depth)?;
4142            Ok(())
4143        }
4144    }
4145
4146    impl FontFamilyInfo {
4147        #[inline(always)]
4148        fn max_ordinal_present(&self) -> u64 {
4149            if let Some(_) = self.styles {
4150                return 2;
4151            }
4152            if let Some(_) = self.name {
4153                return 1;
4154            }
4155            0
4156        }
4157    }
4158
4159    impl fidl::encoding::ValueTypeMarker for FontFamilyInfo {
4160        type Borrowed<'a> = &'a Self;
4161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4162            value
4163        }
4164    }
4165
4166    unsafe impl fidl::encoding::TypeMarker for FontFamilyInfo {
4167        type Owned = Self;
4168
4169        #[inline(always)]
4170        fn inline_align(_context: fidl::encoding::Context) -> usize {
4171            8
4172        }
4173
4174        #[inline(always)]
4175        fn inline_size(_context: fidl::encoding::Context) -> usize {
4176            16
4177        }
4178    }
4179
4180    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FontFamilyInfo, D>
4181        for &FontFamilyInfo
4182    {
4183        unsafe fn encode(
4184            self,
4185            encoder: &mut fidl::encoding::Encoder<'_, D>,
4186            offset: usize,
4187            mut depth: fidl::encoding::Depth,
4188        ) -> fidl::Result<()> {
4189            encoder.debug_check_bounds::<FontFamilyInfo>(offset);
4190            // Vector header
4191            let max_ordinal: u64 = self.max_ordinal_present();
4192            encoder.write_num(max_ordinal, offset);
4193            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4194            // Calling encoder.out_of_line_offset(0) is not allowed.
4195            if max_ordinal == 0 {
4196                return Ok(());
4197            }
4198            depth.increment()?;
4199            let envelope_size = 8;
4200            let bytes_len = max_ordinal as usize * envelope_size;
4201            #[allow(unused_variables)]
4202            let offset = encoder.out_of_line_offset(bytes_len);
4203            let mut _prev_end_offset: usize = 0;
4204            if 1 > max_ordinal {
4205                return Ok(());
4206            }
4207
4208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4209            // are envelope_size bytes.
4210            let cur_offset: usize = (1 - 1) * envelope_size;
4211
4212            // Zero reserved fields.
4213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4214
4215            // Safety:
4216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4218            //   envelope_size bytes, there is always sufficient room.
4219            fidl::encoding::encode_in_envelope_optional::<FamilyName, D>(
4220                self.name.as_ref().map(<FamilyName as fidl::encoding::ValueTypeMarker>::borrow),
4221                encoder,
4222                offset + cur_offset,
4223                depth,
4224            )?;
4225
4226            _prev_end_offset = cur_offset + envelope_size;
4227            if 2 > max_ordinal {
4228                return Ok(());
4229            }
4230
4231            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4232            // are envelope_size bytes.
4233            let cur_offset: usize = (2 - 1) * envelope_size;
4234
4235            // Zero reserved fields.
4236            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4237
4238            // Safety:
4239            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4240            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4241            //   envelope_size bytes, there is always sufficient room.
4242            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Style2, 300>, D>(
4243            self.styles.as_ref().map(<fidl::encoding::Vector<Style2, 300> as fidl::encoding::ValueTypeMarker>::borrow),
4244            encoder, offset + cur_offset, depth
4245        )?;
4246
4247            _prev_end_offset = cur_offset + envelope_size;
4248
4249            Ok(())
4250        }
4251    }
4252
4253    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FontFamilyInfo {
4254        #[inline(always)]
4255        fn new_empty() -> Self {
4256            Self::default()
4257        }
4258
4259        unsafe fn decode(
4260            &mut self,
4261            decoder: &mut fidl::encoding::Decoder<'_, D>,
4262            offset: usize,
4263            mut depth: fidl::encoding::Depth,
4264        ) -> fidl::Result<()> {
4265            decoder.debug_check_bounds::<Self>(offset);
4266            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4267                None => return Err(fidl::Error::NotNullable),
4268                Some(len) => len,
4269            };
4270            // Calling decoder.out_of_line_offset(0) is not allowed.
4271            if len == 0 {
4272                return Ok(());
4273            };
4274            depth.increment()?;
4275            let envelope_size = 8;
4276            let bytes_len = len * envelope_size;
4277            let offset = decoder.out_of_line_offset(bytes_len)?;
4278            // Decode the envelope for each type.
4279            let mut _next_ordinal_to_read = 0;
4280            let mut next_offset = offset;
4281            let end_offset = offset + bytes_len;
4282            _next_ordinal_to_read += 1;
4283            if next_offset >= end_offset {
4284                return Ok(());
4285            }
4286
4287            // Decode unknown envelopes for gaps in ordinals.
4288            while _next_ordinal_to_read < 1 {
4289                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4290                _next_ordinal_to_read += 1;
4291                next_offset += envelope_size;
4292            }
4293
4294            let next_out_of_line = decoder.next_out_of_line();
4295            let handles_before = decoder.remaining_handles();
4296            if let Some((inlined, num_bytes, num_handles)) =
4297                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4298            {
4299                let member_inline_size =
4300                    <FamilyName as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4301                if inlined != (member_inline_size <= 4) {
4302                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4303                }
4304                let inner_offset;
4305                let mut inner_depth = depth.clone();
4306                if inlined {
4307                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4308                    inner_offset = next_offset;
4309                } else {
4310                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4311                    inner_depth.increment()?;
4312                }
4313                let val_ref = self.name.get_or_insert_with(|| fidl::new_empty!(FamilyName, D));
4314                fidl::decode!(FamilyName, D, val_ref, decoder, inner_offset, inner_depth)?;
4315                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4316                {
4317                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4318                }
4319                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4320                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4321                }
4322            }
4323
4324            next_offset += envelope_size;
4325            _next_ordinal_to_read += 1;
4326            if next_offset >= end_offset {
4327                return Ok(());
4328            }
4329
4330            // Decode unknown envelopes for gaps in ordinals.
4331            while _next_ordinal_to_read < 2 {
4332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4333                _next_ordinal_to_read += 1;
4334                next_offset += envelope_size;
4335            }
4336
4337            let next_out_of_line = decoder.next_out_of_line();
4338            let handles_before = decoder.remaining_handles();
4339            if let Some((inlined, num_bytes, num_handles)) =
4340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4341            {
4342                let member_inline_size = <fidl::encoding::Vector<Style2, 300> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4343                if inlined != (member_inline_size <= 4) {
4344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4345                }
4346                let inner_offset;
4347                let mut inner_depth = depth.clone();
4348                if inlined {
4349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4350                    inner_offset = next_offset;
4351                } else {
4352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4353                    inner_depth.increment()?;
4354                }
4355                let val_ref = self.styles.get_or_insert_with(
4356                    || fidl::new_empty!(fidl::encoding::Vector<Style2, 300>, D),
4357                );
4358                fidl::decode!(fidl::encoding::Vector<Style2, 300>, D, val_ref, decoder, inner_offset, inner_depth)?;
4359                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4360                {
4361                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4362                }
4363                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4364                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4365                }
4366            }
4367
4368            next_offset += envelope_size;
4369
4370            // Decode the remaining unknown envelopes.
4371            while next_offset < end_offset {
4372                _next_ordinal_to_read += 1;
4373                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4374                next_offset += envelope_size;
4375            }
4376
4377            Ok(())
4378        }
4379    }
4380
4381    impl FontSetUpdatedEvent {
4382        #[inline(always)]
4383        fn max_ordinal_present(&self) -> u64 {
4384            0
4385        }
4386    }
4387
4388    impl fidl::encoding::ValueTypeMarker for FontSetUpdatedEvent {
4389        type Borrowed<'a> = &'a Self;
4390        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4391            value
4392        }
4393    }
4394
4395    unsafe impl fidl::encoding::TypeMarker for FontSetUpdatedEvent {
4396        type Owned = Self;
4397
4398        #[inline(always)]
4399        fn inline_align(_context: fidl::encoding::Context) -> usize {
4400            8
4401        }
4402
4403        #[inline(always)]
4404        fn inline_size(_context: fidl::encoding::Context) -> usize {
4405            16
4406        }
4407    }
4408
4409    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FontSetUpdatedEvent, D>
4410        for &FontSetUpdatedEvent
4411    {
4412        unsafe fn encode(
4413            self,
4414            encoder: &mut fidl::encoding::Encoder<'_, D>,
4415            offset: usize,
4416            mut depth: fidl::encoding::Depth,
4417        ) -> fidl::Result<()> {
4418            encoder.debug_check_bounds::<FontSetUpdatedEvent>(offset);
4419            // Vector header
4420            let max_ordinal: u64 = self.max_ordinal_present();
4421            encoder.write_num(max_ordinal, offset);
4422            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4423            // Calling encoder.out_of_line_offset(0) is not allowed.
4424            if max_ordinal == 0 {
4425                return Ok(());
4426            }
4427            depth.increment()?;
4428            let envelope_size = 8;
4429            let bytes_len = max_ordinal as usize * envelope_size;
4430            #[allow(unused_variables)]
4431            let offset = encoder.out_of_line_offset(bytes_len);
4432            let mut _prev_end_offset: usize = 0;
4433
4434            Ok(())
4435        }
4436    }
4437
4438    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FontSetUpdatedEvent {
4439        #[inline(always)]
4440        fn new_empty() -> Self {
4441            Self::default()
4442        }
4443
4444        unsafe fn decode(
4445            &mut self,
4446            decoder: &mut fidl::encoding::Decoder<'_, D>,
4447            offset: usize,
4448            mut depth: fidl::encoding::Depth,
4449        ) -> fidl::Result<()> {
4450            decoder.debug_check_bounds::<Self>(offset);
4451            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4452                None => return Err(fidl::Error::NotNullable),
4453                Some(len) => len,
4454            };
4455            // Calling decoder.out_of_line_offset(0) is not allowed.
4456            if len == 0 {
4457                return Ok(());
4458            };
4459            depth.increment()?;
4460            let envelope_size = 8;
4461            let bytes_len = len * envelope_size;
4462            let offset = decoder.out_of_line_offset(bytes_len)?;
4463            // Decode the envelope for each type.
4464            let mut _next_ordinal_to_read = 0;
4465            let mut next_offset = offset;
4466            let end_offset = offset + bytes_len;
4467
4468            // Decode the remaining unknown envelopes.
4469            while next_offset < end_offset {
4470                _next_ordinal_to_read += 1;
4471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4472                next_offset += envelope_size;
4473            }
4474
4475            Ok(())
4476        }
4477    }
4478
4479    impl Style2 {
4480        #[inline(always)]
4481        fn max_ordinal_present(&self) -> u64 {
4482            if let Some(_) = self.width {
4483                return 3;
4484            }
4485            if let Some(_) = self.weight {
4486                return 2;
4487            }
4488            if let Some(_) = self.slant {
4489                return 1;
4490            }
4491            0
4492        }
4493    }
4494
4495    impl fidl::encoding::ValueTypeMarker for Style2 {
4496        type Borrowed<'a> = &'a Self;
4497        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4498            value
4499        }
4500    }
4501
4502    unsafe impl fidl::encoding::TypeMarker for Style2 {
4503        type Owned = Self;
4504
4505        #[inline(always)]
4506        fn inline_align(_context: fidl::encoding::Context) -> usize {
4507            8
4508        }
4509
4510        #[inline(always)]
4511        fn inline_size(_context: fidl::encoding::Context) -> usize {
4512            16
4513        }
4514    }
4515
4516    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Style2, D> for &Style2 {
4517        unsafe fn encode(
4518            self,
4519            encoder: &mut fidl::encoding::Encoder<'_, D>,
4520            offset: usize,
4521            mut depth: fidl::encoding::Depth,
4522        ) -> fidl::Result<()> {
4523            encoder.debug_check_bounds::<Style2>(offset);
4524            // Vector header
4525            let max_ordinal: u64 = self.max_ordinal_present();
4526            encoder.write_num(max_ordinal, offset);
4527            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4528            // Calling encoder.out_of_line_offset(0) is not allowed.
4529            if max_ordinal == 0 {
4530                return Ok(());
4531            }
4532            depth.increment()?;
4533            let envelope_size = 8;
4534            let bytes_len = max_ordinal as usize * envelope_size;
4535            #[allow(unused_variables)]
4536            let offset = encoder.out_of_line_offset(bytes_len);
4537            let mut _prev_end_offset: usize = 0;
4538            if 1 > max_ordinal {
4539                return Ok(());
4540            }
4541
4542            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4543            // are envelope_size bytes.
4544            let cur_offset: usize = (1 - 1) * envelope_size;
4545
4546            // Zero reserved fields.
4547            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4548
4549            // Safety:
4550            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4551            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4552            //   envelope_size bytes, there is always sufficient room.
4553            fidl::encoding::encode_in_envelope_optional::<Slant, D>(
4554                self.slant.as_ref().map(<Slant as fidl::encoding::ValueTypeMarker>::borrow),
4555                encoder,
4556                offset + cur_offset,
4557                depth,
4558            )?;
4559
4560            _prev_end_offset = cur_offset + envelope_size;
4561            if 2 > max_ordinal {
4562                return Ok(());
4563            }
4564
4565            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4566            // are envelope_size bytes.
4567            let cur_offset: usize = (2 - 1) * envelope_size;
4568
4569            // Zero reserved fields.
4570            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4571
4572            // Safety:
4573            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4574            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4575            //   envelope_size bytes, there is always sufficient room.
4576            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4577                self.weight.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4578                encoder,
4579                offset + cur_offset,
4580                depth,
4581            )?;
4582
4583            _prev_end_offset = cur_offset + envelope_size;
4584            if 3 > max_ordinal {
4585                return Ok(());
4586            }
4587
4588            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4589            // are envelope_size bytes.
4590            let cur_offset: usize = (3 - 1) * envelope_size;
4591
4592            // Zero reserved fields.
4593            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4594
4595            // Safety:
4596            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4597            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4598            //   envelope_size bytes, there is always sufficient room.
4599            fidl::encoding::encode_in_envelope_optional::<Width, D>(
4600                self.width.as_ref().map(<Width as fidl::encoding::ValueTypeMarker>::borrow),
4601                encoder,
4602                offset + cur_offset,
4603                depth,
4604            )?;
4605
4606            _prev_end_offset = cur_offset + envelope_size;
4607
4608            Ok(())
4609        }
4610    }
4611
4612    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Style2 {
4613        #[inline(always)]
4614        fn new_empty() -> Self {
4615            Self::default()
4616        }
4617
4618        unsafe fn decode(
4619            &mut self,
4620            decoder: &mut fidl::encoding::Decoder<'_, D>,
4621            offset: usize,
4622            mut depth: fidl::encoding::Depth,
4623        ) -> fidl::Result<()> {
4624            decoder.debug_check_bounds::<Self>(offset);
4625            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4626                None => return Err(fidl::Error::NotNullable),
4627                Some(len) => len,
4628            };
4629            // Calling decoder.out_of_line_offset(0) is not allowed.
4630            if len == 0 {
4631                return Ok(());
4632            };
4633            depth.increment()?;
4634            let envelope_size = 8;
4635            let bytes_len = len * envelope_size;
4636            let offset = decoder.out_of_line_offset(bytes_len)?;
4637            // Decode the envelope for each type.
4638            let mut _next_ordinal_to_read = 0;
4639            let mut next_offset = offset;
4640            let end_offset = offset + bytes_len;
4641            _next_ordinal_to_read += 1;
4642            if next_offset >= end_offset {
4643                return Ok(());
4644            }
4645
4646            // Decode unknown envelopes for gaps in ordinals.
4647            while _next_ordinal_to_read < 1 {
4648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4649                _next_ordinal_to_read += 1;
4650                next_offset += envelope_size;
4651            }
4652
4653            let next_out_of_line = decoder.next_out_of_line();
4654            let handles_before = decoder.remaining_handles();
4655            if let Some((inlined, num_bytes, num_handles)) =
4656                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4657            {
4658                let member_inline_size =
4659                    <Slant as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4660                if inlined != (member_inline_size <= 4) {
4661                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4662                }
4663                let inner_offset;
4664                let mut inner_depth = depth.clone();
4665                if inlined {
4666                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4667                    inner_offset = next_offset;
4668                } else {
4669                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4670                    inner_depth.increment()?;
4671                }
4672                let val_ref = self.slant.get_or_insert_with(|| fidl::new_empty!(Slant, D));
4673                fidl::decode!(Slant, D, val_ref, decoder, inner_offset, inner_depth)?;
4674                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4675                {
4676                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4677                }
4678                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4679                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4680                }
4681            }
4682
4683            next_offset += envelope_size;
4684            _next_ordinal_to_read += 1;
4685            if next_offset >= end_offset {
4686                return Ok(());
4687            }
4688
4689            // Decode unknown envelopes for gaps in ordinals.
4690            while _next_ordinal_to_read < 2 {
4691                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4692                _next_ordinal_to_read += 1;
4693                next_offset += envelope_size;
4694            }
4695
4696            let next_out_of_line = decoder.next_out_of_line();
4697            let handles_before = decoder.remaining_handles();
4698            if let Some((inlined, num_bytes, num_handles)) =
4699                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4700            {
4701                let member_inline_size =
4702                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4703                if inlined != (member_inline_size <= 4) {
4704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4705                }
4706                let inner_offset;
4707                let mut inner_depth = depth.clone();
4708                if inlined {
4709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4710                    inner_offset = next_offset;
4711                } else {
4712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4713                    inner_depth.increment()?;
4714                }
4715                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u16, D));
4716                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4717                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4718                {
4719                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4720                }
4721                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4722                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4723                }
4724            }
4725
4726            next_offset += envelope_size;
4727            _next_ordinal_to_read += 1;
4728            if next_offset >= end_offset {
4729                return Ok(());
4730            }
4731
4732            // Decode unknown envelopes for gaps in ordinals.
4733            while _next_ordinal_to_read < 3 {
4734                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4735                _next_ordinal_to_read += 1;
4736                next_offset += envelope_size;
4737            }
4738
4739            let next_out_of_line = decoder.next_out_of_line();
4740            let handles_before = decoder.remaining_handles();
4741            if let Some((inlined, num_bytes, num_handles)) =
4742                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4743            {
4744                let member_inline_size =
4745                    <Width as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4746                if inlined != (member_inline_size <= 4) {
4747                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4748                }
4749                let inner_offset;
4750                let mut inner_depth = depth.clone();
4751                if inlined {
4752                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4753                    inner_offset = next_offset;
4754                } else {
4755                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4756                    inner_depth.increment()?;
4757                }
4758                let val_ref = self.width.get_or_insert_with(|| fidl::new_empty!(Width, D));
4759                fidl::decode!(Width, D, val_ref, decoder, inner_offset, inner_depth)?;
4760                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4761                {
4762                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4763                }
4764                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4765                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4766                }
4767            }
4768
4769            next_offset += envelope_size;
4770
4771            // Decode the remaining unknown envelopes.
4772            while next_offset < end_offset {
4773                _next_ordinal_to_read += 1;
4774                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4775                next_offset += envelope_size;
4776            }
4777
4778            Ok(())
4779        }
4780    }
4781
4782    impl TypefaceQuery {
4783        #[inline(always)]
4784        fn max_ordinal_present(&self) -> u64 {
4785            if let Some(_) = self.full_name {
4786                return 7;
4787            }
4788            if let Some(_) = self.postscript_name {
4789                return 6;
4790            }
4791            if let Some(_) = self.fallback_family {
4792                return 5;
4793            }
4794            if let Some(_) = self.code_points {
4795                return 4;
4796            }
4797            if let Some(_) = self.languages {
4798                return 3;
4799            }
4800            if let Some(_) = self.style {
4801                return 2;
4802            }
4803            if let Some(_) = self.family {
4804                return 1;
4805            }
4806            0
4807        }
4808    }
4809
4810    impl fidl::encoding::ValueTypeMarker for TypefaceQuery {
4811        type Borrowed<'a> = &'a Self;
4812        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4813            value
4814        }
4815    }
4816
4817    unsafe impl fidl::encoding::TypeMarker for TypefaceQuery {
4818        type Owned = Self;
4819
4820        #[inline(always)]
4821        fn inline_align(_context: fidl::encoding::Context) -> usize {
4822            8
4823        }
4824
4825        #[inline(always)]
4826        fn inline_size(_context: fidl::encoding::Context) -> usize {
4827            16
4828        }
4829    }
4830
4831    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TypefaceQuery, D>
4832        for &TypefaceQuery
4833    {
4834        unsafe fn encode(
4835            self,
4836            encoder: &mut fidl::encoding::Encoder<'_, D>,
4837            offset: usize,
4838            mut depth: fidl::encoding::Depth,
4839        ) -> fidl::Result<()> {
4840            encoder.debug_check_bounds::<TypefaceQuery>(offset);
4841            // Vector header
4842            let max_ordinal: u64 = self.max_ordinal_present();
4843            encoder.write_num(max_ordinal, offset);
4844            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4845            // Calling encoder.out_of_line_offset(0) is not allowed.
4846            if max_ordinal == 0 {
4847                return Ok(());
4848            }
4849            depth.increment()?;
4850            let envelope_size = 8;
4851            let bytes_len = max_ordinal as usize * envelope_size;
4852            #[allow(unused_variables)]
4853            let offset = encoder.out_of_line_offset(bytes_len);
4854            let mut _prev_end_offset: usize = 0;
4855            if 1 > max_ordinal {
4856                return Ok(());
4857            }
4858
4859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4860            // are envelope_size bytes.
4861            let cur_offset: usize = (1 - 1) * envelope_size;
4862
4863            // Zero reserved fields.
4864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4865
4866            // Safety:
4867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4869            //   envelope_size bytes, there is always sufficient room.
4870            fidl::encoding::encode_in_envelope_optional::<FamilyName, D>(
4871                self.family.as_ref().map(<FamilyName as fidl::encoding::ValueTypeMarker>::borrow),
4872                encoder,
4873                offset + cur_offset,
4874                depth,
4875            )?;
4876
4877            _prev_end_offset = cur_offset + envelope_size;
4878            if 2 > max_ordinal {
4879                return Ok(());
4880            }
4881
4882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4883            // are envelope_size bytes.
4884            let cur_offset: usize = (2 - 1) * envelope_size;
4885
4886            // Zero reserved fields.
4887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4888
4889            // Safety:
4890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4892            //   envelope_size bytes, there is always sufficient room.
4893            fidl::encoding::encode_in_envelope_optional::<Style2, D>(
4894                self.style.as_ref().map(<Style2 as fidl::encoding::ValueTypeMarker>::borrow),
4895                encoder,
4896                offset + cur_offset,
4897                depth,
4898            )?;
4899
4900            _prev_end_offset = cur_offset + envelope_size;
4901            if 3 > max_ordinal {
4902                return Ok(());
4903            }
4904
4905            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4906            // are envelope_size bytes.
4907            let cur_offset: usize = (3 - 1) * envelope_size;
4908
4909            // Zero reserved fields.
4910            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4911
4912            // Safety:
4913            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4914            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4915            //   envelope_size bytes, there is always sufficient room.
4916            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_intl::LocaleId, 8>, D>(
4917            self.languages.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_intl::LocaleId, 8> as fidl::encoding::ValueTypeMarker>::borrow),
4918            encoder, offset + cur_offset, depth
4919        )?;
4920
4921            _prev_end_offset = cur_offset + envelope_size;
4922            if 4 > max_ordinal {
4923                return Ok(());
4924            }
4925
4926            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4927            // are envelope_size bytes.
4928            let cur_offset: usize = (4 - 1) * envelope_size;
4929
4930            // Zero reserved fields.
4931            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4932
4933            // Safety:
4934            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4935            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4936            //   envelope_size bytes, there is always sufficient room.
4937            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 128>, D>(
4938                self.code_points.as_ref().map(
4939                    <fidl::encoding::Vector<u32, 128> as fidl::encoding::ValueTypeMarker>::borrow,
4940                ),
4941                encoder,
4942                offset + cur_offset,
4943                depth,
4944            )?;
4945
4946            _prev_end_offset = cur_offset + envelope_size;
4947            if 5 > max_ordinal {
4948                return Ok(());
4949            }
4950
4951            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4952            // are envelope_size bytes.
4953            let cur_offset: usize = (5 - 1) * envelope_size;
4954
4955            // Zero reserved fields.
4956            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4957
4958            // Safety:
4959            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4960            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4961            //   envelope_size bytes, there is always sufficient room.
4962            fidl::encoding::encode_in_envelope_optional::<GenericFontFamily, D>(
4963                self.fallback_family
4964                    .as_ref()
4965                    .map(<GenericFontFamily as fidl::encoding::ValueTypeMarker>::borrow),
4966                encoder,
4967                offset + cur_offset,
4968                depth,
4969            )?;
4970
4971            _prev_end_offset = cur_offset + envelope_size;
4972            if 6 > max_ordinal {
4973                return Ok(());
4974            }
4975
4976            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4977            // are envelope_size bytes.
4978            let cur_offset: usize = (6 - 1) * envelope_size;
4979
4980            // Zero reserved fields.
4981            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4982
4983            // Safety:
4984            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4985            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4986            //   envelope_size bytes, there is always sufficient room.
4987            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<63>, D>(
4988                self.postscript_name.as_ref().map(
4989                    <fidl::encoding::BoundedString<63> as fidl::encoding::ValueTypeMarker>::borrow,
4990                ),
4991                encoder,
4992                offset + cur_offset,
4993                depth,
4994            )?;
4995
4996            _prev_end_offset = cur_offset + envelope_size;
4997            if 7 > max_ordinal {
4998                return Ok(());
4999            }
5000
5001            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5002            // are envelope_size bytes.
5003            let cur_offset: usize = (7 - 1) * envelope_size;
5004
5005            // Zero reserved fields.
5006            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5007
5008            // Safety:
5009            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5010            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5011            //   envelope_size bytes, there is always sufficient room.
5012            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
5013                self.full_name.as_ref().map(
5014                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
5015                ),
5016                encoder,
5017                offset + cur_offset,
5018                depth,
5019            )?;
5020
5021            _prev_end_offset = cur_offset + envelope_size;
5022
5023            Ok(())
5024        }
5025    }
5026
5027    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TypefaceQuery {
5028        #[inline(always)]
5029        fn new_empty() -> Self {
5030            Self::default()
5031        }
5032
5033        unsafe fn decode(
5034            &mut self,
5035            decoder: &mut fidl::encoding::Decoder<'_, D>,
5036            offset: usize,
5037            mut depth: fidl::encoding::Depth,
5038        ) -> fidl::Result<()> {
5039            decoder.debug_check_bounds::<Self>(offset);
5040            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5041                None => return Err(fidl::Error::NotNullable),
5042                Some(len) => len,
5043            };
5044            // Calling decoder.out_of_line_offset(0) is not allowed.
5045            if len == 0 {
5046                return Ok(());
5047            };
5048            depth.increment()?;
5049            let envelope_size = 8;
5050            let bytes_len = len * envelope_size;
5051            let offset = decoder.out_of_line_offset(bytes_len)?;
5052            // Decode the envelope for each type.
5053            let mut _next_ordinal_to_read = 0;
5054            let mut next_offset = offset;
5055            let end_offset = offset + bytes_len;
5056            _next_ordinal_to_read += 1;
5057            if next_offset >= end_offset {
5058                return Ok(());
5059            }
5060
5061            // Decode unknown envelopes for gaps in ordinals.
5062            while _next_ordinal_to_read < 1 {
5063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5064                _next_ordinal_to_read += 1;
5065                next_offset += envelope_size;
5066            }
5067
5068            let next_out_of_line = decoder.next_out_of_line();
5069            let handles_before = decoder.remaining_handles();
5070            if let Some((inlined, num_bytes, num_handles)) =
5071                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5072            {
5073                let member_inline_size =
5074                    <FamilyName as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5075                if inlined != (member_inline_size <= 4) {
5076                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5077                }
5078                let inner_offset;
5079                let mut inner_depth = depth.clone();
5080                if inlined {
5081                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5082                    inner_offset = next_offset;
5083                } else {
5084                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5085                    inner_depth.increment()?;
5086                }
5087                let val_ref = self.family.get_or_insert_with(|| fidl::new_empty!(FamilyName, D));
5088                fidl::decode!(FamilyName, D, val_ref, decoder, inner_offset, inner_depth)?;
5089                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5090                {
5091                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5092                }
5093                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5094                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5095                }
5096            }
5097
5098            next_offset += envelope_size;
5099            _next_ordinal_to_read += 1;
5100            if next_offset >= end_offset {
5101                return Ok(());
5102            }
5103
5104            // Decode unknown envelopes for gaps in ordinals.
5105            while _next_ordinal_to_read < 2 {
5106                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5107                _next_ordinal_to_read += 1;
5108                next_offset += envelope_size;
5109            }
5110
5111            let next_out_of_line = decoder.next_out_of_line();
5112            let handles_before = decoder.remaining_handles();
5113            if let Some((inlined, num_bytes, num_handles)) =
5114                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5115            {
5116                let member_inline_size =
5117                    <Style2 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5118                if inlined != (member_inline_size <= 4) {
5119                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5120                }
5121                let inner_offset;
5122                let mut inner_depth = depth.clone();
5123                if inlined {
5124                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5125                    inner_offset = next_offset;
5126                } else {
5127                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5128                    inner_depth.increment()?;
5129                }
5130                let val_ref = self.style.get_or_insert_with(|| fidl::new_empty!(Style2, D));
5131                fidl::decode!(Style2, D, val_ref, decoder, inner_offset, inner_depth)?;
5132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5133                {
5134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5135                }
5136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5138                }
5139            }
5140
5141            next_offset += envelope_size;
5142            _next_ordinal_to_read += 1;
5143            if next_offset >= end_offset {
5144                return Ok(());
5145            }
5146
5147            // Decode unknown envelopes for gaps in ordinals.
5148            while _next_ordinal_to_read < 3 {
5149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5150                _next_ordinal_to_read += 1;
5151                next_offset += envelope_size;
5152            }
5153
5154            let next_out_of_line = decoder.next_out_of_line();
5155            let handles_before = decoder.remaining_handles();
5156            if let Some((inlined, num_bytes, num_handles)) =
5157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5158            {
5159                let member_inline_size = <fidl::encoding::Vector<fidl_fuchsia_intl::LocaleId, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5160                if inlined != (member_inline_size <= 4) {
5161                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5162                }
5163                let inner_offset;
5164                let mut inner_depth = depth.clone();
5165                if inlined {
5166                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5167                    inner_offset = next_offset;
5168                } else {
5169                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5170                    inner_depth.increment()?;
5171                }
5172                let val_ref = self.languages.get_or_insert_with(
5173                    || fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_intl::LocaleId, 8>, D),
5174                );
5175                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_intl::LocaleId, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
5176                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5177                {
5178                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5179                }
5180                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5181                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5182                }
5183            }
5184
5185            next_offset += envelope_size;
5186            _next_ordinal_to_read += 1;
5187            if next_offset >= end_offset {
5188                return Ok(());
5189            }
5190
5191            // Decode unknown envelopes for gaps in ordinals.
5192            while _next_ordinal_to_read < 4 {
5193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5194                _next_ordinal_to_read += 1;
5195                next_offset += envelope_size;
5196            }
5197
5198            let next_out_of_line = decoder.next_out_of_line();
5199            let handles_before = decoder.remaining_handles();
5200            if let Some((inlined, num_bytes, num_handles)) =
5201                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5202            {
5203                let member_inline_size =
5204                    <fidl::encoding::Vector<u32, 128> as fidl::encoding::TypeMarker>::inline_size(
5205                        decoder.context,
5206                    );
5207                if inlined != (member_inline_size <= 4) {
5208                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5209                }
5210                let inner_offset;
5211                let mut inner_depth = depth.clone();
5212                if inlined {
5213                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5214                    inner_offset = next_offset;
5215                } else {
5216                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5217                    inner_depth.increment()?;
5218                }
5219                let val_ref = self
5220                    .code_points
5221                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 128>, D));
5222                fidl::decode!(fidl::encoding::Vector<u32, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
5223                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5224                {
5225                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5226                }
5227                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5228                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5229                }
5230            }
5231
5232            next_offset += envelope_size;
5233            _next_ordinal_to_read += 1;
5234            if next_offset >= end_offset {
5235                return Ok(());
5236            }
5237
5238            // Decode unknown envelopes for gaps in ordinals.
5239            while _next_ordinal_to_read < 5 {
5240                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5241                _next_ordinal_to_read += 1;
5242                next_offset += envelope_size;
5243            }
5244
5245            let next_out_of_line = decoder.next_out_of_line();
5246            let handles_before = decoder.remaining_handles();
5247            if let Some((inlined, num_bytes, num_handles)) =
5248                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5249            {
5250                let member_inline_size =
5251                    <GenericFontFamily as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5252                if inlined != (member_inline_size <= 4) {
5253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5254                }
5255                let inner_offset;
5256                let mut inner_depth = depth.clone();
5257                if inlined {
5258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5259                    inner_offset = next_offset;
5260                } else {
5261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5262                    inner_depth.increment()?;
5263                }
5264                let val_ref = self
5265                    .fallback_family
5266                    .get_or_insert_with(|| fidl::new_empty!(GenericFontFamily, D));
5267                fidl::decode!(GenericFontFamily, D, val_ref, decoder, inner_offset, inner_depth)?;
5268                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5269                {
5270                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5271                }
5272                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5273                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5274                }
5275            }
5276
5277            next_offset += envelope_size;
5278            _next_ordinal_to_read += 1;
5279            if next_offset >= end_offset {
5280                return Ok(());
5281            }
5282
5283            // Decode unknown envelopes for gaps in ordinals.
5284            while _next_ordinal_to_read < 6 {
5285                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5286                _next_ordinal_to_read += 1;
5287                next_offset += envelope_size;
5288            }
5289
5290            let next_out_of_line = decoder.next_out_of_line();
5291            let handles_before = decoder.remaining_handles();
5292            if let Some((inlined, num_bytes, num_handles)) =
5293                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5294            {
5295                let member_inline_size =
5296                    <fidl::encoding::BoundedString<63> as fidl::encoding::TypeMarker>::inline_size(
5297                        decoder.context,
5298                    );
5299                if inlined != (member_inline_size <= 4) {
5300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5301                }
5302                let inner_offset;
5303                let mut inner_depth = depth.clone();
5304                if inlined {
5305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5306                    inner_offset = next_offset;
5307                } else {
5308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5309                    inner_depth.increment()?;
5310                }
5311                let val_ref = self
5312                    .postscript_name
5313                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<63>, D));
5314                fidl::decode!(
5315                    fidl::encoding::BoundedString<63>,
5316                    D,
5317                    val_ref,
5318                    decoder,
5319                    inner_offset,
5320                    inner_depth
5321                )?;
5322                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5323                {
5324                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5325                }
5326                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5327                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5328                }
5329            }
5330
5331            next_offset += envelope_size;
5332            _next_ordinal_to_read += 1;
5333            if next_offset >= end_offset {
5334                return Ok(());
5335            }
5336
5337            // Decode unknown envelopes for gaps in ordinals.
5338            while _next_ordinal_to_read < 7 {
5339                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5340                _next_ordinal_to_read += 1;
5341                next_offset += envelope_size;
5342            }
5343
5344            let next_out_of_line = decoder.next_out_of_line();
5345            let handles_before = decoder.remaining_handles();
5346            if let Some((inlined, num_bytes, num_handles)) =
5347                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5348            {
5349                let member_inline_size =
5350                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
5351                        decoder.context,
5352                    );
5353                if inlined != (member_inline_size <= 4) {
5354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5355                }
5356                let inner_offset;
5357                let mut inner_depth = depth.clone();
5358                if inlined {
5359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5360                    inner_offset = next_offset;
5361                } else {
5362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5363                    inner_depth.increment()?;
5364                }
5365                let val_ref = self
5366                    .full_name
5367                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
5368                fidl::decode!(
5369                    fidl::encoding::BoundedString<128>,
5370                    D,
5371                    val_ref,
5372                    decoder,
5373                    inner_offset,
5374                    inner_depth
5375                )?;
5376                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5377                {
5378                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5379                }
5380                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5381                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5382                }
5383            }
5384
5385            next_offset += envelope_size;
5386
5387            // Decode the remaining unknown envelopes.
5388            while next_offset < end_offset {
5389                _next_ordinal_to_read += 1;
5390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5391                next_offset += envelope_size;
5392            }
5393
5394            Ok(())
5395        }
5396    }
5397
5398    impl TypefaceRequest {
5399        #[inline(always)]
5400        fn max_ordinal_present(&self) -> u64 {
5401            if let Some(_) = self.cache_miss_policy {
5402                return 3;
5403            }
5404            if let Some(_) = self.flags {
5405                return 2;
5406            }
5407            if let Some(_) = self.query {
5408                return 1;
5409            }
5410            0
5411        }
5412    }
5413
5414    impl fidl::encoding::ValueTypeMarker for TypefaceRequest {
5415        type Borrowed<'a> = &'a Self;
5416        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5417            value
5418        }
5419    }
5420
5421    unsafe impl fidl::encoding::TypeMarker for TypefaceRequest {
5422        type Owned = Self;
5423
5424        #[inline(always)]
5425        fn inline_align(_context: fidl::encoding::Context) -> usize {
5426            8
5427        }
5428
5429        #[inline(always)]
5430        fn inline_size(_context: fidl::encoding::Context) -> usize {
5431            16
5432        }
5433    }
5434
5435    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TypefaceRequest, D>
5436        for &TypefaceRequest
5437    {
5438        unsafe fn encode(
5439            self,
5440            encoder: &mut fidl::encoding::Encoder<'_, D>,
5441            offset: usize,
5442            mut depth: fidl::encoding::Depth,
5443        ) -> fidl::Result<()> {
5444            encoder.debug_check_bounds::<TypefaceRequest>(offset);
5445            // Vector header
5446            let max_ordinal: u64 = self.max_ordinal_present();
5447            encoder.write_num(max_ordinal, offset);
5448            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5449            // Calling encoder.out_of_line_offset(0) is not allowed.
5450            if max_ordinal == 0 {
5451                return Ok(());
5452            }
5453            depth.increment()?;
5454            let envelope_size = 8;
5455            let bytes_len = max_ordinal as usize * envelope_size;
5456            #[allow(unused_variables)]
5457            let offset = encoder.out_of_line_offset(bytes_len);
5458            let mut _prev_end_offset: usize = 0;
5459            if 1 > max_ordinal {
5460                return Ok(());
5461            }
5462
5463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5464            // are envelope_size bytes.
5465            let cur_offset: usize = (1 - 1) * envelope_size;
5466
5467            // Zero reserved fields.
5468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5469
5470            // Safety:
5471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5473            //   envelope_size bytes, there is always sufficient room.
5474            fidl::encoding::encode_in_envelope_optional::<TypefaceQuery, D>(
5475                self.query.as_ref().map(<TypefaceQuery as fidl::encoding::ValueTypeMarker>::borrow),
5476                encoder,
5477                offset + cur_offset,
5478                depth,
5479            )?;
5480
5481            _prev_end_offset = cur_offset + envelope_size;
5482            if 2 > max_ordinal {
5483                return Ok(());
5484            }
5485
5486            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5487            // are envelope_size bytes.
5488            let cur_offset: usize = (2 - 1) * envelope_size;
5489
5490            // Zero reserved fields.
5491            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5492
5493            // Safety:
5494            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5495            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5496            //   envelope_size bytes, there is always sufficient room.
5497            fidl::encoding::encode_in_envelope_optional::<TypefaceRequestFlags, D>(
5498                self.flags
5499                    .as_ref()
5500                    .map(<TypefaceRequestFlags as fidl::encoding::ValueTypeMarker>::borrow),
5501                encoder,
5502                offset + cur_offset,
5503                depth,
5504            )?;
5505
5506            _prev_end_offset = cur_offset + envelope_size;
5507            if 3 > max_ordinal {
5508                return Ok(());
5509            }
5510
5511            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5512            // are envelope_size bytes.
5513            let cur_offset: usize = (3 - 1) * envelope_size;
5514
5515            // Zero reserved fields.
5516            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5517
5518            // Safety:
5519            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5520            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5521            //   envelope_size bytes, there is always sufficient room.
5522            fidl::encoding::encode_in_envelope_optional::<CacheMissPolicy, D>(
5523                self.cache_miss_policy
5524                    .as_ref()
5525                    .map(<CacheMissPolicy as fidl::encoding::ValueTypeMarker>::borrow),
5526                encoder,
5527                offset + cur_offset,
5528                depth,
5529            )?;
5530
5531            _prev_end_offset = cur_offset + envelope_size;
5532
5533            Ok(())
5534        }
5535    }
5536
5537    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TypefaceRequest {
5538        #[inline(always)]
5539        fn new_empty() -> Self {
5540            Self::default()
5541        }
5542
5543        unsafe fn decode(
5544            &mut self,
5545            decoder: &mut fidl::encoding::Decoder<'_, D>,
5546            offset: usize,
5547            mut depth: fidl::encoding::Depth,
5548        ) -> fidl::Result<()> {
5549            decoder.debug_check_bounds::<Self>(offset);
5550            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5551                None => return Err(fidl::Error::NotNullable),
5552                Some(len) => len,
5553            };
5554            // Calling decoder.out_of_line_offset(0) is not allowed.
5555            if len == 0 {
5556                return Ok(());
5557            };
5558            depth.increment()?;
5559            let envelope_size = 8;
5560            let bytes_len = len * envelope_size;
5561            let offset = decoder.out_of_line_offset(bytes_len)?;
5562            // Decode the envelope for each type.
5563            let mut _next_ordinal_to_read = 0;
5564            let mut next_offset = offset;
5565            let end_offset = offset + bytes_len;
5566            _next_ordinal_to_read += 1;
5567            if next_offset >= end_offset {
5568                return Ok(());
5569            }
5570
5571            // Decode unknown envelopes for gaps in ordinals.
5572            while _next_ordinal_to_read < 1 {
5573                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5574                _next_ordinal_to_read += 1;
5575                next_offset += envelope_size;
5576            }
5577
5578            let next_out_of_line = decoder.next_out_of_line();
5579            let handles_before = decoder.remaining_handles();
5580            if let Some((inlined, num_bytes, num_handles)) =
5581                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5582            {
5583                let member_inline_size =
5584                    <TypefaceQuery as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5585                if inlined != (member_inline_size <= 4) {
5586                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5587                }
5588                let inner_offset;
5589                let mut inner_depth = depth.clone();
5590                if inlined {
5591                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5592                    inner_offset = next_offset;
5593                } else {
5594                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5595                    inner_depth.increment()?;
5596                }
5597                let val_ref = self.query.get_or_insert_with(|| fidl::new_empty!(TypefaceQuery, D));
5598                fidl::decode!(TypefaceQuery, D, val_ref, decoder, inner_offset, inner_depth)?;
5599                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5600                {
5601                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5602                }
5603                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5604                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5605                }
5606            }
5607
5608            next_offset += envelope_size;
5609            _next_ordinal_to_read += 1;
5610            if next_offset >= end_offset {
5611                return Ok(());
5612            }
5613
5614            // Decode unknown envelopes for gaps in ordinals.
5615            while _next_ordinal_to_read < 2 {
5616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5617                _next_ordinal_to_read += 1;
5618                next_offset += envelope_size;
5619            }
5620
5621            let next_out_of_line = decoder.next_out_of_line();
5622            let handles_before = decoder.remaining_handles();
5623            if let Some((inlined, num_bytes, num_handles)) =
5624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5625            {
5626                let member_inline_size =
5627                    <TypefaceRequestFlags as fidl::encoding::TypeMarker>::inline_size(
5628                        decoder.context,
5629                    );
5630                if inlined != (member_inline_size <= 4) {
5631                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5632                }
5633                let inner_offset;
5634                let mut inner_depth = depth.clone();
5635                if inlined {
5636                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5637                    inner_offset = next_offset;
5638                } else {
5639                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5640                    inner_depth.increment()?;
5641                }
5642                let val_ref =
5643                    self.flags.get_or_insert_with(|| fidl::new_empty!(TypefaceRequestFlags, D));
5644                fidl::decode!(
5645                    TypefaceRequestFlags,
5646                    D,
5647                    val_ref,
5648                    decoder,
5649                    inner_offset,
5650                    inner_depth
5651                )?;
5652                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5653                {
5654                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5655                }
5656                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5657                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5658                }
5659            }
5660
5661            next_offset += envelope_size;
5662            _next_ordinal_to_read += 1;
5663            if next_offset >= end_offset {
5664                return Ok(());
5665            }
5666
5667            // Decode unknown envelopes for gaps in ordinals.
5668            while _next_ordinal_to_read < 3 {
5669                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5670                _next_ordinal_to_read += 1;
5671                next_offset += envelope_size;
5672            }
5673
5674            let next_out_of_line = decoder.next_out_of_line();
5675            let handles_before = decoder.remaining_handles();
5676            if let Some((inlined, num_bytes, num_handles)) =
5677                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5678            {
5679                let member_inline_size =
5680                    <CacheMissPolicy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5681                if inlined != (member_inline_size <= 4) {
5682                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5683                }
5684                let inner_offset;
5685                let mut inner_depth = depth.clone();
5686                if inlined {
5687                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5688                    inner_offset = next_offset;
5689                } else {
5690                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5691                    inner_depth.increment()?;
5692                }
5693                let val_ref = self
5694                    .cache_miss_policy
5695                    .get_or_insert_with(|| fidl::new_empty!(CacheMissPolicy, D));
5696                fidl::decode!(CacheMissPolicy, D, val_ref, decoder, inner_offset, inner_depth)?;
5697                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5698                {
5699                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5700                }
5701                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5702                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5703                }
5704            }
5705
5706            next_offset += envelope_size;
5707
5708            // Decode the remaining unknown envelopes.
5709            while next_offset < end_offset {
5710                _next_ordinal_to_read += 1;
5711                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5712                next_offset += envelope_size;
5713            }
5714
5715            Ok(())
5716        }
5717    }
5718
5719    impl TypefaceResponse {
5720        #[inline(always)]
5721        fn max_ordinal_present(&self) -> u64 {
5722            if let Some(_) = self.font_index {
5723                return 3;
5724            }
5725            if let Some(_) = self.buffer_id {
5726                return 2;
5727            }
5728            if let Some(_) = self.buffer {
5729                return 1;
5730            }
5731            0
5732        }
5733    }
5734
5735    impl fidl::encoding::ResourceTypeMarker for TypefaceResponse {
5736        type Borrowed<'a> = &'a mut Self;
5737        fn take_or_borrow<'a>(
5738            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5739        ) -> Self::Borrowed<'a> {
5740            value
5741        }
5742    }
5743
5744    unsafe impl fidl::encoding::TypeMarker for TypefaceResponse {
5745        type Owned = Self;
5746
5747        #[inline(always)]
5748        fn inline_align(_context: fidl::encoding::Context) -> usize {
5749            8
5750        }
5751
5752        #[inline(always)]
5753        fn inline_size(_context: fidl::encoding::Context) -> usize {
5754            16
5755        }
5756    }
5757
5758    unsafe impl
5759        fidl::encoding::Encode<TypefaceResponse, fidl::encoding::DefaultFuchsiaResourceDialect>
5760        for &mut TypefaceResponse
5761    {
5762        unsafe fn encode(
5763            self,
5764            encoder: &mut fidl::encoding::Encoder<
5765                '_,
5766                fidl::encoding::DefaultFuchsiaResourceDialect,
5767            >,
5768            offset: usize,
5769            mut depth: fidl::encoding::Depth,
5770        ) -> fidl::Result<()> {
5771            encoder.debug_check_bounds::<TypefaceResponse>(offset);
5772            // Vector header
5773            let max_ordinal: u64 = self.max_ordinal_present();
5774            encoder.write_num(max_ordinal, offset);
5775            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5776            // Calling encoder.out_of_line_offset(0) is not allowed.
5777            if max_ordinal == 0 {
5778                return Ok(());
5779            }
5780            depth.increment()?;
5781            let envelope_size = 8;
5782            let bytes_len = max_ordinal as usize * envelope_size;
5783            #[allow(unused_variables)]
5784            let offset = encoder.out_of_line_offset(bytes_len);
5785            let mut _prev_end_offset: usize = 0;
5786            if 1 > max_ordinal {
5787                return Ok(());
5788            }
5789
5790            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5791            // are envelope_size bytes.
5792            let cur_offset: usize = (1 - 1) * envelope_size;
5793
5794            // Zero reserved fields.
5795            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5796
5797            // Safety:
5798            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5799            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5800            //   envelope_size bytes, there is always sufficient room.
5801            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_mem::Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>(
5802            self.buffer.as_mut().map(<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
5803            encoder, offset + cur_offset, depth
5804        )?;
5805
5806            _prev_end_offset = cur_offset + envelope_size;
5807            if 2 > max_ordinal {
5808                return Ok(());
5809            }
5810
5811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5812            // are envelope_size bytes.
5813            let cur_offset: usize = (2 - 1) * envelope_size;
5814
5815            // Zero reserved fields.
5816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5817
5818            // Safety:
5819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5821            //   envelope_size bytes, there is always sufficient room.
5822            fidl::encoding::encode_in_envelope_optional::<
5823                u32,
5824                fidl::encoding::DefaultFuchsiaResourceDialect,
5825            >(
5826                self.buffer_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5827                encoder,
5828                offset + cur_offset,
5829                depth,
5830            )?;
5831
5832            _prev_end_offset = cur_offset + envelope_size;
5833            if 3 > max_ordinal {
5834                return Ok(());
5835            }
5836
5837            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5838            // are envelope_size bytes.
5839            let cur_offset: usize = (3 - 1) * envelope_size;
5840
5841            // Zero reserved fields.
5842            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5843
5844            // Safety:
5845            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5846            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5847            //   envelope_size bytes, there is always sufficient room.
5848            fidl::encoding::encode_in_envelope_optional::<
5849                u32,
5850                fidl::encoding::DefaultFuchsiaResourceDialect,
5851            >(
5852                self.font_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5853                encoder,
5854                offset + cur_offset,
5855                depth,
5856            )?;
5857
5858            _prev_end_offset = cur_offset + envelope_size;
5859
5860            Ok(())
5861        }
5862    }
5863
5864    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5865        for TypefaceResponse
5866    {
5867        #[inline(always)]
5868        fn new_empty() -> Self {
5869            Self::default()
5870        }
5871
5872        unsafe fn decode(
5873            &mut self,
5874            decoder: &mut fidl::encoding::Decoder<
5875                '_,
5876                fidl::encoding::DefaultFuchsiaResourceDialect,
5877            >,
5878            offset: usize,
5879            mut depth: fidl::encoding::Depth,
5880        ) -> fidl::Result<()> {
5881            decoder.debug_check_bounds::<Self>(offset);
5882            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5883                None => return Err(fidl::Error::NotNullable),
5884                Some(len) => len,
5885            };
5886            // Calling decoder.out_of_line_offset(0) is not allowed.
5887            if len == 0 {
5888                return Ok(());
5889            };
5890            depth.increment()?;
5891            let envelope_size = 8;
5892            let bytes_len = len * envelope_size;
5893            let offset = decoder.out_of_line_offset(bytes_len)?;
5894            // Decode the envelope for each type.
5895            let mut _next_ordinal_to_read = 0;
5896            let mut next_offset = offset;
5897            let end_offset = offset + bytes_len;
5898            _next_ordinal_to_read += 1;
5899            if next_offset >= end_offset {
5900                return Ok(());
5901            }
5902
5903            // Decode unknown envelopes for gaps in ordinals.
5904            while _next_ordinal_to_read < 1 {
5905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5906                _next_ordinal_to_read += 1;
5907                next_offset += envelope_size;
5908            }
5909
5910            let next_out_of_line = decoder.next_out_of_line();
5911            let handles_before = decoder.remaining_handles();
5912            if let Some((inlined, num_bytes, num_handles)) =
5913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5914            {
5915                let member_inline_size =
5916                    <fidl_fuchsia_mem::Buffer as fidl::encoding::TypeMarker>::inline_size(
5917                        decoder.context,
5918                    );
5919                if inlined != (member_inline_size <= 4) {
5920                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5921                }
5922                let inner_offset;
5923                let mut inner_depth = depth.clone();
5924                if inlined {
5925                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5926                    inner_offset = next_offset;
5927                } else {
5928                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5929                    inner_depth.increment()?;
5930                }
5931                let val_ref = self.buffer.get_or_insert_with(|| {
5932                    fidl::new_empty!(
5933                        fidl_fuchsia_mem::Buffer,
5934                        fidl::encoding::DefaultFuchsiaResourceDialect
5935                    )
5936                });
5937                fidl::decode!(
5938                    fidl_fuchsia_mem::Buffer,
5939                    fidl::encoding::DefaultFuchsiaResourceDialect,
5940                    val_ref,
5941                    decoder,
5942                    inner_offset,
5943                    inner_depth
5944                )?;
5945                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5946                {
5947                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5948                }
5949                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5950                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5951                }
5952            }
5953
5954            next_offset += envelope_size;
5955            _next_ordinal_to_read += 1;
5956            if next_offset >= end_offset {
5957                return Ok(());
5958            }
5959
5960            // Decode unknown envelopes for gaps in ordinals.
5961            while _next_ordinal_to_read < 2 {
5962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5963                _next_ordinal_to_read += 1;
5964                next_offset += envelope_size;
5965            }
5966
5967            let next_out_of_line = decoder.next_out_of_line();
5968            let handles_before = decoder.remaining_handles();
5969            if let Some((inlined, num_bytes, num_handles)) =
5970                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5971            {
5972                let member_inline_size =
5973                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5974                if inlined != (member_inline_size <= 4) {
5975                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5976                }
5977                let inner_offset;
5978                let mut inner_depth = depth.clone();
5979                if inlined {
5980                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5981                    inner_offset = next_offset;
5982                } else {
5983                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5984                    inner_depth.increment()?;
5985                }
5986                let val_ref = self.buffer_id.get_or_insert_with(|| {
5987                    fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect)
5988                });
5989                fidl::decode!(
5990                    u32,
5991                    fidl::encoding::DefaultFuchsiaResourceDialect,
5992                    val_ref,
5993                    decoder,
5994                    inner_offset,
5995                    inner_depth
5996                )?;
5997                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5998                {
5999                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6000                }
6001                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6002                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6003                }
6004            }
6005
6006            next_offset += envelope_size;
6007            _next_ordinal_to_read += 1;
6008            if next_offset >= end_offset {
6009                return Ok(());
6010            }
6011
6012            // Decode unknown envelopes for gaps in ordinals.
6013            while _next_ordinal_to_read < 3 {
6014                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6015                _next_ordinal_to_read += 1;
6016                next_offset += envelope_size;
6017            }
6018
6019            let next_out_of_line = decoder.next_out_of_line();
6020            let handles_before = decoder.remaining_handles();
6021            if let Some((inlined, num_bytes, num_handles)) =
6022                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6023            {
6024                let member_inline_size =
6025                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6026                if inlined != (member_inline_size <= 4) {
6027                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6028                }
6029                let inner_offset;
6030                let mut inner_depth = depth.clone();
6031                if inlined {
6032                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6033                    inner_offset = next_offset;
6034                } else {
6035                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6036                    inner_depth.increment()?;
6037                }
6038                let val_ref = self.font_index.get_or_insert_with(|| {
6039                    fidl::new_empty!(u32, fidl::encoding::DefaultFuchsiaResourceDialect)
6040                });
6041                fidl::decode!(
6042                    u32,
6043                    fidl::encoding::DefaultFuchsiaResourceDialect,
6044                    val_ref,
6045                    decoder,
6046                    inner_offset,
6047                    inner_depth
6048                )?;
6049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6050                {
6051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6052                }
6053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6055                }
6056            }
6057
6058            next_offset += envelope_size;
6059
6060            // Decode the remaining unknown envelopes.
6061            while next_offset < end_offset {
6062                _next_ordinal_to_read += 1;
6063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6064                next_offset += envelope_size;
6065            }
6066
6067            Ok(())
6068        }
6069    }
6070}