Skip to main content

auto_commit_rs/
interpolation.rs

1use crate::config::AppConfig;
2use regex_lite::Regex;
3
4/// Interpolate `$VARIABLE_NAME` patterns in a string using environment variables.
5/// Before interpolation, ACR_ config values are temporarily set as env vars.
6pub fn interpolate(template: &str, cfg: &AppConfig) -> String {
7    // Temporarily set ACR_ env vars from config so $ACR_MODEL etc. resolve
8    let env_pairs = [
9        ("ACR_PROVIDER", &cfg.provider),
10        ("ACR_MODEL", &cfg.model),
11        ("ACR_API_KEY", &cfg.api_key),
12        ("ACR_LOCALE", &cfg.locale),
13    ];
14    for (key, val) in &env_pairs {
15        std::env::set_var(key, val);
16    }
17
18    let re = Regex::new(r"\$([A-Za-z_][A-Za-z0-9_]*)").unwrap();
19    let result = re.replace_all(template, |caps: &regex_lite::Captures| {
20        let var_name = &caps[1];
21        std::env::var(var_name).unwrap_or_default()
22    });
23
24    result.into_owned()
25}