diff options
Diffstat (limited to 'src/util/crdt/bool.rs')
-rw-r--r-- | src/util/crdt/bool.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/util/crdt/bool.rs b/src/util/crdt/bool.rs new file mode 100644 index 00000000..53af8f82 --- /dev/null +++ b/src/util/crdt/bool.rs @@ -0,0 +1,34 @@ +use serde::{Deserialize, Serialize}; + +use crate::crdt::crdt::*; + +/// Boolean, where `true` is an absorbing state +#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq)] +pub struct Bool(bool); + +impl Bool { + /// Create a new boolean with the specified value + pub fn new(b: bool) -> Self { + Self(b) + } + /// Set the boolean to true + pub fn set(&mut self) { + self.0 = true; + } + /// Get the boolean value + pub fn get(&self) -> bool { + self.0 + } +} + +impl From<bool> for Bool { + fn from(b: bool) -> Bool { + Bool::new(b) + } +} + +impl Crdt for Bool { + fn merge(&mut self, other: &Self) { + self.0 = self.0 || other.0; + } +} |