blob: 397e8cdd66bbec5273694c8398a63e56e79d87fa [file] [log] [blame]
#[doc(hidden)]
pub fn quote_bytes_to(bytes: &[u8], buf: &mut String) {
for &c in bytes {
match c {
b'\n' => buf.push_str(r"\n"),
b'\r' => buf.push_str(r"\r"),
b'\t' => buf.push_str(r"\t"),
b'\'' => buf.push_str("\\\'"),
b'"' => buf.push_str("\\\""),
b'\\' => buf.push_str(r"\\"),
b'\x20'..=b'\x7e' => buf.push(c as char),
_ => {
buf.push('\\');
buf.push((b'0' + (c >> 6)) as char);
buf.push((b'0' + ((c >> 3) & 7)) as char);
buf.push((b'0' + (c & 7)) as char);
}
}
}
}
pub(crate) fn quote_escape_bytes_to(bytes: &[u8], buf: &mut String) {
buf.push('"');
quote_bytes_to(bytes, buf);
buf.push('"');
}
#[doc(hidden)]
pub fn quote_escape_bytes(bytes: &[u8]) -> String {
let mut r = String::new();
quote_escape_bytes_to(bytes, &mut r);
r
}
pub(crate) fn print_str_to(s: &str, buf: &mut String) {
// TODO: keep printable Unicode
quote_escape_bytes_to(s.as_bytes(), buf);
}