use tracing::{trace, warn};
use crate::{
validation::{is_reserved_name, is_valid_name_chars},
Result,
SentinelError,
};
pub fn validate_collection_name(name: &str) -> Result<()> {
use tracing::debug;
debug!("Validating collection name: {}", name);
if name.is_empty() {
debug!("Collection name is empty");
return Err(SentinelError::InvalidCollectionName {
name: name.to_owned(),
});
}
if name.starts_with('.') && name != ".keys" {
debug!("Collection name starts with dot and is not .keys: {}", name);
return Err(SentinelError::InvalidCollectionName {
name: name.to_owned(),
});
}
if name.ends_with('.') || name.ends_with(' ') {
warn!("Collection name ends with dot or space: {}", name);
return Err(SentinelError::InvalidCollectionName {
name: name.to_owned(),
});
}
if !is_valid_name_chars(name) {
debug!("Collection name contains invalid characters: {}", name);
return Err(SentinelError::InvalidCollectionName {
name: name.to_owned(),
});
}
if is_reserved_name(name) {
debug!("Collection name is a reserved name: {}", name);
return Err(SentinelError::InvalidCollectionName {
name: name.to_owned(),
});
}
trace!("Collection name '{}' is valid", name);
Ok(())
}