use crate::consts::MAX_KEY_SPACE_SIZE;
const VALID_CHARACTERS: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
pub fn is_valid_keyspace_name(s: &str) -> bool {
if s.is_empty() {
return false;
}
if s.len() > MAX_KEY_SPACE_SIZE {
return false;
}
if u8::try_from(s.len()).is_err() {
return false;
}
s.chars().all(|c| VALID_CHARACTERS.contains(c))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_valid_keyspace_name() {
assert!(is_valid_keyspace_name("valid_keyspace_name"));
assert!(is_valid_keyspace_name("ValidKeyspaceName"));
assert!(is_valid_keyspace_name("valid-keyspace-name"));
assert!(is_valid_keyspace_name("ValidKeyspaceName123"));
assert!(is_valid_keyspace_name("valid_keyspace-123"));
let max_length_name: String = "a".repeat(MAX_KEY_SPACE_SIZE);
assert!(is_valid_keyspace_name(&max_length_name));
}
#[test]
fn test_invalid_keyspace_name() {
assert!(!is_valid_keyspace_name(""));
let too_long_name: String = "a".repeat(MAX_KEY_SPACE_SIZE + 1);
assert!(!is_valid_keyspace_name(&too_long_name));
assert!(!is_valid_keyspace_name("invalid keyspace name!"));
assert!(!is_valid_keyspace_name("invalid$keyspace"));
assert!(!is_valid_keyspace_name("invalid#keyspace"));
let invalid_length_name: String = "a".repeat(256);
assert!(!is_valid_keyspace_name(&invalid_length_name));
}
#[test]
fn test_keyspace_name_edge_cases() {
assert!(is_valid_keyspace_name("a"));
assert!(!is_valid_keyspace_name("@"));
}
}