veloren_common/comp/
admin.rs

1use serde::{Deserialize, Serialize};
2use specs::{Component, DerefFlaggedStorage, VecStorage};
3use strum::VariantNames;
4
5// VariantNames is used by bins for clap only, but using strum here gets rid
6// of the clap dependency
7#[derive(
8    Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize, Deserialize, VariantNames,
9)]
10pub enum AdminRole {
11    Moderator = 0,
12    Admin = 1,
13}
14
15impl core::str::FromStr for AdminRole {
16    type Err = &'static str;
17
18    fn from_str(s: &str) -> Result<Self, Self::Err> {
19        match s {
20            "mod" | "moderator" => Ok(AdminRole::Moderator),
21            "admin" => Ok(AdminRole::Admin),
22            _ => Err("Could not parse AdminRole"),
23        }
24    }
25}
26
27#[expect(clippy::to_string_trait_impl)]
28impl ToString for AdminRole {
29    fn to_string(&self) -> String {
30        match self {
31            AdminRole::Moderator => "moderator",
32            AdminRole::Admin => "admin",
33        }
34        .into()
35    }
36}
37
38#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
39pub struct Admin(pub AdminRole);
40
41impl Component for Admin {
42    type Storage = DerefFlaggedStorage<Self, VecStorage<Self>>;
43}