use std::iter::{FromIterator, IntoIterator};
use user::types::{NewUser, UserExtra};
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Database {
id: String,
name: String,
path: String,
is_system: bool,
}
impl Database {
pub fn id(&self) -> &str {
&self.id
}
pub fn name(&self) -> &str {
&self.name
}
pub fn path(&self) -> &str {
&self.path
}
pub fn is_system(&self) -> bool {
self.is_system
}
}
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NewDatabase<E>
where E: UserExtra
{
name: String,
users: Vec<NewUser<E>>,
}
impl<E> NewDatabase<E>
where E: UserExtra
{
pub fn new<N, U>(name: N, users: U) -> Self
where N: Into<String>, U: IntoIterator<Item=NewUser<E>>
{
NewDatabase {
name: name.into(),
users: Vec::from_iter(users.into_iter()),
}
}
pub fn with_name<N>(name: N) -> Self
where N: Into<String>
{
NewDatabase {
name: name.into(),
users: Vec::new(),
}
}
pub fn set_users<U>(&mut self, users: U)
where U: IntoIterator<Item=NewUser<E>>
{
self.users = Vec::from_iter(users.into_iter());
}
pub fn name(&self) -> &str {
&self.name
}
pub fn users(&self) -> &[NewUser<E>] {
&self.users
}
}