use std::fmt;
#[derive(Debug, Eq, PartialEq, Hash)]
pub struct EscapeDefaultFmt<'a> {
inner: &'a [u8],
}
impl<'a> fmt::Display for EscapeDefaultFmt<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use std::ascii;
use std::char;
for ch in self.inner {
for esc_ch in ascii::escape_default(*ch) {
write!(f, "{}", unsafe { char::from_u32_unchecked(esc_ch as u32) })?;
}
}
Ok(())
}
}
pub fn format_escape_default<'a>(i: &'a [u8]) -> EscapeDefaultFmt<'a> {
EscapeDefaultFmt { inner: i }
}
#[cfg(test)]
mod tests {
use super::format_escape_default;
#[test]
fn smoke() {
assert_eq!(format!("{}", format_escape_default(b"\t\r\ntest\\")), "\\t\\r\\ntest\\\\");
}
}