Skip to main content

ed_journals/modules/commander/models/
trade_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 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}