/// 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
}
