blob: a561e12e0b3a15a476173918ad7a99698fcf384d [file]
use crate::streaming::users::user::User;
use anyhow::Context;
use iggy::error::IggyError;
use iggy::models::permissions::Permissions;
use iggy::models::user_info::UserId;
use iggy::models::user_status::UserStatus;
use iggy::utils::timestamp::IggyTimestamp;
use serde::{Deserialize, Serialize};
use sled::Db;
const KEY_PREFIX: &str = "users";
pub async fn load_all(db: &Db) -> Result<Vec<User>, IggyError> {
let mut users = Vec::new();
for data in db.scan_prefix(format!("{}:", KEY_PREFIX)) {
let user_data = match data.with_context(|| {
format!(
"Failed to load user, when searching for key: {}",
KEY_PREFIX
)
}) {
Ok((_, value)) => match rmp_serde::from_slice::<UserData>(&value).with_context(|| {
format!(
"Failed to deserialize user, when searching for key: {}",
KEY_PREFIX
)
}) {
Ok(user) => user,
Err(err) => {
return Err(IggyError::CannotDeserializeResource(err));
}
},
Err(err) => {
return Err(IggyError::CannotLoadResource(err));
}
};
let mut user = User::empty(user_data.id);
user.status = user_data.status;
user.username = user_data.username;
user.password = user_data.password;
user.created_at = user_data.created_at;
user.permissions = user_data.permissions;
users.push(user);
}
Ok(users)
}
#[derive(Debug, Serialize, Deserialize)]
struct UserData {
pub id: UserId,
pub status: UserStatus,
pub username: String,
pub password: String,
pub created_at: IggyTimestamp,
pub permissions: Option<Permissions>,
}