boots_core/template/
engine.rs

1use std::collections::HashMap;
2
3pub struct TemplateEngine {
4    variables: HashMap<String, String>,
5}
6
7impl TemplateEngine {
8    pub fn new() -> Self {
9        Self {
10            variables: HashMap::new(),
11        }
12    }
13
14    pub fn set(&mut self, key: &str, value: &str) -> &mut Self {
15        self.variables.insert(key.to_string(), value.to_string());
16        self
17    }
18
19    pub fn render(&self, template: &str) -> String {
20        let mut result = template.to_string();
21        for (key, value) in &self.variables {
22            result = result.replace(&format!("{{{{{}}}}}", key), value);
23        }
24        result
25    }
26}
27
28impl Default for TemplateEngine {
29    fn default() -> Self {
30        Self::new()
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn test_render_simple() {
40        let mut engine = TemplateEngine::new();
41        engine.set("name", "test-project");
42
43        let result = engine.render("Project: {{name}}");
44        assert_eq!(result, "Project: test-project");
45    }
46
47    #[test]
48    fn test_render_multiple_variables() {
49        let mut engine = TemplateEngine::new();
50        engine.set("name", "my-app");
51        engine.set("version", "0.1.0");
52
53        let template = "name = \"{{name}}\"\nversion = \"{{version}}\"";
54        let result = engine.render(template);
55
56        assert!(result.contains("name = \"my-app\""));
57        assert!(result.contains("version = \"0.1.0\""));
58    }
59}