@@ -324,6 +324,30 @@ impl<W: Write> BufWriter<W> {
324
324
#[ unstable( feature = "bufwriter_into_raw_parts" , issue = "none" ) ]
325
325
/// Error returned for the buffered data from `BufWriter::into_raw_parts`, when the underlying
326
326
/// writer has previously panicked. Contains the (possibly partly written) buffered data.
327
+ ///
328
+ /// # Example
329
+ ///
330
+ /// ```
331
+ /// #![feature(bufwriter_into_raw_parts)]
332
+ /// use std::io::{self, BufWriter, Write};
333
+ /// use std::panic::{catch_unwind, AssertUnwindSafe};
334
+ ///
335
+ /// struct PanickingWriter;
336
+ /// impl Write for PanickingWriter {
337
+ /// fn write(&mut self, buf: &[u8]) -> io::Result<usize> { panic!() }
338
+ /// fn flush(&mut self) -> io::Result<()> { panic!() }
339
+ /// }
340
+ ///
341
+ /// let mut stream = BufWriter::new(PanickingWriter);
342
+ /// write!(stream, "some data").unwrap();
343
+ /// let result = catch_unwind(AssertUnwindSafe(|| {
344
+ /// stream.flush().unwrap()
345
+ /// }));
346
+ /// assert!(result.is_err());
347
+ /// let (recovered_writer, buffered_data) = stream.into_raw_parts();
348
+ /// assert!(matches!(recovered_writer, PanickingWriter));
349
+ /// assert_eq!(buffered_data.unwrap_err().into_inner(), b"some data");
350
+ /// ```
327
351
pub struct WriterPanicked {
328
352
buf : Vec < u8 > ,
329
353
}
0 commit comments