diff options
Diffstat (limited to 'crates/regex/src/util.rs')
-rw-r--r-- | crates/regex/src/util.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/crates/regex/src/util.rs b/crates/regex/src/util.rs new file mode 100644 index 00000000..71b4ad7e --- /dev/null +++ b/crates/regex/src/util.rs @@ -0,0 +1,29 @@ +/// 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 +} |