#[cfg(test)]
mod tests;
use super::{
model::{Group, User},
Query, Resource,
};
use std::io::Result;
pub fn get_all_users(users: impl Resource<User>) -> Result<Vec<User>> {
Ok(users.load()?.values().cloned().collect())
}
pub fn get_matching_users(query: impl Query<User>, users: impl Resource<User>) -> Result<Vec<User>> {
Ok(query
.matching_elements(users.load()?.values())
.into_iter()
.cloned()
.collect())
}
pub fn get_groups_for_user(groups: impl Resource<Group>, users: impl Resource<User>, uid: u64) -> Option<Vec<Group>> {
let username = users.load().ok()?.get(&uid)?.name.to_string();
Some(
groups
.load()
.ok()?
.values()
.filter(|g| g.members.iter().any(|member| member == &username))
.cloned()
.collect(),
)
}
pub fn get_user(users: impl Resource<User>, uid: u64) -> Option<User> {
users.load().ok()?.get(&uid).and_then(|t| Some(t.clone()))
}
pub fn get_group(groups: impl Resource<Group>, gid: u64) -> Option<Group> {
groups.load().ok()?.get(&gid).and_then(|t| Some(t.clone()))
}
pub fn get_all_groups(groups: impl Resource<Group>) -> Result<Vec<Group>> {
Ok(groups.load()?.values().cloned().collect())
}
pub fn get_matching_groups(query: impl Query<Group>, groups: impl Resource<Group>) -> Result<Vec<Group>> {
Ok(query
.matching_elements(groups.load()?.values())
.into_iter()
.cloned()
.collect())
}