ed_journals/modules/commander/models/
trade_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 TradeRank {
10 Penniless,
11 MostlyPenniless,
12 Peddler,
13 Dealer,
14 Merchant,
15 Broker,
16 Entrepreneur,
17 Tycoon,
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 TradeRankError {
32 #[error("Unknown trade rank with id '{0}'")]
33 UnknownTradeRank(u8),
34}
35
36impl TryFrom<u8> for TradeRank {
37 type Error = TradeRankError;
38
39 fn try_from(value: u8) -> Result<Self, Self::Error> {
40 match value {
41 0 => Ok(TradeRank::Penniless),
42 1 => Ok(TradeRank::MostlyPenniless),
43 2 => Ok(TradeRank::Peddler),
44 3 => Ok(TradeRank::Dealer),
45 4 => Ok(TradeRank::Merchant),
46 5 => Ok(TradeRank::Broker),
47 6 => Ok(TradeRank::Entrepreneur),
48 7 => Ok(TradeRank::Tycoon),
49 8 => Ok(TradeRank::Elite),
50 9 => Ok(TradeRank::EliteI),
51 10 => Ok(TradeRank::EliteII),
52 11 => Ok(TradeRank::EliteIII),
53 12 => Ok(TradeRank::EliteIV),
54 13 => Ok(TradeRank::EliteV),
55
56 #[cfg(feature = "allow-unknown")]
57 _ => Ok(TradeRank::Unknown(value)),
58
59 #[cfg(not(feature = "allow-unknown"))]
60 _ => Err(TradeRankError::UnknownTradeRank(value)),
61 }
62 }
63}
64
65try_from_deserialize_impl!(u8 => TradeRank);
66
67impl Display for TradeRank {
68 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
69 write!(
70 f,
71 "{}",
72 match self {
73 TradeRank::Penniless => "Penniless",
74 TradeRank::MostlyPenniless => "Mostly Penniless",
75 TradeRank::Peddler => "Peddler",
76 TradeRank::Dealer => "Dealer",
77 TradeRank::Merchant => "Merchant",
78 TradeRank::Broker => "Broker",
79 TradeRank::Entrepreneur => "Entrepreneur",
80 TradeRank::Tycoon => "Tycoon",
81 TradeRank::Elite => "Elite",
82 TradeRank::EliteI => "Elite I",
83 TradeRank::EliteII => "Elite II",
84 TradeRank::EliteIII => "Elite III",
85 TradeRank::EliteIV => "Elite IV",
86 TradeRank::EliteV => "Elite V",
87
88 #[cfg(feature = "allow-unknown")]
89 TradeRank::Unknown(unknown) =>
90 return write!(f, "Unknown trade rank nr: {unknown}"),
91 }
92 )
93 }
94}