summaryrefslogtreecommitdiffstats
path: root/crates/regex/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/regex/src/util.rs')
-rw-r--r--crates/regex/src/util.rs29
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
+}