use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct GeneratedFile {
pub path: PathBuf,
pub content: String,
pub source_rule: String,
pub content_hash: String,
}
impl GeneratedFile {
pub fn new(path: PathBuf, content: String, source_rule: String) -> Self {
use sha2::{Digest, Sha256};
let mut hasher = Sha256::new();
hasher.update(&content);
let content_hash = format!("{:x}", hasher.finalize());
Self {
path,
content,
source_rule,
content_hash,
}
}
pub fn render_path(
&self, bindings: &HashMap<String, String>,
) -> crate::codegen_lib::Result<PathBuf> {
let path_str = self.path.to_string_lossy().to_string();
let rendered = bindings.iter().fold(path_str, |acc, (key, value)| {
acc.replace(&format!("{{{{{}}}}}", key), value)
});
Ok(PathBuf::from(rendered))
}
}