greentic-flow-builder 0.1.0

AI-powered Adaptive Card flow builder with visual graph editor and demo runner
Documentation
//! Parse theme JSON files.

use crate::template::Theme;
use anyhow::Context;

/// Load a theme from a JSON string.
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());
    }
}