rivet_cli/config/
resolve.rs1pub fn resolve_vars(
4 input: &str,
5 params: Option<&std::collections::HashMap<String, String>>,
6) -> String {
7 let mut result = input.to_string();
8 while let Some(start) = result.find("${") {
9 if let Some(end) = result[start..].find('}') {
10 let var_name = &result[start + 2..start + end];
11 let value = params
12 .and_then(|p| p.get(var_name).cloned())
13 .unwrap_or_else(|| std::env::var(var_name).unwrap_or_default());
14 result = format!(
15 "{}{}{}",
16 &result[..start],
17 value,
18 &result[start + end + 1..]
19 );
20 } else {
21 break;
22 }
23 }
24 result
25}
26
27pub fn resolve_env_vars(input: &str) -> String {
29 resolve_vars(input, None)
30}
31
32pub fn parse_file_size(s: &str) -> crate::error::Result<u64> {
34 let s = s.trim().to_uppercase();
35 let (num, multiplier) = if let Some(n) = s.strip_suffix("GB") {
36 (n.trim(), 1024u64 * 1024 * 1024)
37 } else if let Some(n) = s.strip_suffix("MB") {
38 (n.trim(), 1024u64 * 1024)
39 } else if let Some(n) = s.strip_suffix("KB") {
40 (n.trim(), 1024u64)
41 } else if let Some(n) = s.strip_suffix('B') {
42 (n.trim(), 1u64)
43 } else {
44 (s.as_str(), 1u64)
45 };
46 let value: f64 = num
47 .parse()
48 .map_err(|_| anyhow::anyhow!("invalid file size: '{}'", s))?;
49 Ok((value * multiplier as f64) as u64)
50}