mod buf_duplexer;
mod buf_reader_line_writer;
mod buf_reader_line_writer_shim;
use std::io::Error;
use std::{error, fmt};
pub use buf_duplexer::BufDuplexer;
pub use buf_reader_line_writer::BufReaderLineWriter;
use buf_reader_line_writer_shim::BufReaderLineWriterShim;
pub(super) const DEFAULT_BUF_SIZE: usize = 8 * 1024;
#[derive(Debug)]
pub struct IntoInnerError<W>(W, Error);
impl<W> IntoInnerError<W> {
fn new(writer: W, error: Error) -> Self {
Self(writer, error)
}
fn new_wrapped<W2>(self, f: impl FnOnce(W) -> W2) -> IntoInnerError<W2> {
let Self(writer, error) = self;
IntoInnerError::new(f(writer), error)
}
pub fn error(&self) -> &Error {
&self.1
}
pub fn into_inner(self) -> W {
self.0
}
}
impl<W> From<IntoInnerError<W>> for Error {
fn from(iie: IntoInnerError<W>) -> Self {
iie.1
}
}
impl<W: Send + fmt::Debug> error::Error for IntoInnerError<W> {
#[allow(deprecated, deprecated_in_future)]
fn description(&self) -> &str {
error::Error::description(self.error())
}
}
impl<W> fmt::Display for IntoInnerError<W> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.error().fmt(f)
}
}