stellar_class/
luminosity.rs1use crate::error::Error;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
6pub enum LuminosityClass {
7 Zero,
9 Ia,
11 Iab,
13 Ib,
15 II,
17 III,
19 IV,
21 V,
23 VI,
25 VII,
27}
28
29impl TryFrom<&str> for LuminosityClass {
30 type Error = Error;
31
32 fn try_from(value: &str) -> Result<Self, Self::Error> {
33 let luminosity_class = match value {
34 "0" | "Ia+" => LuminosityClass::Zero,
35 "Ia" => LuminosityClass::Ia,
36 "Iab" => LuminosityClass::Iab,
37 "Ib" => LuminosityClass::Ib,
38 "II" => LuminosityClass::II,
39 "III" => LuminosityClass::III,
40 "IV" => LuminosityClass::IV,
41 "V" => LuminosityClass::V,
42 "VI" => LuminosityClass::VI,
43 "VII" => LuminosityClass::VII,
44 _ => return Err(Error::InvalidLuminosityClass),
45 };
46
47 Ok(luminosity_class)
48 }
49}
50
51impl Into<&'static str> for LuminosityClass {
52 fn into(self) -> &'static str {
53 match self {
54 LuminosityClass::Zero => "0",
55 LuminosityClass::Ia => "Ia",
56 LuminosityClass::Iab => "Iab",
57 LuminosityClass::Ib => "Ib",
58 LuminosityClass::II => "II",
59 LuminosityClass::III => "III",
60 LuminosityClass::IV => "IV",
61 LuminosityClass::V => "V",
62 LuminosityClass::VI => "VI",
63 LuminosityClass::VII => "VII",
64 }
65 }
66}