use crate::common::print_formatted_error::print_formatted_error;
use regex::Regex;
pub fn validate_secret_field_name(
new_value: &str,
default_value: &str,
already_used_values: &Vec<String>,
) -> Result<(), &'static str> {
let regex_start_result = Regex::new(r"^[a-zA-Z][\w ]*$");
let regex_name_result = Regex::new(r"^[\w]*$");
let new_value_trimmed_value = new_value.to_lowercase().trim().to_string();
let default_value_trimmed_value = default_value.to_lowercase().trim().to_string();
let regex_start = match regex_start_result {
Ok(regex) => regex,
Err(_e) => {
print_formatted_error("Regular expression error checking the beginning of a name");
std::process::exit(1);
}
};
let regex_name = match regex_name_result {
Ok(regex) => regex,
Err(_e) => {
print_formatted_error("Regular expression name check error");
std::process::exit(1);
}
};
if new_value_trimmed_value.len() < 2 {
return Err("The field name must be at least 2 character long.");
}
if !regex_name.is_match(&new_value_trimmed_value) {
return Err("For field name only only a-z, 0-9 and '_' are allowed.");
}
if !regex_start.is_match(&new_value_trimmed_value) {
return Err("Field name should start with a letter.");
}
if already_used_values.contains(&new_value_trimmed_value.to_string())
&& new_value_trimmed_value != default_value_trimmed_value
{
return Err("The field name must be unique.");
}
Ok(())
}