1 use crate::sync::CancellationToken; 2 3 /// A wrapper for cancellation token which automatically cancels 4 /// it on drop. It is created using `drop_guard` method on the `CancellationToken`. 5 #[derive(Debug)] 6 pub struct DropGuard { 7 pub(super) inner: Option<CancellationToken>, 8 } 9 10 impl DropGuard { 11 /// Returns stored cancellation token and removes this drop guard instance 12 /// (i.e. it will no longer cancel token). Other guards for this token 13 /// are not affected. disarm(mut self) -> CancellationToken14 pub fn disarm(mut self) -> CancellationToken { 15 self.inner 16 .take() 17 .expect("`inner` can be only None in a destructor") 18 } 19 } 20 21 impl Drop for DropGuard { drop(&mut self)22 fn drop(&mut self) { 23 if let Some(inner) = &self.inner { 24 inner.cancel(); 25 } 26 } 27 } 28