support_kit/boilerplate/
boilerplate_template.rs1use 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}