pub const MAG_REF_001_SYMBOL_NOT_FOUND: &str = "MAG-REF-001";
pub const MAG_REF_002_AMBIGUOUS_SYMBOL: &str = "MAG-REF-002";
pub const MAG_REF_003_INVALID_SPAN: &str = "MAG-REF-003";
pub const MAG_QRY_001_INVALID_QUERY: &str = "MAG-QRY-001";
pub const MAG_QRY_002_FILE_NOT_FOUND: &str = "MAG-QRY-002";
pub const MAG_QRY_003_INVALID_PARAMS: &str = "MAG-QRY-003";
pub const MAG_IO_001_FILE_NOT_FOUND: &str = "MAG-IO-001";
pub const MAG_IO_002_PERMISSION_DENIED: &str = "MAG-IO-002";
pub const MAG_IO_003_INVALID_PATH: &str = "MAG-IO-003";
pub const MAG_V_001_CHECKSUM_MISMATCH: &str = "MAG-V-001";
pub const MAG_V_002_SPAN_INVALID: &str = "MAG-V-002";
pub const MAG_V_003_DB_CORRUPTION: &str = "MAG-V-003";
pub const ERROR_CODE_DOCUMENTATION: &str = "Error code documentation available in source";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_codes_are_unique() {
let codes = vec![
MAG_REF_001_SYMBOL_NOT_FOUND,
MAG_REF_002_AMBIGUOUS_SYMBOL,
MAG_REF_003_INVALID_SPAN,
MAG_QRY_001_INVALID_QUERY,
MAG_QRY_002_FILE_NOT_FOUND,
MAG_QRY_003_INVALID_PARAMS,
MAG_IO_001_FILE_NOT_FOUND,
MAG_IO_002_PERMISSION_DENIED,
MAG_IO_003_INVALID_PATH,
MAG_V_001_CHECKSUM_MISMATCH,
MAG_V_002_SPAN_INVALID,
MAG_V_003_DB_CORRUPTION,
];
let mut unique = std::collections::HashSet::new();
for code in codes {
assert!(
unique.insert(code),
"Duplicate error code detected: {}",
code
);
}
}
#[test]
fn test_error_code_format() {
let codes = vec![
MAG_REF_001_SYMBOL_NOT_FOUND,
MAG_REF_002_AMBIGUOUS_SYMBOL,
MAG_REF_003_INVALID_SPAN,
MAG_QRY_001_INVALID_QUERY,
MAG_QRY_002_FILE_NOT_FOUND,
MAG_QRY_003_INVALID_PARAMS,
MAG_IO_001_FILE_NOT_FOUND,
MAG_IO_002_PERMISSION_DENIED,
MAG_IO_003_INVALID_PATH,
MAG_V_001_CHECKSUM_MISMATCH,
MAG_V_002_SPAN_INVALID,
MAG_V_003_DB_CORRUPTION,
];
for code in codes {
assert!(
code.starts_with("MAG-"),
"Error code must start with 'MAG-': {}",
code
);
let parts: Vec<&str> = code.split('-').collect();
assert_eq!(parts.len(), 3, "Error code must have 3 parts: {}", code);
assert!(
parts[1].len() >= 1 && parts[1].len() <= 3,
"Category must be 1-3 chars: {}",
code
);
assert!(parts[1].chars().all(|c| c.is_ascii_uppercase()));
assert_eq!(parts[2].len(), 3, "Number must be 3 digits: {}", code);
assert!(parts[2].chars().all(|c| c.is_ascii_digit()));
}
}
}