diff options
Diffstat (limited to 'vendor/anstream/src/fmt.rs')
-rw-r--r-- | vendor/anstream/src/fmt.rs | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/vendor/anstream/src/fmt.rs b/vendor/anstream/src/fmt.rs deleted file mode 100644 index e673c26..0000000 --- a/vendor/anstream/src/fmt.rs +++ /dev/null @@ -1,54 +0,0 @@ -/// A shim which allows a [`std::io::Write`] to be implemented in terms of a [`std::fmt::Write`] -/// -/// This saves off I/O errors. instead of discarding them -pub(crate) struct Adapter<W> -where - W: FnMut(&[u8]) -> std::io::Result<()>, -{ - writer: W, - error: std::io::Result<()>, -} - -impl<W> Adapter<W> -where - W: FnMut(&[u8]) -> std::io::Result<()>, -{ - pub(crate) fn new(writer: W) -> Self { - Adapter { - writer, - error: Ok(()), - } - } - - pub(crate) fn write_fmt(mut self, fmt: std::fmt::Arguments<'_>) -> std::io::Result<()> { - match std::fmt::write(&mut self, fmt) { - Ok(()) => Ok(()), - Err(..) => { - // check if the error came from the underlying `Write` or not - if self.error.is_err() { - self.error - } else { - Err(std::io::Error::new( - std::io::ErrorKind::Other, - "formatter error", - )) - } - } - } - } -} - -impl<W> std::fmt::Write for Adapter<W> -where - W: FnMut(&[u8]) -> std::io::Result<()>, -{ - fn write_str(&mut self, s: &str) -> std::fmt::Result { - match (self.writer)(s.as_bytes()) { - Ok(()) => Ok(()), - Err(e) => { - self.error = Err(e); - Err(std::fmt::Error) - } - } - } -} |