concinnity_core/components/
font.rs1use crate::ecs::PayloadLocator;
4use crate::ecs::asset_id::AssetId;
5use alloc::string::String;
6
7#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
26#[serde(default)]
27pub struct Font {
28 #[serde(skip)]
30 pub asset_id: AssetId,
31 pub path: String,
33 pub size_px: u32,
35 #[serde(skip)]
37 pub locator: Option<PayloadLocator>,
38}
39
40impl Default for Font {
41 fn default() -> Self {
42 Self {
43 asset_id: AssetId::default(),
44 path: String::new(),
45 size_px: 20,
46 locator: None,
47 }
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn a_blank_font_rasterises_at_a_readable_body_size() {
57 let f = Font::default();
58 assert!(f.path.is_empty());
59 assert_eq!(f.size_px, 20);
60 assert_eq!(f.asset_id, AssetId::default());
61 assert!(f.locator.is_none());
62 }
63
64 #[test]
65 fn an_authored_atlas_size_parses_and_round_trips_through_postcard() {
66 let f: Font = serde_json::from_str(r#"{"path":"fonts/body.ttf","size_px":48}"#).unwrap();
67 assert_eq!(f.path, "fonts/body.ttf");
68 assert_eq!(f.size_px, 48);
69
70 let bytes = postcard::to_allocvec(&f).unwrap();
71 let back: Font = postcard::from_bytes(&bytes).unwrap();
72 assert_eq!(back.path, "fonts/body.ttf");
73 assert_eq!(back.size_px, 48);
74 assert!(back.locator.is_none());
76 }
77}