use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; pub struct ResetCancelToken { is_canceled: Arc, } impl ResetCancelToken { pub fn new() -> Self { Self { is_canceled: Arc::new(AtomicBool::new(false)), } } pub fn is_canceled(&self) -> bool { self.is_canceled.load(Ordering::SeqCst) } pub fn cancel(&self) { self.is_canceled.store(true, Ordering::SeqCst); } pub fn reset(&self) { self.is_canceled.store(false, Ordering::SeqCst); } } impl Clone for ResetCancelToken { fn clone(&self) -> Self { Self { is_canceled: self.is_canceled.clone(), } } }