6 个版本
使用旧 Rust 2015
0.1.6 |
|
---|---|
0.1.5 | 2020 年 7 月 31 日 |
0.1.4 | 2018 年 8 月 1 日 |
#364 in Rust 模式
103,446 每月下载量
在 108 个crate中使用 (16 直接)
7KB
142 行
drop_bomb
实现线性类型的运行时守卫。有关更多信息,请参阅文档。
lib.rs
:
drop_bomb
drop_bomb
提供了两种类型,DropBomb
和 DebugDropBomb
,除非解除,否则在 drop
时会抛出指定信息的恐慌。这对于构建运行时检查的线性类型非常有用。
例如,可以构建一个 BufWriter
的变体,强制在刷新期间处理错误。
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(())
}
}
注意
- 如果线程已经处于恐慌状态,炸弹不会做任何事情。
- 当
#[cfg(debug_assertions)]
被禁用时,DebugDropBomb
总是解除,并且具有零大小。