New buckets for 0.6.0: documentation and build files
This commit is contained in:
parent
b1cfd16913
commit
87121dce9d
2 changed files with 12 additions and 0 deletions
|
@ -638,6 +638,7 @@ in
|
||||||
rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.4" { inherit profileName; };
|
rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.4" { inherit profileName; };
|
||||||
rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.5" { inherit profileName; };
|
rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.5" { inherit profileName; };
|
||||||
serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.130" { inherit profileName; };
|
serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.130" { inherit profileName; };
|
||||||
|
serde_bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; };
|
||||||
sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.7" { inherit profileName; };
|
sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.7" { inherit profileName; };
|
||||||
structopt = rustPackages."registry+https://github.com/rust-lang/crates.io-index".structopt."0.3.23" { inherit profileName; };
|
structopt = rustPackages."registry+https://github.com/rust-lang/crates.io-index".structopt."0.3.23" { inherit profileName; };
|
||||||
tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.12.0" { inherit profileName; };
|
tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.12.0" { inherit profileName; };
|
||||||
|
|
|
@ -28,6 +28,17 @@ pub trait Crdt {
|
||||||
fn merge(&mut self, other: &Self);
|
fn merge(&mut self, other: &Self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Option<T> implements Crdt for any type T, even if T doesn't implement CRDT itself: when
|
||||||
|
/// different values are detected, they are always merged to None. This can be used for value
|
||||||
|
/// types which shoulnd't be merged, instead of trying to merge things when we know we don't want
|
||||||
|
/// to merge them (which is what the AutoCrdt trait is used for most of the time). This cases
|
||||||
|
/// arises very often, for example with a Lww or a LwwMap: the value type has to be a CRDT so that
|
||||||
|
/// we have a rule for what to do when timestamps aren't enough to disambiguate (in a distributed
|
||||||
|
/// system, anything can happen!), and with AutoCrdt the rule is to make an arbitrary (but
|
||||||
|
/// determinstic) choice between the two. When using an Option<T> instead with this impl, ambiguity
|
||||||
|
/// cases are explicitely stored as None, which allows us to detect the ambiguity and handle it in
|
||||||
|
/// the way we want. (this can only work if we are happy with losing the value when an ambiguity
|
||||||
|
/// arises)
|
||||||
impl<T> Crdt for Option<T>
|
impl<T> Crdt for Option<T>
|
||||||
where
|
where
|
||||||
T: Eq,
|
T: Eq,
|
||||||
|
|
Loading…
Reference in a new issue