pub fn ash_normalize_binding_value(
binding_type: BindingType,
value: &str,
) -> Result<NormalizedBindingValue, AshError>Expand description
Normalize a binding value with universal safety rules.
§Universal Rules (all binding types)
- Leading/trailing whitespace is trimmed
- Control characters (U+0000–U+001F, U+007F) are rejected
- Newlines (
\r,\n) are rejected - NULL bytes are rejected
- Empty values (after trimming) are rejected
- Values exceeding
MAX_BINDING_VALUE_LENGTH(8192 bytes) are rejected
§Type-Specific Rules
- Route: Use
ash_normalize_binding()instead (specialized path/query logic) - Ip: Only ASCII printable characters, no spaces
- User: NFC normalization applied
- All others: Universal rules only
§Example
use ash_core::binding::{ash_normalize_binding_value, BindingType};
let result = ash_normalize_binding_value(BindingType::Ip, " 192.168.1.1 ").unwrap();
assert_eq!(result.value, "192.168.1.1");
assert!(result.was_trimmed);
let result = ash_normalize_binding_value(BindingType::Device, "device_abc123").unwrap();
assert_eq!(result.value, "device_abc123");
assert!(!result.was_trimmed);
// Control characters are rejected
assert!(ash_normalize_binding_value(BindingType::Session, "sess\x00abc").is_err());