minisql/server/src/cancellation.rs
2024-01-28 22:40:41 +01:00

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(),
}
}
}