support_kit/boilerplate/
boilerplate_template.rs

1use std::path::PathBuf;
2
3use minijinja::Environment;
4
5use crate::BoilerplateError;
6
7use super::BoilerplateContext;
8
9#[derive(Debug, Clone, bon::Builder)]
10pub struct BoilerplateTemplate {
11    #[builder(into, default)]
12    path: PathBuf,
13    #[builder(into)]
14    file_name: String,
15    #[builder(default, into)]
16    source: String,
17}
18
19impl BoilerplateTemplate {
20    pub fn key(&self) -> String {
21        self.file().display().to_string()
22    }
23
24    pub fn file(&self) -> PathBuf {
25        self.path.join(&self.file_name)
26    }
27
28    pub fn write(&self, config: &BoilerplateContext) -> Result<(), BoilerplateError> {
29        let mut env = Environment::new();
30        let key = self.key();
31
32        env.add_template(&key, &self.source)?;
33
34        std::fs::create_dir_all(&self.path)?;
35        std::fs::write(self.file(), env.get_template(&key)?.render(&config)?)?;
36
37        Ok(())
38    }
39}