aboutsummaryrefslogtreecommitdiff
path: root/src/util/crdt/bool.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/crdt/bool.rs')
-rw-r--r--src/util/crdt/bool.rs34
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;
+ }
+}