6 releases
Uses old Rust 2015
0.1.6 |
|
---|---|
0.1.5 | Jul 31, 2020 |
0.1.4 | Aug 1, 2018 |
#340 in Rust patterns
127,171 downloads per month
Used in 114 crates
(16 directly)
7KB
142 lines
drop_bomb
A runtime guard for (protecting your precious bodily fluids) implementing linear types.
See the docs for more.
lib.rs
:
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.