Improved Peer
type, adjusted database
module accordingly. Fixes #18
This commit is contained in:
parent
f2c9fe48a1
commit
4ca9ffaa0e
9 changed files with 53 additions and 30 deletions
|
@ -1,4 +1,3 @@
|
|||
pub mod api;
|
||||
pub mod messages;
|
||||
pub mod peer;
|
||||
pub mod types;
|
||||
|
|
|
@ -22,6 +22,9 @@ pub use message_id::MessageId;
|
|||
mod peer_id;
|
||||
pub use peer_id::PeerId;
|
||||
|
||||
mod peer;
|
||||
pub use peer::Peer;
|
||||
|
||||
mod pot_id;
|
||||
pub use pot_id::PotId;
|
||||
|
||||
|
|
|
@ -5,19 +5,21 @@ use serde::{Deserialize, Serialize};
|
|||
|
||||
use crate::types::PeerId;
|
||||
|
||||
use super::Family;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
|
||||
pub struct Peer {
|
||||
id: PeerId,
|
||||
name: Option<String>,
|
||||
family: Vec<PeerId>,
|
||||
family: Option<Family>,
|
||||
}
|
||||
|
||||
impl Peer {
|
||||
pub fn new(id: PeerId, name: Option<String>) -> Self {
|
||||
pub fn new(id: PeerId, name: Option<String>, family: Option<Family>) -> Self {
|
||||
Peer {
|
||||
id: id,
|
||||
name: name,
|
||||
family: vec![],
|
||||
id,
|
||||
name,
|
||||
family,
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
use tracing::debug;
|
||||
|
||||
use ubisync_lib::peer::Peer;
|
||||
use ubisync_lib::types::Peer;
|
||||
use ubisync_lib::types::{ContentUpdateStrategy, PeerId};
|
||||
|
||||
use ubisync_lib::messages::{Message, MessageContent};
|
||||
|
@ -19,7 +19,7 @@ pub fn handle(state: &CommState, peer: &PeerId, message: Message) {
|
|||
match message.content() {
|
||||
MessageContent::Hello { peer_name } => {
|
||||
state
|
||||
.set_peer(Peer::new(peer.to_owned(), Some(peer_name.to_string())))
|
||||
.set_peer(Peer::new(peer.to_owned(), Some(peer_name.to_string()), None)) //TODO: Allow sending Family in Hello message
|
||||
.expect("State failed");
|
||||
}
|
||||
MessageContent::JoinFamily => state.request_family_join(peer.to_owned()),
|
||||
|
|
|
@ -10,8 +10,7 @@ use state::{ApiState, CommState, State};
|
|||
|
||||
use ubisync_lib::{
|
||||
messages::{Message, MessageContent},
|
||||
peer::Peer,
|
||||
types::{AppId, Family, PeerId, PotId},
|
||||
types::{AppId, Family, Peer, PeerId, PotId},
|
||||
};
|
||||
|
||||
pub mod api;
|
||||
|
@ -69,7 +68,7 @@ impl Ubisync {
|
|||
|
||||
pub fn add_peer_from_id(&self, id: PeerId) -> anyhow::Result<()> {
|
||||
// TODO: resolve peer's name before setting
|
||||
self.state_handle.add_peer(Peer::new(id, None))
|
||||
self.state_handle.add_peer(Peer::new(id, None, None))
|
||||
}
|
||||
|
||||
pub fn add_family_member_from_id(&self, id: PeerId) -> anyhow::Result<()> {
|
||||
|
|
|
@ -4,10 +4,9 @@ use tracing::debug;
|
|||
|
||||
use ubisync_lib::{
|
||||
api::events::AppEvent,
|
||||
peer::Peer,
|
||||
types::{
|
||||
ContentUpdateStrategy, Element, ElementContent, ElementId, Family, FamilyId, MessageId,
|
||||
PeerId, PotId,
|
||||
Peer, PeerId, PotId,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
use std::ops::Deref;
|
||||
|
||||
use anyhow::{anyhow, Error};
|
||||
use bonsaidb::{
|
||||
core::schema::{Collection, SerializedCollection},
|
||||
|
@ -5,7 +7,7 @@ use bonsaidb::{
|
|||
};
|
||||
use itertools::Itertools;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use ubisync_lib::{peer::Peer, types::PeerId};
|
||||
use ubisync_lib::types::{Peer, PeerId};
|
||||
|
||||
use crate::state::database::{as_key::AsKey, StateDB};
|
||||
|
||||
|
@ -17,17 +19,12 @@ pub(super) struct DbPeer {
|
|||
pub(super) name: Option<String>,
|
||||
}
|
||||
|
||||
impl From<DbPeer> for Peer {
|
||||
fn from(value: DbPeer) -> Self {
|
||||
Peer::new((*value.id).clone(), value.name)
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct Peers<'a> {
|
||||
parent: &'a StateDB,
|
||||
db: &'a Database,
|
||||
}
|
||||
|
||||
|
||||
impl<'a> Peers<'a> {
|
||||
pub const fn new(parent: &'a StateDB, bonsai: &'a Database) -> Self {
|
||||
Self { parent, db: bonsai }
|
||||
|
@ -50,8 +47,15 @@ impl<'a> Peers<'a> {
|
|||
}
|
||||
|
||||
pub fn get(&self, id: PeerId) -> anyhow::Result<Option<Peer>> {
|
||||
let fam = match self.parent.families().get_by_peer(id.clone())? {
|
||||
Some(fam_id) => self.parent.families().get(fam_id)?,
|
||||
None => None,
|
||||
};
|
||||
|
||||
DbPeer::get(&AsKey::new(id), self.db)
|
||||
.map(|doc| doc.map(|peer| Peer::new((*peer.contents.id).clone(), peer.contents.name)))
|
||||
.map(|doc| {
|
||||
doc.map(|peer| Peer::new((*peer.contents.id).clone(), peer.contents.name, fam))
|
||||
})
|
||||
.map_err(|e| anyhow!(e))
|
||||
}
|
||||
|
||||
|
@ -61,7 +65,22 @@ impl<'a> Peers<'a> {
|
|||
.map(|peers| {
|
||||
peers
|
||||
.iter()
|
||||
.map(|p| p.contents.clone().into())
|
||||
.map(|p| {
|
||||
let family = match self
|
||||
.parent
|
||||
.families()
|
||||
.get_by_peer(p.contents.id.deref().clone())
|
||||
{
|
||||
Ok(Some(fam_id)) => self.parent.families().get(fam_id).ok().flatten(),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
Peer::new(
|
||||
p.contents.id.deref().clone(),
|
||||
p.contents.name.clone(),
|
||||
family,
|
||||
)
|
||||
})
|
||||
.collect_vec()
|
||||
})
|
||||
.map_err(|e| anyhow!(e))
|
||||
|
@ -78,7 +97,7 @@ impl<'a> Peers<'a> {
|
|||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use ubisync_lib::{peer::Peer, types::PeerId};
|
||||
use ubisync_lib::types::{Peer, PeerId};
|
||||
|
||||
use crate::state::database::StateDB;
|
||||
|
||||
|
@ -86,7 +105,7 @@ mod tests {
|
|||
fn add_get() {
|
||||
let db = StateDB::init(None);
|
||||
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()));
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()), None);
|
||||
db.peers().add(peer.clone()).unwrap();
|
||||
|
||||
let retrieved_peer = db.peers().get(peer.id()).unwrap();
|
||||
|
@ -98,7 +117,7 @@ mod tests {
|
|||
fn get_all() {
|
||||
let db = StateDB::init(None);
|
||||
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()));
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()), None);
|
||||
db.peers().add(peer.clone()).unwrap();
|
||||
|
||||
let all_peers = db.peers().get_all().unwrap();
|
||||
|
@ -109,7 +128,7 @@ mod tests {
|
|||
fn set_peer_name() {
|
||||
let db = StateDB::init(None);
|
||||
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()));
|
||||
let peer = Peer::new(PeerId::default(), Some("Peer name".to_string()), None);
|
||||
db.peers().add(peer.clone()).unwrap();
|
||||
db.peers()
|
||||
.set_name(peer.id().clone(), &Some("New peer name".to_string()))
|
||||
|
@ -118,7 +137,11 @@ mod tests {
|
|||
let retrieved_peer = db.peers().get(peer.id()).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
Some(Peer::new(peer.id(), Some("New peer name".to_string()))),
|
||||
Some(Peer::new(
|
||||
peer.id(),
|
||||
Some("New peer name".to_string()),
|
||||
None
|
||||
)),
|
||||
retrieved_peer
|
||||
)
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ use bonsaidb::{
|
|||
};
|
||||
use itertools::Itertools;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tracing::debug;
|
||||
use ubisync_lib::types::{AppId, PotId};
|
||||
|
||||
use crate::state::database::{as_key::AsKey, StateDB};
|
||||
|
|
|
@ -9,8 +9,7 @@ use std::{
|
|||
use ubisync_lib::{
|
||||
api::events::AppEvent,
|
||||
messages::{Message, MessageContent},
|
||||
peer::Peer,
|
||||
types::{AppId, Element, ElementContent, ElementId, Family, FamilyId, PeerId, PotId, Tag},
|
||||
types::{AppId, Element, ElementContent, ElementId, Family, FamilyId, Peer, PeerId, PotId, Tag},
|
||||
};
|
||||
|
||||
use anyhow::Error;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue