lykin_playalong/src/db.rs

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