projectlib/jsonb/
group.rsuse crate::jsonb::project_user::ProjectUser;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Group {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub users: Option<Vec<ProjectUser>>,
}
impl Group {
pub fn normalize(&self) -> Group {
Group {
name: self.name.clone(),
users: self.users.clone(),
}
}
pub fn try_add_user_to_group(&self, user: ProjectUser) -> Group {
Group {
name: self.name.clone(),
users: {
if self.users.is_none() {
let mut users = vec![];
users.push(user.add_requested_user());
Option::from(users)
} else {
let mut users = self.users.clone().unwrap();
if users.iter().all(|u| u.id != user.id) {
users.push(user.add_requested_user());
}
Option::from(users)
}
},
}
}
}