use super::ids::Base62Id; use serde::{Deserialize, Serialize}; #[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] #[serde(from = "Base62Id")] #[serde(into = "Base62Id")] pub struct UserId(pub u64); pub const DELETED_USER: UserId = UserId(127155982985829); #[derive(Serialize, Deserialize, Clone)] pub struct User { pub id: UserId, pub github_id: Option, pub username: String, pub name: Option, pub email: Option, pub avatar_url: Option, pub bio: Option, pub created: chrono::DateTime, pub role: Role, } #[derive(Serialize, Deserialize, PartialEq, Eq, Clone)] #[serde(rename_all = "lowercase")] pub enum Role { Developer, Moderator, Admin, } impl std::fmt::Display for Role { fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { match self { Role::Developer => write!(fmt, "developer"), Role::Moderator => write!(fmt, "moderator"), Role::Admin => write!(fmt, "admin"), } } } impl Role { pub fn from_string(string: &str) -> Role { match string { "admin" => Role::Admin, "moderator" => Role::Moderator, _ => Role::Developer, } } pub fn is_mod(&self) -> bool { match self { Role::Developer => false, Role::Moderator | Role::Admin => true, } } }