# #防护 #状态 #失败 #恐慌 #存在 #合理

poison-guard

在恐慌和失败存在的情况下维持合理状态的工具

1 个不稳定版本

0.1.0 2022年6月2日

#1191Rust 模式

Download history 13/week @ 2024-03-29 3/week @ 2024-04-05

每月下载量 156

MIT/Apache

52KB
983

poison-guard

在恐慌和失败存在的情况下维持合理状态的工具。它有点像 poisonwith_drop 仓库。

什么是中毒?

中毒是一种通用策略,通过阻止对状态的直接访问来保持状态的一致性,如果先前的用户对它做了意想不到的操作。

用例

  • 你有一些外部资源,如 File,可能会损坏,你希望知道。
  • 你在跨线程共享一些状态,并且希望在共享时传播任何恐慌。
  • 你正在使用非中毒容器(如 once_cell::sync::Lazyparking_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);

如果恐慌通过一个中毒防护器回滚,它将使值恐慌,阻止未来的调用者访问它。中毒的值可以被恢复,或者原始的失败可以被传播给未来的调用者。

更多详情,请参阅文档。

无运行时依赖