dotm-rs 0.2.1

Dotfile manager with composable roles, templates, and host-specific overrides
Documentation
use dotm::template::render_template;
use toml::map::Map;
use toml::Value;

fn vars_from_str(s: &str) -> Map<String, Value> {
    let val: Value = toml::from_str(s).unwrap();
    val.as_table().unwrap().clone()
}

#[test]
fn render_simple_variable() {
    let template = "color={{ color }}";
    let vars = vars_from_str(r#"color = "blue""#);
    let result = render_template(template, &vars).unwrap();
    assert_eq!(result, "color=blue");
}

#[test]
fn render_nested_variable() {
    let template = "resolution={{ display.resolution }}";
    let vars = vars_from_str(
        r#"
[display]
resolution = "3840x2160"
"#,
    );
    let result = render_template(template, &vars).unwrap();
    assert_eq!(result, "resolution=3840x2160");
}

#[test]
fn render_conditional() {
    let template = r#"{% if gpu.vendor == "amd" %}amd=true{% else %}amd=false{% endif %}"#;
    let vars = vars_from_str(
        r#"
[gpu]
vendor = "amd"
"#,
    );
    let result = render_template(template, &vars).unwrap();
    assert_eq!(result, "amd=true");
}

#[test]
fn render_missing_variable_errors() {
    let template = "value={{ nonexistent }}";
    let vars = Map::new();
    let result = render_template(template, &vars);
    assert!(result.is_err());
}