Compare commits

...

2 commits

Author SHA1 Message Date
Philip (a-0)
e0b83d30b6 Members of family are now stored in HashSet instead of Vec 2024-03-23 19:46:38 +01:00
Philip (a-0)
0c2bdb2ee3 Bugfix: Lazily evaluate b64 address construction after b32 try 2024-03-23 19:46:23 +01:00
4 changed files with 16 additions and 12 deletions

View file

@ -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<String>,
pub members: Vec<PeerId>,
pub members: HashSet<PeerId>,
}
impl Family {
@ -14,7 +16,7 @@ impl Family {
Family {
id,
name,
members,
members: HashSet::from_iter(members.into_iter()),
}
}
}
}

View file

@ -52,7 +52,7 @@ impl From<PeerId> for I2pSocketAddr {
impl From<I2pSocketAddr> for PeerId {
fn from(value: I2pSocketAddr) -> Self {
Self::try_from_b32(&value.dest().string(), Some(value.port())).unwrap_or(
Self::try_from_b32(&value.dest().string(), Some(value.port())).unwrap_or_else(|_|
Self::try_from_dest(&value.dest().string(), Some(value.port())).expect(&format!(
"I2pSocketAddr was neither in b32 nor in b64 format: {value:?}"
)),

View file

@ -80,7 +80,7 @@ impl From<DbPeerFamily> 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();

View file

@ -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