pub struct FmtToIo<W> {
pub error: Option<Error>,
/* private fields */
}Expand description
Adapter that enables writing through a fmt::Write to an underlying
io::Write.
§Examples
use io_adapters::WriteExtension;
let mut output1 = String::new();
let mut output2 = [0u8; 13]; // Or io::stdout() for example
my_common_writer(&mut output1).unwrap();
my_common_writer(&mut output2.as_mut_slice().write_adapter()).unwrap();
fn my_common_writer(mut output: impl fmt::Write) -> fmt::Result {
write!(output, "Hello, World!")
}
assert_eq!(&output1, "Hello, World!");
assert_eq!(str::from_utf8(&output2).unwrap(), "Hello, World!");§Error handling
Error handling is unpleasant with this adapter due to the fmt::Write
interface returning a stateless fmt::Error rather than an io::Error.
Here is the suggested usage when unwrap doesn’t cut it:
let mut adapter = io::stdout().write_adapter();
match (conv(&mut adapter), adapter.error) {
(Ok(()), None) => {}
(Ok(()), Some(_)) => unreachable!(),
(Err(fmt::Error), None) => { /* Handle format error. */ }
(Err(fmt::Error), Some(e)) => { /* Handle I/O error. */ }
}
fn conv(output: impl fmt::Write) -> fmt::ResultFields§
§error: Option<Error>Trait Implementations§
Auto Trait Implementations§
impl<W> !RefUnwindSafe for FmtToIo<W>
impl<W> !UnwindSafe for FmtToIo<W>
impl<W> Freeze for FmtToIo<W>where
W: Freeze,
impl<W> Send for FmtToIo<W>where
W: Send,
impl<W> Sync for FmtToIo<W>where
W: Sync,
impl<W> Unpin for FmtToIo<W>where
W: Unpin,
impl<W> UnsafeUnpin for FmtToIo<W>where
W: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more