use super::CancellationToken;
#[derive(Debug)]
pub struct DropGuard {
pub(super) token: CancellationToken,
pub(super) armed: bool,
}
impl DropGuard {
pub fn token(&self) -> &CancellationToken {
&self.token
}
pub fn disarm(mut self) -> CancellationToken {
self.armed = false;
self.token.clone()
}
}
impl Drop for DropGuard {
fn drop(&mut self) {
if self.armed {
self.token.cancel();
}
}
}
#[derive(Debug)]
pub struct DropGuardRef<'a> {
pub(super) token: &'a CancellationToken,
pub(super) armed: bool,
}
impl<'a> DropGuardRef<'a> {
pub fn token(&self) -> &CancellationToken {
self.token
}
pub fn disarm(mut self) -> &'a CancellationToken {
self.armed = false;
self.token
}
}
impl Drop for DropGuardRef<'_> {
fn drop(&mut self) {
if self.armed {
self.token.cancel();
}
}
}