40 lines
769 B
Rust
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());
|
|
}
|
|
}
|