Expand description
§drop_bomb
drop_bomb
provides two types, DropBomb
and DebugDropBomb
,
which panic in drop
with a specified message unless
defused. This is useful as a building-block for runtime-checked
linear types.
For example, one can build a variant of BufWriter
which enforces
handling of errors during flush.
extern crate drop_bomb;
use std::io::{Write, BufWriter, Result};
use drop_bomb::DropBomb;
struct CheckedBufWriter<W: Write> {
inner: BufWriter<W>,
bomb: DropBomb,
}
impl<W: Write> CheckedBufWriter<W> {
fn new(inner: BufWriter<W>) -> CheckedBufWriter<W> {
let bomb = DropBomb::new(
"CheckedBufWriter must be explicitly closed \
to handle potential errors on flush"
);
CheckedBufWriter { inner, bomb }
}
fn close(mut self) -> Result<()> {
self.bomb.defuse();
self.inner.flush()?;
Ok(())
}
}
§Notes:
- Bombs do nothing if a thread is already panicking.
- When
#[cfg(debug_assertions)]
is disabled,DebugDropBomb
is always defused and has a zero size.