use super::action::FailAction;
use super::registry::{clear, set};
use super::scope::FailScope;
pub struct FailGuard {
scope: FailScope,
name: String,
}
impl FailGuard {
pub fn install(name: &str, action: FailAction) -> Self {
Self::arm(FailScope::Any, name, action)
}
pub fn for_node(node_id: u64, name: &str, action: FailAction) -> Self {
Self::arm(FailScope::Node(node_id), name, action)
}
pub fn fail(name: &str, detail: &str) -> Self {
Self::install(name, FailAction::Fail(detail.to_string()))
}
fn arm(scope: FailScope, name: &str, action: FailAction) -> Self {
set(scope, name, action);
Self {
scope,
name: name.to_string(),
}
}
}
impl Drop for FailGuard {
fn drop(&mut self) {
clear(self.scope, &self.name);
}
}