55 lines
1.2 KiB
Rust
55 lines
1.2 KiB
Rust
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<Option<IVec>> {
|
|
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
|
|
}
|
|
}
|
|
}
|