Compare commits

...

1 Commits

Author SHA1 Message Date
~erin 64bb346a11
Try and use Mutex thing for db 2021-07-23 14:06:26 -04:00
1 changed files with 7 additions and 4 deletions

View File

@ -1,7 +1,10 @@
extern crate log;
use crate::user::User;
use once_cell::sync::Lazy;
use std::sync::Mutex;
type MyErrorType = Box<dyn std::error::Error>;
static DB: Lazy<Mutex<sled::Db>> = Lazy::new(|| Mutex::new(sled::Db::open("users_db").unwrap()));
// add a user to the database
pub fn db_add(user: &User) {
@ -13,7 +16,7 @@ pub fn db_add(user: &User) {
// write all changed users to database
pub fn db_write(users_list: &Vec<User>) {
let db: sled::Db = sled::open("users_db").unwrap();
let db = DB.lock().unwrap();
for i in users_list {
let bytes = bincode::serialize(&i).unwrap();
db.insert(&i.name, bytes).unwrap();
@ -24,13 +27,13 @@ pub fn db_write(users_list: &Vec<User>) {
// remove a user from the database
pub fn db_remove(user: &User) {
let db: sled::Db = sled::open("users_db").unwrap();
let db = DB.lock().unwrap();
db.remove(&user.name);
}
// read all users from the database
pub fn db_read() -> Vec<User> {
let db: sled::Db = sled::open("users_db").unwrap();
let db = DB.lock().unwrap();
let mut users: Vec<User> = Vec::new();
for (_, bytes) in db.iter().filter_map(|r| r.ok()) {
let read_user: User = bincode::deserialize(&bytes).unwrap();
@ -42,7 +45,7 @@ pub fn db_read() -> Vec<User> {
// read one user from the database
pub fn db_read_user(user: &str) -> std::result::Result<Option<User>, MyErrorType> {
let db: sled::Db = sled::open("users_db")?;
let db = DB.lock().unwrap();
let entry = db.get(user)?;
if let Some(user_entry) = entry {
let read_user: User = bincode::deserialize(&user_entry)?;