anda_config/
template.rs

1use crate::context::hcl_context;
2use hcl::eval::Evaluate;
3use hcl::template::Template;
4use std::str::FromStr;
5
6/// Parse an HCL template.
7///
8/// # Errors
9/// - cannot parse template
10/// - cannot evaluate template
11pub fn parse_template(template: &str) -> Result<String, String> {
12    let template = Template::from_str(template).map_err(|e| e.to_string())?;
13    let ctx = hcl_context();
14    let value = template.evaluate(&ctx).map_err(|e| e.to_string())?;
15    Ok(value)
16}
17
18#[allow(clippy::missing_panics_doc)]
19#[cfg(test)]
20mod tests {
21    #[test]
22    fn test_templ() {
23        let template = "hello ${env.USER}";
24        let result = crate::template::parse_template(template).unwrap();
25        println!("{result}");
26        // get current username
27        let username = std::env::var("USER").unwrap();
28        assert_eq!(result, format!("hello {username}"));
29    }
30}