From 7b79dd69b47dac7cbea93373ade0dd2b2b1fc9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jind=C5=99ich=20Moravec?= Date: Wed, 24 Jan 2024 23:25:02 +0100 Subject: [PATCH] feat: add resettable cancellation token --- server/src/cancellation.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 server/src/cancellation.rs 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