use sled::{Db, Tree, IVec, Result}; use std::path::Path; use serde::{Deserialize, Serialize}; #[derive(Clone)] pub struct Database { db: Db, peer_tree: Tree, } impl Database { pub fn init(path: &Path) -> Self { let db = sled::open(path).expect("Failed to open database"); let peer_tree = db .open_tree("peers") .expect("Failed to open 'peers' database tree"); Database { db, peer_tree, } } pub fn add_peer(&self, peer: Peer) -> Result> { let peer_bytes = bincode::serialize(&peer).unwrap(); self.peer_tree.insert(&peer.public_key, peer_bytes) } pub fn remove_peer(&self, public_key: &str) -> Result<()> { self.peer_tree.remove(&public_key).map(|_| ()) } } #[derive(Debug, Deserialize, Serialize)] pub struct Peer { pub public_key: String, pub name: String, } impl Peer { pub fn new(public_key: &str) -> Peer { Peer { public_key: public_key.to_string(), name: "".to_string(), } } pub fn set_name(self, name: &str) -> Peer { Self { name: name.to_string(), ..self } } }