extern crate log; use crate::user::User; type MyErrorType = Box; // add a user to the database pub fn db_add(user: &User) { let db: sled::Db = sled::open("users_db").unwrap(); let bytes = bincode::serialize(&user).unwrap(); db.insert(&user.name, bytes).unwrap(); info!("succesfully appended user {} to database", &user.name); } // write all changed users to database pub fn db_write(users_list: &Vec) { let db: sled::Db = sled::open("users_db").unwrap(); for i in users_list { let bytes = bincode::serialize(&i).unwrap(); db.insert(&i.name, bytes).unwrap(); info!("wrote user {} to db", &i.name); } info!("wrote all users to db"); } // remove a user from the database pub fn db_remove(user: &User) { let db: sled::Db = sled::open("users_db").unwrap(); db.remove(&user.name); } // read all users from the database pub fn db_read() -> Vec { let db: sled::Db = sled::open("users_db").unwrap(); let mut users: Vec = Vec::new(); for (_, bytes) in db.iter().filter_map(|r| r.ok()) { let read_user: User = bincode::deserialize(&bytes).unwrap(); info!("read user {} from db", read_user.name); users.push(read_user); } return users; } // read one user from the database pub fn db_read_user(user: &str) -> std::result::Result, MyErrorType> { let db: sled::Db = sled::open("users_db")?; let entry = db.get(user)?; if let Some(user_entry) = entry { let read_user: User = bincode::deserialize(&user_entry)?; info!("read user {} from db", read_user.name); Ok(Some(read_user)) } else { warn!("user {} not found in db!", user); Ok(None) } }