diff --git a/server/src/cancellation.rs b/server/src/cancellation.rs new file mode 100644 index 0000000..59f2cb1 --- /dev/null +++ b/server/src/cancellation.rs @@ -0,0 +1,34 @@ +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, Ordering}; + +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(), + } + } +} \ No newline at end of file