Skip to main content

ishou_render/
rust.rs

1//! Rust renderer — emits a `pub const` module for consumers that want
2//! compile-time colors (e.g., TUI apps not wanting to deserialize JSON).
3
4use ishou_tokens::TokenSet;
5
6pub fn render(t: &TokenSet) -> String {
7    let mut out = String::from(
8        "// ishou — pleme-io design tokens (generated)\n\
9         // Use ishou-tokens::TokenSet for runtime; this file is for\n\
10         // consumers that want const-propagated values.\n\n\
11         #[allow(dead_code)]\n\
12         pub mod color {\n    #[derive(Clone, Copy, Debug)]\n    pub struct Rgb(pub u8, pub u8, pub u8);\n\n",
13    );
14    for (k, v) in t.color.entries() {
15        out.push_str(&format!(
16            "    pub const {}: Rgb = Rgb({}, {}, {});\n",
17            k.to_uppercase(),
18            v.r,
19            v.g,
20            v.b
21        ));
22    }
23    out.push_str("}\n\npub mod spacing {\n");
24    for (k, v) in t.spacing.pairs() {
25        out.push_str(&format!("    pub const SPACE_{}: u16 = {v};\n", k));
26    }
27    out.push_str("}\n\npub mod radius {\n");
28    for (k, v) in t.radius.pairs() {
29        out.push_str(&format!("    pub const RADIUS_{}: u16 = {v};\n", k.to_uppercase()));
30    }
31    out.push_str("}\n");
32    out
33}