use crate::commons::Username;
use crate::responses::{TagList, vhosts::EnforcedLimits};
use serde::{Deserialize, Serialize};
#[cfg(feature = "zeroize")]
use zeroize::{Zeroize, ZeroizeOnDrop};
#[cfg(feature = "tabled")]
use tabled::Tabled;
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct UserLimits {
#[serde(rename(deserialize = "user"))]
pub username: Username,
#[serde(rename(deserialize = "value"))]
pub limits: EnforcedLimits,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[cfg_attr(feature = "zeroize", derive(Zeroize, ZeroizeOnDrop))]
#[allow(dead_code)]
pub struct User {
pub name: Username,
pub tags: TagList,
pub password_hash: String,
}
impl User {
pub fn with_name(&self, name: String) -> Self {
Self {
name,
tags: self.tags.clone(),
password_hash: self.password_hash.clone(),
}
}
pub fn with_tags(&self, tags: TagList) -> Self {
Self {
name: self.name.clone(),
tags,
password_hash: self.password_hash.clone(),
}
}
pub fn with_password_hash(&self, password_hash: String) -> Self {
Self {
name: self.name.clone(),
tags: self.tags.clone(),
password_hash,
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct CurrentUser {
pub name: Username,
pub tags: TagList,
}