17 lines
460 B
Rust
17 lines
460 B
Rust
use crate::Error;
|
|
|
|
/// Room version identifiers cannot be more than 32 code points.
|
|
const MAX_CODE_POINTS: usize = 32;
|
|
|
|
pub fn validate(s: &str) -> Result<(), Error> {
|
|
if s.is_empty() {
|
|
Err(Error::Empty)
|
|
} else if s.chars().count() > MAX_CODE_POINTS {
|
|
Err(Error::MaximumLengthExceeded)
|
|
} else if !s.chars().all(|c| c.is_alphanumeric() || ".-".contains(c)) {
|
|
Err(Error::InvalidCharacters)
|
|
} else {
|
|
Ok(())
|
|
}
|
|
}
|