use crate::template::Theme;
use anyhow::Context;
pub fn load_theme_from_str(json_str: &str) -> anyhow::Result<Theme> {
serde_json::from_str(json_str).context("parsing theme JSON")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_load_minimal_theme() {
let json = r#"{
"name": "test",
"display_name": "Test",
"tokens": {}
}"#;
let theme = load_theme_from_str(json).unwrap();
assert_eq!(theme.name, "test");
assert_eq!(theme.display_name, "Test");
}
#[test]
fn test_load_theme_with_tokens() {
let json = r##"{
"name": "bright",
"display_name": "Bright",
"tokens": {
"color_primary": "#ff0000",
"spacing_md": 12
}
}"##;
let theme = load_theme_from_str(json).unwrap();
assert_eq!(theme.tokens["color_primary"], "#ff0000");
assert_eq!(theme.tokens["spacing_md"], 12);
}
#[test]
fn test_load_invalid_theme_fails() {
let json = r#"{ "bad": "json" "#;
assert!(load_theme_from_str(json).is_err());
}
}