forked from Deuxfleurs/garage
35 lines
623 B
Rust
35 lines
623 B
Rust
|
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;
|
||
|
}
|
||
|
}
|