From e0b83d30b6fd1b15ed27a1f120122c6aa4c682fe Mon Sep 17 00:00:00 2001 From: "Philip (a-0)" <@ph:a-0.me> Date: Sat, 23 Mar 2024 19:46:38 +0100 Subject: [PATCH] Members of family are now stored in HashSet instead of Vec --- ubisync-lib/src/types/family.rs | 8 +++++--- .../state/database/collections/peer_families.rs | 14 ++++++++------ ubisync/src/state/mod.rs | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/ubisync-lib/src/types/family.rs b/ubisync-lib/src/types/family.rs index 056a158..19afa44 100644 --- a/ubisync-lib/src/types/family.rs +++ b/ubisync-lib/src/types/family.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use serde::{Deserialize, Serialize}; use super::{FamilyId, PeerId}; @@ -6,7 +8,7 @@ use super::{FamilyId, PeerId}; pub struct Family { pub id: FamilyId, pub name: Option, - pub members: Vec, + pub members: HashSet, } impl Family { @@ -14,7 +16,7 @@ impl Family { Family { id, name, - members, + members: HashSet::from_iter(members.into_iter()), } } -} +} \ No newline at end of file diff --git a/ubisync/src/state/database/collections/peer_families.rs b/ubisync/src/state/database/collections/peer_families.rs index f204819..e44759d 100644 --- a/ubisync/src/state/database/collections/peer_families.rs +++ b/ubisync/src/state/database/collections/peer_families.rs @@ -80,7 +80,7 @@ impl From for Family { Family { id: (*value.id).clone(), name: value.name, - members: value.members.iter().map(|p| p.clone()).collect_vec(), + members: HashSet::from_iter(value.members.into_iter()), } } } @@ -160,7 +160,7 @@ impl StateDB { .value .clone() .map(|family| family.members) - .unwrap_or(vec![])), + .map(|map| map.into_iter().collect_vec()).unwrap_or(vec![])), _ => Err(Error::msg("Peer appears to be member of multiple families")), })? .map_err(|e| anyhow!(e)) @@ -187,6 +187,8 @@ impl StateDB { #[cfg(test)] mod tests { + use std::collections::HashSet; + use ubisync_lib::types::{Family, FamilyId, PeerId}; use crate::state::database::StateDB; @@ -200,7 +202,7 @@ mod tests { db.add_peer_family(Family { id: family_id.clone(), name: Some("My family name".to_string()), - members: vec![peer_id.clone()], + members: HashSet::from([peer_id.clone()]), }) .unwrap(); let retrieved_family = db.get_peer_family(family_id.clone()).unwrap(); @@ -224,7 +226,7 @@ mod tests { db.add_peer_family(Family { id: family_id.clone(), name: Some("My family name".to_string()), - members: vec![peer_id.clone()], + members: HashSet::from([peer_id.clone()]), }) .unwrap(); db.remove_peer_from_family(peer_id.clone()).unwrap(); @@ -249,7 +251,7 @@ mod tests { db.add_peer_family(Family { id: family_id.clone(), name: Some("My family name".to_string()), - members: vec![peer_id.clone()], + members: HashSet::from([peer_id.clone()]), }) .unwrap(); @@ -284,7 +286,7 @@ mod tests { db.add_peer_family(Family { id: family_id.clone(), name: Some("My family name".to_string()), - members: vec![peer_id.clone()], + members: HashSet::from([peer_id.clone()]), }) .unwrap(); diff --git a/ubisync/src/state/mod.rs b/ubisync/src/state/mod.rs index c2bdaec..4d18276 100644 --- a/ubisync/src/state/mod.rs +++ b/ubisync/src/state/mod.rs @@ -1,6 +1,6 @@ use crate::{api::v0::app::App, comm::CommHandle, node_events::UbisyncNodeEvent, Ubisync}; use std::{ - collections::HashMap, + collections::{HashMap, HashSet}, sync::{ mpsc::{channel, Receiver, Sender}, Arc, Mutex, RwLock, @@ -167,7 +167,7 @@ impl State { let family = Family { id: FamilyId::new(), name: None, - members: vec![my_id.clone(), peer.clone()], + members: HashSet::from([my_id.clone(), peer.clone()]), }; self.db.add_peer_family(family.clone())?; family