cli/functions/
split_func.rs

1//! # split_func
2//!
3//! Split function which takes an environment variable name and a split by string.
4//!
5
6#[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}