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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#[cfg(test)]
#[path = "decode_func_test.rs"]
mod decode_func_test;
use crate::environment;
use envmnt;
pub(crate) fn invoke(function_args: &Vec<String>) -> Vec<String> {
if function_args.len() == 0 {
error!("decode expects at least one argument.");
}
let env_key = function_args[0].clone();
let env_value = envmnt::get_or(&env_key, "");
let mut mapped_value = None;
let mut found = false;
let mut skip = true;
for item in function_args.iter() {
if skip {
skip = false;
} else if found {
mapped_value = Some(item.to_string());
break;
} else if item.to_string() == env_value {
found = true;
} else {
skip = true;
}
}
let mut output_value = match mapped_value {
Some(value) => value.clone(),
None => {
if function_args.len() % 2 == 0 && function_args.len() > 1 {
function_args[function_args.len() - 1].to_string()
} else {
env_value.clone()
}
}
};
output_value = environment::expand_value(&output_value);
if output_value.len() > 0 {
vec![output_value]
} else {
vec![]
}
}