This is why I was so intent on clearing the PR queue. This will effectively invalidate all existing patches, so I wanted to start from a clean slate. We do make one little tweak: we put the default type definitions in their own file and tell rustfmt to keep its grubby mits off of it. We also sort it lexicographically and hopefully will enforce that from here on.
30 lines
806 B
Rust
30 lines
806 B
Rust
/// Converts an arbitrary sequence of bytes to a literal suitable for building
|
|
/// a regular expression.
|
|
pub fn bytes_to_regex(bs: &[u8]) -> String {
|
|
use regex_syntax::is_meta_character;
|
|
use std::fmt::Write;
|
|
|
|
let mut s = String::with_capacity(bs.len());
|
|
for &b in bs {
|
|
if b <= 0x7F && !is_meta_character(b as char) {
|
|
write!(s, r"{}", b as char).unwrap();
|
|
} else {
|
|
write!(s, r"\x{:02x}", b).unwrap();
|
|
}
|
|
}
|
|
s
|
|
}
|
|
|
|
/// Converts arbitrary bytes to a nice string.
|
|
pub fn show_bytes(bs: &[u8]) -> String {
|
|
use std::ascii::escape_default;
|
|
use std::str;
|
|
|
|
let mut nice = String::new();
|
|
for &b in bs {
|
|
let part: Vec<u8> = escape_default(b).collect();
|
|
nice.push_str(str::from_utf8(&part).unwrap());
|
|
}
|
|
nice
|
|
}
|