use crate::json::json; pub use font_kit::metrics::Metrics; pub use font_kit::properties::{Properties, Stretch, Style, Weight}; use crate::json::ToJson; #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] pub struct FontId(pub usize); pub type GlyphId = u32; impl ToJson for Properties { fn to_json(&self) -> crate::json::Value { json!({ "style": self.style.to_json(), "weight": self.weight.to_json(), "stretch": self.stretch.to_json(), }) } } impl ToJson for Style { fn to_json(&self) -> crate::json::Value { match self { Style::Normal => json!("normal"), Style::Italic => json!("italic"), Style::Oblique => json!("oblique"), } } } impl ToJson for Weight { fn to_json(&self) -> crate::json::Value { if self.0 == Weight::THIN.0 { json!("thin") } else if self.0 == Weight::EXTRA_LIGHT.0 { json!("extra light") } else if self.0 == Weight::LIGHT.0 { json!("light") } else if self.0 == Weight::NORMAL.0 { json!("normal") } else if self.0 == Weight::MEDIUM.0 { json!("medium") } else if self.0 == Weight::SEMIBOLD.0 { json!("semibold") } else if self.0 == Weight::BOLD.0 { json!("bold") } else if self.0 == Weight::EXTRA_BOLD.0 { json!("extra bold") } else if self.0 == Weight::BLACK.0 { json!("black") } else { json!(self.0) } } } impl ToJson for Stretch { fn to_json(&self) -> serde_json::Value { json!(self.0) } }