blob: 991da2add9aabbdfaa9f43c0386ebb07f737e480 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
use super::*;
use fancy_regex::{Captures, Regex};
use std::sync::LazyLock;
pub static RE_VARIABLE: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"\{\{(\w+)\}\}").unwrap());
pub fn interpolate_variables(text: &mut String) {
*text = RE_VARIABLE
.replace_all(text, |caps: &Captures<'_>| {
let key = &caps[1];
match key {
"__os__" => env::consts::OS.to_string(),
"__os_distro__" => {
let info = os_info::get();
if env::consts::OS == "linux" {
format!("{info} (linux)")
} else {
info.to_string()
}
}
"__os_family__" => env::consts::FAMILY.to_string(),
"__arch__" => env::consts::ARCH.to_string(),
"__shell__" => SHELL.name.clone(),
"__locale__" => sys_locale::get_locale().unwrap_or_default(),
"__now__" => now(),
"__cwd__" => env::current_dir()
.map(|v| v.display().to_string())
.unwrap_or_default(),
_ => format!("{{{{{key}}}}}"),
}
})
.to_string();
}
|