1 个不稳定版本
0.1.0 | 2022年6月2日 |
---|
#1191 在 Rust 模式
每月下载量 156
52KB
983 行
poison-guard
在恐慌和失败存在的情况下维持合理状态的工具。它有点像 poison
和 with_drop
仓库。
什么是中毒?
中毒是一种通用策略,通过阻止对状态的直接访问来保持状态的一致性,如果先前的用户对它做了意想不到的操作。
用例
- 你有一些外部资源,如
File
,可能会损坏,你希望知道。 - 你在跨线程共享一些状态,并且希望在共享时传播任何恐慌。
- 你正在使用非中毒容器(如
once_cell::sync::Lazy
或parking_lot::Mutex
)并想向它们添加中毒功能。
入门
将 poison-guard
添加到你的 Cargo.toml
[dependencies.poison-guard]
version = "0.1.0"
然后使用 Poison<T>
包装你的状态
use poison_guard::Poison;
pub struct MyData {
state: Poison<MyState>,
}
当你想要访问你的状态时,你可以获取一个中毒防护器
let mut guard = Poison::on_unwind(&mut my_data.state).unwrap();
do_something_with_state(&mut guard);
如果恐慌通过一个中毒防护器回滚,它将使值恐慌,阻止未来的调用者访问它。中毒的值可以被恢复,或者原始的失败可以被传播给未来的调用者。
更多详情,请参阅文档。