drop-guard.rs/src/ext/triggered.rs

40 lines
769 B
Rust

use triggered::Trigger;
use crate::DropFn;
pub struct TriggerOnDrop;
impl DropFn for TriggerOnDrop {
type Data = Trigger;
fn on_drop(self, data: Self::Data) {
data.trigger();
}
}
crate::macros::ext_trait!(TriggerExt: Sealed for Trigger {
/// Wraps the trigger in a [`DropGuard`](crate::DropGuard) that will call [`Trigger::trigger`] on drop.
fn trigger_on_drop -> TriggerOnDrop;
});
#[cfg(test)]
mod tests {
use triggered::trigger;
use crate::ext::triggered::TriggerExt;
#[test]
fn test() {
let (tx, rx) = trigger();
assert!(!rx.is_triggered());
{
let _guard = tx.trigger_on_drop();
assert!(!rx.is_triggered());
}
assert!(rx.is_triggered());
}
}