34 lines
702 B
Rust
34 lines
702 B
Rust
use std::sync::atomic::{AtomicBool, Ordering};
|
|
use std::sync::Arc;
|
|
|
|
pub struct ResetCancelToken {
|
|
is_canceled: Arc<AtomicBool>,
|
|
}
|
|
|
|
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(),
|
|
}
|
|
}
|
|
}
|