boots_core/template/
engine.rs1use 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}