write_fonts/generated/
generated_gasp.rs1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8pub use read_fonts::tables::gasp::GaspRangeBehavior;
9
10#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct Gasp {
14 pub version: u16,
16 pub num_ranges: u16,
18 pub gasp_ranges: Vec<GaspRange>,
20}
21
22impl Gasp {
23 pub fn new(version: u16, num_ranges: u16, gasp_ranges: Vec<GaspRange>) -> Self {
25 Self {
26 version,
27 num_ranges,
28 gasp_ranges,
29 }
30 }
31}
32
33impl FontWrite for Gasp {
34 fn write_into(&self, writer: &mut TableWriter) {
35 self.version.write_into(writer);
36 self.num_ranges.write_into(writer);
37 self.gasp_ranges.write_into(writer);
38 }
39 fn table_type(&self) -> TableType {
40 TableType::TopLevel(Gasp::TAG)
41 }
42}
43
44impl Validate for Gasp {
45 fn validate_impl(&self, ctx: &mut ValidationCtx) {
46 ctx.in_table("Gasp", |ctx| {
47 ctx.in_field("gasp_ranges", |ctx| {
48 if self.gasp_ranges.len() > to_usize(u16::MAX) {
49 ctx.report("array exceeds max length");
50 }
51 self.gasp_ranges.validate_impl(ctx);
52 });
53 })
54 }
55}
56
57impl TopLevelTable for Gasp {
58 const TAG: Tag = Tag::new(b"gasp");
59}
60
61impl<'a> FromObjRef<read_fonts::tables::gasp::Gasp<'a>> for Gasp {
62 fn from_obj_ref(obj: &read_fonts::tables::gasp::Gasp<'a>, _: FontData) -> Self {
63 let offset_data = obj.offset_data();
64 Gasp {
65 version: obj.version(),
66 num_ranges: obj.num_ranges(),
67 gasp_ranges: obj.gasp_ranges().to_owned_obj(offset_data),
68 }
69 }
70}
71
72#[allow(clippy::needless_lifetimes)]
73impl<'a> FromTableRef<read_fonts::tables::gasp::Gasp<'a>> for Gasp {}
74
75impl ReadArgs for Gasp {
76 type Args = ();
77}
78
79impl<'a> FontRead<'a> for Gasp {
80 fn read_with_args(data: FontData<'a>, _: ()) -> Result<Self, ReadError> {
81 <read_fonts::tables::gasp::Gasp as FontRead>::read(data).map(|x| x.to_owned_table())
82 }
83}
84
85#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
86#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
87pub struct GaspRange {
88 pub range_max_ppem: u16,
90 pub range_gasp_behavior: GaspRangeBehavior,
92}
93
94impl GaspRange {
95 pub fn new(range_max_ppem: u16, range_gasp_behavior: GaspRangeBehavior) -> Self {
97 Self {
98 range_max_ppem,
99 range_gasp_behavior,
100 }
101 }
102}
103
104impl FontWrite for GaspRange {
105 fn write_into(&self, writer: &mut TableWriter) {
106 self.range_max_ppem.write_into(writer);
107 self.range_gasp_behavior.write_into(writer);
108 }
109 fn table_type(&self) -> TableType {
110 TableType::Named("GaspRange")
111 }
112}
113
114impl Validate for GaspRange {
115 fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
116}
117
118impl FromObjRef<read_fonts::tables::gasp::GaspRange> for GaspRange {
119 fn from_obj_ref(obj: &read_fonts::tables::gasp::GaspRange, _: FontData) -> Self {
120 GaspRange {
121 range_max_ppem: obj.range_max_ppem(),
122 range_gasp_behavior: obj.range_gasp_behavior(),
123 }
124 }
125}
126
127impl FontWrite for GaspRangeBehavior {
128 fn write_into(&self, writer: &mut TableWriter) {
129 writer.write_slice(&self.bits().to_be_bytes())
130 }
131}