Skip to main content

ed_journals/modules/commander/models/
mercenary_rank.rs

1use std::fmt::{Display, Formatter};
2
3use serde::Serialize;
4use thiserror::Error;
5
6use crate::try_from_deserialize_impl;
7
8#[derive(Debug, Serialize, Clone, PartialEq)]
9pub enum MercenaryRank {
10    Defenceless,
11    MostlyDefenceless,
12    Rookie,
13    Soldier,
14    Gunslinger,
15    Warrior,
16    Gladiator,
17    Deadeye,
18    Elite,
19    EliteI,
20    EliteII,
21    EliteIII,
22    EliteIV,
23    EliteV,
24
25    #[cfg(feature = "allow-unknown")]
26    #[cfg_attr(docsrs, doc(cfg(feature = "allow-unknown")))]
27    Unknown(u8),
28}
29
30#[derive(Debug, Error)]
31pub enum MercenaryRankError {
32    #[error("Unknown mercenary rank with id '{0}'")]
33    UnknownMercenaryRank(u8),
34}
35
36impl TryFrom<u8> for MercenaryRank {
37    type Error = MercenaryRankError;
38
39    fn try_from(value: u8) -> Result<Self, Self::Error> {
40        match value {
41            0 => Ok(MercenaryRank::Defenceless),
42            1 => Ok(MercenaryRank::MostlyDefenceless),
43            2 => Ok(MercenaryRank::Rookie),
44            3 => Ok(MercenaryRank::Soldier),
45            4 => Ok(MercenaryRank::Gunslinger),
46            5 => Ok(MercenaryRank::Warrior),
47            6 => Ok(MercenaryRank::Gladiator),
48            7 => Ok(MercenaryRank::Deadeye),
49            8 => Ok(MercenaryRank::Elite),
50            9 => Ok(MercenaryRank::EliteI),
51            10 => Ok(MercenaryRank::EliteII),
52            11 => Ok(MercenaryRank::EliteIII),
53            12 => Ok(MercenaryRank::EliteIV),
54            13 => Ok(MercenaryRank::EliteV),
55
56            #[cfg(feature = "allow-unknown")]
57            _ => Ok(MercenaryRank::Unknown(value)),
58
59            #[cfg(not(feature = "allow-unknown"))]
60            _ => Err(MercenaryRankError::UnknownMercenaryRank(value)),
61        }
62    }
63}
64
65try_from_deserialize_impl!(u8 => MercenaryRank);
66
67impl Display for MercenaryRank {
68    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
69        write!(
70            f,
71            "{}",
72            match self {
73                MercenaryRank::Defenceless => "Defenceless",
74                MercenaryRank::MostlyDefenceless => "Mostly Defenceless",
75                MercenaryRank::Rookie => "Rookie",
76                MercenaryRank::Soldier => "Soldier",
77                MercenaryRank::Gunslinger => "Gunslinger",
78                MercenaryRank::Warrior => "Warrior",
79                MercenaryRank::Gladiator => "Gladiator",
80                MercenaryRank::Deadeye => "Deadeye",
81                MercenaryRank::Elite => "Elite",
82                MercenaryRank::EliteI => "Elite I",
83                MercenaryRank::EliteII => "Elite II",
84                MercenaryRank::EliteIII => "Elite III",
85                MercenaryRank::EliteIV => "Elite IV",
86                MercenaryRank::EliteV => "Elite V",
87
88                #[cfg(feature = "allow-unknown")]
89                MercenaryRank::Unknown(unknown) =>
90                    return write!(f, "Unknown mercenary rank nr: {unknown}"),
91            }
92        )
93    }
94}