use crate::validation::data_errors::DataValidationError;
const TID_CHARS: &str = "234567abcdefghijklmnopqrstuvwxyz";
pub fn validate_tid(value: &str) -> Result<(), DataValidationError> {
if value.is_empty() {
return Err(DataValidationError::StringFormatInvalid {
format: "tid".to_string(),
value: value.to_string(),
reason: "TID cannot be empty".to_string(),
});
}
if value.len() != 13 {
return Err(DataValidationError::StringFormatInvalid {
format: "tid".to_string(),
value: value.to_string(),
reason: format!("TID must be exactly 13 characters, got {}", value.len()),
});
}
for c in value.chars() {
if !TID_CHARS.contains(c) {
return Err(DataValidationError::StringFormatInvalid {
format: "tid".to_string(),
value: value.to_string(),
reason: format!("TID contains invalid character: '{}'", c),
});
}
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_valid_tids() {
let valid = ["3jui7kd54zh2y", "2222222222222", "3333333333333"];
for tid in valid {
assert!(validate_tid(tid).is_ok(), "should be valid: {}", tid);
}
}
#[test]
fn test_invalid_tids() {
let invalid = [
"",
"3jui7kd54zh2", "3jui7kd54zh2yy", "0000000000000", "3jui7kd54zH2y", ];
for tid in invalid {
assert!(validate_tid(tid).is_err(), "should be invalid: {}", tid);
}
}
}