Members of family are now stored in HashSet instead of Vec

This commit is contained in:
Philip (a-0) 2024-03-23 19:46:38 +01:00
parent 0c2bdb2ee3
commit e0b83d30b6
3 changed files with 15 additions and 11 deletions

View file

@ -1,3 +1,5 @@
use std::collections::HashSet;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use super::{FamilyId, PeerId}; use super::{FamilyId, PeerId};
@ -6,7 +8,7 @@ use super::{FamilyId, PeerId};
pub struct Family { pub struct Family {
pub id: FamilyId, pub id: FamilyId,
pub name: Option<String>, pub name: Option<String>,
pub members: Vec<PeerId>, pub members: HashSet<PeerId>,
} }
impl Family { impl Family {
@ -14,7 +16,7 @@ impl Family {
Family { Family {
id, id,
name, name,
members, members: HashSet::from_iter(members.into_iter()),
} }
} }
} }

View file

@ -80,7 +80,7 @@ impl From<DbPeerFamily> for Family {
Family { Family {
id: (*value.id).clone(), id: (*value.id).clone(),
name: value.name, 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 .value
.clone() .clone()
.map(|family| family.members) .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")), _ => Err(Error::msg("Peer appears to be member of multiple families")),
})? })?
.map_err(|e| anyhow!(e)) .map_err(|e| anyhow!(e))
@ -187,6 +187,8 @@ impl StateDB {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::collections::HashSet;
use ubisync_lib::types::{Family, FamilyId, PeerId}; use ubisync_lib::types::{Family, FamilyId, PeerId};
use crate::state::database::StateDB; use crate::state::database::StateDB;
@ -200,7 +202,7 @@ mod tests {
db.add_peer_family(Family { db.add_peer_family(Family {
id: family_id.clone(), id: family_id.clone(),
name: Some("My family name".to_string()), name: Some("My family name".to_string()),
members: vec![peer_id.clone()], members: HashSet::from([peer_id.clone()]),
}) })
.unwrap(); .unwrap();
let retrieved_family = db.get_peer_family(family_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 { db.add_peer_family(Family {
id: family_id.clone(), id: family_id.clone(),
name: Some("My family name".to_string()), name: Some("My family name".to_string()),
members: vec![peer_id.clone()], members: HashSet::from([peer_id.clone()]),
}) })
.unwrap(); .unwrap();
db.remove_peer_from_family(peer_id.clone()).unwrap(); db.remove_peer_from_family(peer_id.clone()).unwrap();
@ -249,7 +251,7 @@ mod tests {
db.add_peer_family(Family { db.add_peer_family(Family {
id: family_id.clone(), id: family_id.clone(),
name: Some("My family name".to_string()), name: Some("My family name".to_string()),
members: vec![peer_id.clone()], members: HashSet::from([peer_id.clone()]),
}) })
.unwrap(); .unwrap();
@ -284,7 +286,7 @@ mod tests {
db.add_peer_family(Family { db.add_peer_family(Family {
id: family_id.clone(), id: family_id.clone(),
name: Some("My family name".to_string()), name: Some("My family name".to_string()),
members: vec![peer_id.clone()], members: HashSet::from([peer_id.clone()]),
}) })
.unwrap(); .unwrap();

View file

@ -1,6 +1,6 @@
use crate::{api::v0::app::App, comm::CommHandle, node_events::UbisyncNodeEvent, Ubisync}; use crate::{api::v0::app::App, comm::CommHandle, node_events::UbisyncNodeEvent, Ubisync};
use std::{ use std::{
collections::HashMap, collections::{HashMap, HashSet},
sync::{ sync::{
mpsc::{channel, Receiver, Sender}, mpsc::{channel, Receiver, Sender},
Arc, Mutex, RwLock, Arc, Mutex, RwLock,
@ -167,7 +167,7 @@ impl State {
let family = Family { let family = Family {
id: FamilyId::new(), id: FamilyId::new(),
name: None, name: None,
members: vec![my_id.clone(), peer.clone()], members: HashSet::from([my_id.clone(), peer.clone()]),
}; };
self.db.add_peer_family(family.clone())?; self.db.add_peer_family(family.clone())?;
family family