use quincy::error::ConfigError;
use quincy::{QuincyError, Result};
use regex::Regex;
use std::sync::OnceLock;
static NAME_RE: OnceLock<Regex> = OnceLock::new();
fn name_re() -> &'static Regex {
NAME_RE.get_or_init(|| Regex::new(r"^[A-Za-z0-9_-]+$").expect("valid name regex"))
}
pub fn is_valid_config_name(name: &str) -> bool {
!name.is_empty() && name_re().is_match(name)
}
pub fn validate_config_name(name: &str) -> Result<()> {
is_valid_config_name(name).then_some(()).ok_or_else(|| {
QuincyError::Config(ConfigError::InvalidValue {
field: "config_name".to_string(),
reason: "contains unsupported characters (allowed: letters, digits, '-', '_')"
.to_string(),
})
})
}
pub fn validate_instance_name(name: &str) -> Result<()> {
is_valid_config_name(name).then_some(()).ok_or_else(|| {
QuincyError::Config(ConfigError::InvalidValue {
field: "instance_name".to_string(),
reason: "contains unsupported characters (allowed: letters, digits, '-', '_')"
.to_string(),
})
})
}