diff options
author | Alex Auvolat <alex@adnab.me> | 2021-03-10 16:21:56 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-03-10 16:21:56 +0100 |
commit | f319a7d3740ba8b83c9c0eae27edfda1c1d14c03 (patch) | |
tree | efde4606ad33dcf5ad357f82553ad3b07d4a9858 /src/table/crdt/bool.rs | |
parent | 6a3dcf39740cda27e61b93582b6fea66991ec4f2 (diff) | |
download | garage-f319a7d3740ba8b83c9c0eae27edfda1c1d14c03.tar.gz garage-f319a7d3740ba8b83c9c0eae27edfda1c1d14c03.zip |
Refactor model stuff, including cleaner CRDTs
Diffstat (limited to 'src/table/crdt/bool.rs')
-rw-r--r-- | src/table/crdt/bool.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/table/crdt/bool.rs b/src/table/crdt/bool.rs new file mode 100644 index 00000000..1989c92e --- /dev/null +++ b/src/table/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; + } +} |