diff options
author | Quentin <quentin@deuxfleurs.fr> | 2020-12-12 17:00:31 +0100 |
---|---|---|
committer | Quentin <quentin@deuxfleurs.fr> | 2020-12-12 17:00:31 +0100 |
commit | e1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5 (patch) | |
tree | d5a5b5038df8b3c0554b967e5d54f8d7f7659ea8 /src/model/bucket_table.rs | |
parent | 1119d466e762b6fe11eb939811c4f24b27a0404f (diff) | |
download | garage-e1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5.tar.gz garage-e1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5.zip |
WIP table migration
Diffstat (limited to 'src/model/bucket_table.rs')
-rw-r--r-- | src/model/bucket_table.rs | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/model/bucket_table.rs b/src/model/bucket_table.rs index b7f24d71..b6b0fceb 100644 --- a/src/model/bucket_table.rs +++ b/src/model/bucket_table.rs @@ -21,27 +21,43 @@ pub struct Bucket { #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub enum BucketState { Deleted, - Present(crdt::LWWMap<String, PermissionSet>), + Present(BucketParams), } impl CRDT for BucketState { fn merge(&mut self, o: &Self) { match o { BucketState::Deleted => *self = BucketState::Deleted, - BucketState::Present(other_ak) => { - if let BucketState::Present(ak) = self { - ak.merge(other_ak); + BucketState::Present(other_params) => { + if let BucketState::Present(params) = self { + params.merge(other_params); } } } } } +#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] +pub struct BucketParams { + pub authorized_keys: crdt::LWWMap<String, PermissionSet>, + pub website: crdt::LWW<bool> +} + +impl CRDT for BucketParams { + fn merge(&mut self, o: &Self) { + self.authorized_keys.merge(&o.authorized_keys); + self.website.merge(&o.website); + } +} + impl Bucket { pub fn new(name: String) -> Self { Bucket { name, - state: crdt::LWW::new(BucketState::Present(crdt::LWWMap::new())), + state: crdt::LWW::new(BucketState::Present(BucketParams { + authorized_keys: crdt::LWWMap::new(), + website: crdt::LWW::new(false) + })), } } pub fn is_deleted(&self) -> bool { @@ -50,7 +66,7 @@ impl Bucket { pub fn authorized_keys(&self) -> &[(String, u64, PermissionSet)] { match self.state.get() { BucketState::Deleted => &[], - BucketState::Present(ak) => ak.items(), + BucketState::Present(state) => state.authorized_keys.items(), } } } |