use crate::client::transport::limits::REQUEST_ID_MAX;
pub fn sanitize_request_id(raw: &str) -> String {
let cleaned: String = raw
.chars()
.filter(|c| c.is_ascii_graphic() || *c == ' ')
.take(REQUEST_ID_MAX)
.collect();
if cleaned.is_empty() {
String::new()
} else {
cleaned
}
}
pub fn has_usable_id(sanitized: &str) -> bool {
!sanitized.is_empty()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn control_chars_replaced() {
let raw = "abc\x01def\nghi";
let s = sanitize_request_id(raw);
assert!(!s.contains('\x01'));
assert!(!s.contains('\n'));
}
#[test]
fn truncated_to_max() {
let raw = "a".repeat(500);
let s = sanitize_request_id(&raw);
assert_eq!(s.len(), REQUEST_ID_MAX);
}
#[test]
fn empty_when_no_printable() {
let s = sanitize_request_id("\x01\x02");
assert!(!has_usable_id(&s));
}
}