ed_journals/modules/commander/models/
federation_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 FederationRank {
10 None,
11 Recruit,
12 Cadet,
13 Midshipman,
14 PettyOfficer,
15 ChiefPettyOfficer,
16 WarrantOfficer,
17 Ensign,
18 Lieutenant,
19 LieutenantCommander,
20 PostCommander,
21 PostCaptain,
22 RearAdmiral,
23 ViceAdmiral,
24 Admiral,
25
26 #[cfg(feature = "allow-unknown")]
27 #[cfg_attr(docsrs, doc(cfg(feature = "allow-unknown")))]
28 Unknown(u8),
29}
30
31#[derive(Debug, Error)]
32pub enum FederationRankError {
33 #[error("Unknown federation rank with id '{0}'")]
34 UnknownFederationRank(u8),
35}
36
37impl TryFrom<u8> for FederationRank {
38 type Error = FederationRankError;
39
40 fn try_from(value: u8) -> Result<Self, Self::Error> {
41 match value {
42 0 => Ok(FederationRank::None),
43 1 => Ok(FederationRank::Recruit),
44 2 => Ok(FederationRank::Cadet),
45 3 => Ok(FederationRank::Midshipman),
46 4 => Ok(FederationRank::PettyOfficer),
47 5 => Ok(FederationRank::ChiefPettyOfficer),
48 6 => Ok(FederationRank::WarrantOfficer),
49 7 => Ok(FederationRank::Ensign),
50 8 => Ok(FederationRank::Lieutenant),
51 9 => Ok(FederationRank::LieutenantCommander),
52 10 => Ok(FederationRank::PostCommander),
53 11 => Ok(FederationRank::PostCaptain),
54 12 => Ok(FederationRank::RearAdmiral),
55 13 => Ok(FederationRank::ViceAdmiral),
56 14 => Ok(FederationRank::Admiral),
57
58 #[cfg(feature = "allow-unknown")]
59 _ => Ok(FederationRank::Unknown(value)),
60
61 #[cfg(not(feature = "allow-unknown"))]
62 _ => Err(FederationRankError::UnknownFederationRank(value)),
63 }
64 }
65}
66
67try_from_deserialize_impl!(u8 => FederationRank);
68
69impl Display for FederationRank {
70 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
71 write!(
72 f,
73 "{}",
74 match self {
75 FederationRank::None => "None",
76 FederationRank::Recruit => "Recruit",
77 FederationRank::Cadet => "Cadet",
78 FederationRank::Midshipman => "Midshipman",
79 FederationRank::PettyOfficer => "Petty Officer",
80 FederationRank::ChiefPettyOfficer => "Chief Petty Officer",
81 FederationRank::WarrantOfficer => "WarrantOfficer",
82 FederationRank::Ensign => "Ensign",
83 FederationRank::Lieutenant => "Lieutenant",
84 FederationRank::LieutenantCommander => "Lieutenant Commander",
85 FederationRank::PostCommander => "Post Commander",
86 FederationRank::PostCaptain => "Post Captain",
87 FederationRank::RearAdmiral => "Rear Admiral",
88 FederationRank::ViceAdmiral => "Vice Admiral",
89 FederationRank::Admiral => "Admiral",
90
91 #[cfg(feature = "allow-unknown")]
92 FederationRank::Unknown(unknown) =>
93 return write!(f, "Unknown federation rank nr: {unknown}"),
94 }
95 )
96 }
97}