#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[serde(rename_all = "lowercase")] pub enum Role { User, Admin } impl std::fmt::Display for Role { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Role::User => write!(f, "user"), Role::Admin => write!(f, "admin"), } } } impl std::str::FromStr for Role { type Err = String; fn from_str(s: &str) -> Result { match s { "user" => Ok(Role::User), "admin" => Ok(Role::Admin), other => Err(format!("Unknown role: {other}")), } } }