Skip to main content

ash_normalize_binding_value

Function ash_normalize_binding_value 

Source
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)

  1. Leading/trailing whitespace is trimmed
  2. Control characters (U+0000–U+001F, U+007F) are rejected
  3. Newlines (\r, \n) are rejected
  4. NULL bytes are rejected
  5. Empty values (after trimming) are rejected
  6. 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());