Crates.io | poison-guard |
lib.rs | poison-guard |
version | 0.1.0 |
source | src |
created_at | 2022-06-02 09:28:00.528561 |
updated_at | 2022-06-02 09:28:00.528561 |
description | Utilities for maintaining sane state in the presence of panics and failures. |
homepage | |
repository | |
max_upload_size | |
id | 598761 |
size | 80,180 |
poison-guard
Utilities for maintaining sane state in the presence of panics and failures.
It's a bit like the poison
and with_drop
crates.
Poisoning is a general strategy for keeping state consistent by blocking direct access to state if a previous user did something unexpected with it.
File
, that might become corrupted, and you want to know about it.once_cell::sync::Lazy
or parking_lot::Mutex
) and want to add poisoning to them.Add poison-guard
to your Cargo.toml
:
[dependencies.poison-guard]
version = "0.1.0"
Then wrap your state in a Poison<T>
:
use poison_guard::Poison;
pub struct MyData {
state: Poison<MyState>,
}
When you want to access your state, you can acquire a poison guard:
let mut guard = Poison::on_unwind(&mut my_data.state).unwrap();
do_something_with_state(&mut guard);
If a panic unwinds through a poison guard it'll panic the value, blocking future callers from accessing it. Poisoned values can be recovered, or the original failure can be propagated to those future callers.
For more details, see the documentation.