scriptplan_lang_utils/
lib.rs1use std::collections::VecDeque;
2use std::sync::Arc;
3
4pub type VarArgs = VecDeque<Arc<String>>;
5
6pub fn has_parameters(args: &VarArgs) -> bool {
7 args.iter().any(|arg| (*arg).contains("$"))
8}
9
10pub fn apply_args(command_args: &VarArgs, substitutions: &VarArgs) -> VarArgs {
11 command_args
12 .iter()
13 .map(|arg| {
14 let arc = arg.clone();
15 let char_result = arc.chars().nth(0);
16 if char_result.map_or_else(|| false, |c| c == '$') && arc.len() >= 2
17 {
18 let index_string_slice = &arc[1..arc.len()];
19 if index_string_slice.chars().all(char::is_numeric) {
20 let index = index_string_slice.parse().unwrap();
21 if index < substitutions.len() {
22 return substitutions[index].clone();
23 } else {
24 panic!("{} was not provided", index);
25 }
26 } else {
27 return arc;
28 }
29 } else {
30 return arc;
31 }
32 })
33 .collect()
34}