Skip to main content

read_fonts/model/font/
source.rs

1//! Font data sources.
2
3use super::{FontBlob, FontTableFunction};
4use alloc::sync::Arc;
5use types::Tag;
6
7/// Source for font data.
8#[derive(Clone)]
9pub enum FontSource {
10    /// A nice flat buffer.
11    Blob(FontBlob),
12    /// Lazy loader with per-table data provided by a function.
13    TableFunction(FontTableFunction),
14}
15
16impl<T: Into<FontBlob>> From<T> for FontSource {
17    fn from(value: T) -> Self {
18        Self::Blob(value.into())
19    }
20}
21
22impl From<Arc<dyn Fn(Tag) -> Option<FontBlob> + Send + Sync>> for FontSource {
23    fn from(value: Arc<dyn Fn(Tag) -> Option<FontBlob> + Send + Sync>) -> Self {
24        Self::TableFunction(FontTableFunction::new(value))
25    }
26}
27
28impl From<FontTableFunction> for FontSource {
29    fn from(value: FontTableFunction) -> Self {
30        Self::TableFunction(value)
31    }
32}