about summary refs log tree commit diff
path: root/library/std/src/io/buffered
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2020-12-12 12:34:48 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2020-12-12 12:34:48 +0000
commit7fab9cb8acdd8f2cab1271c0d7dfb268f2048f23 (patch)
treec7c00a269ba7a6f0ed4cca796ffc92c199890b0e /library/std/src/io/buffered
parent381763185eaf0940d3b587c5c3ae54cdd4fbe64e (diff)
downloadrust-7fab9cb8acdd8f2cab1271c0d7dfb268f2048f23.tar.gz
rust-7fab9cb8acdd8f2cab1271c0d7dfb268f2048f23.zip
bufwriter::WriterPanicked: Provide panicking example
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'library/std/src/io/buffered')
-rw-r--r--library/std/src/io/buffered/bufwriter.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/library/std/src/io/buffered/bufwriter.rs b/library/std/src/io/buffered/bufwriter.rs
index a1c5f22d417..94e625b9410 100644
--- a/library/std/src/io/buffered/bufwriter.rs
+++ b/library/std/src/io/buffered/bufwriter.rs
@@ -324,6 +324,30 @@ impl<W: Write> BufWriter<W> {
 #[unstable(feature = "bufwriter_into_raw_parts", issue = "none")]
 /// Error returned for the buffered data from `BufWriter::into_raw_parts`, when the underlying
 /// writer has previously panicked.  Contains the (possibly partly written) buffered data.
+///
+/// # Example
+///
+/// ```
+/// #![feature(bufwriter_into_raw_parts)]
+/// use std::io::{self, BufWriter, Write};
+/// use std::panic::{catch_unwind, AssertUnwindSafe};
+///
+/// struct PanickingWriter;
+/// impl Write for PanickingWriter {
+///   fn write(&mut self, buf: &[u8]) -> io::Result<usize> { panic!() }
+///   fn flush(&mut self) -> io::Result<()> { panic!() }
+/// }
+///
+/// let mut stream = BufWriter::new(PanickingWriter);
+/// write!(stream, "some data").unwrap();
+/// let result = catch_unwind(AssertUnwindSafe(|| {
+///     stream.flush().unwrap()
+/// }));
+/// assert!(result.is_err());
+/// let (recovered_writer, buffered_data) = stream.into_raw_parts();
+/// assert!(matches!(recovered_writer, PanickingWriter));
+/// assert_eq!(buffered_data.unwrap_err().into_inner(), b"some data");
+/// ```
 pub struct WriterPanicked {
     buf: Vec<u8>,
 }