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