use std::{borrow::Cow, fmt::Write as WriteStr, io, str};
pub(crate) struct WriteAdapter<'a> {
inner: &'a mut dyn WriteStr,
}
impl<'a> WriteAdapter<'a> {
pub fn new(output: &'a mut dyn WriteStr) -> Self {
Self { inner: output }
}
}
impl io::Write for WriteAdapter<'_> {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
let segment =
str::from_utf8(buf).map_err(|err| io::Error::new(io::ErrorKind::InvalidInput, err))?;
self.inner
.write_str(segment)
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
Ok(buf.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
pub(crate) fn normalize_newlines(s: &str) -> Cow<'_, str> {
if s.contains("\r\n") {
Cow::Owned(s.replace("\r\n", "\n"))
} else {
Cow::Borrowed(s)
}
}