cli/functions/
split_func.rs1#[cfg(test)]
7#[path = "split_func_test.rs"]
8mod split_func_test;
9
10pub(crate) fn invoke(function_args: &Vec<String>) -> Vec<String> {
11 let args_count = function_args.len();
12 if args_count < 2 || args_count > 3 {
13 error!("split expects two or three arguments (environment variable name, split by character, optional mode: default, remove-empty)");
14 }
15
16 let env_key = function_args[0].clone();
17 let split_by = function_args[1].clone();
18 let mode_name = if args_count == 3 {
19 &function_args[2]
20 } else {
21 "default"
22 };
23 let remove_empty = mode_name == "remove-empty";
24
25 if split_by.len() != 1 {
26 error!("split expects a single character separator");
27 }
28
29 let split_by_char = split_by.chars().next().unwrap();
30
31 let value = envmnt::get_or(&env_key, "");
32
33 if value.len() > 0 {
34 let splitted = value.split(split_by_char);
35
36 splitted
37 .map(|str_value| str_value.to_string())
38 .filter(|string_value| {
39 if remove_empty && string_value.is_empty() {
40 false
41 } else {
42 true
43 }
44 })
45 .collect()
46 } else {
47 vec![]
48 }
49}