use std::fmt::{
self,
Write,
};
use crate::text::log_escape::is_log_unsafe_character;
pub(crate) struct LogEscapeWriter<'a, W: Write + ?Sized> {
output: &'a mut W,
}
impl<'a, W: Write + ?Sized> LogEscapeWriter<'a, W> {
#[inline(always)]
pub(crate) const fn new(output: &'a mut W) -> Self {
Self { output }
}
}
impl<W: Write + ?Sized> Write for LogEscapeWriter<'_, W> {
fn write_str(&mut self, value: &str) -> fmt::Result {
for character in value.chars() {
if is_log_unsafe_character(character) {
for escaped in character.escape_debug() {
self.output.write_char(escaped)?;
}
} else {
self.output.write_char(character)?;
}
}
Ok(())
}
}