ed_journals/modules/commander/models/
mercenary_rank.rs1use 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}