Crate drop_bomb[−][src]
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 enabled,DebugDropBomb
is an always defused and has a zero size.
Structs
DebugDropBomb | |
DropBomb |