#[derive(PartialEq, Eq, Debug)]
#[allow(clippy::upper_case_acronyms)]
pub enum TimeScale {
Invalid = -1,
UTC = 1,
TT = 2,
UT1 = 3,
TAI = 4,
GPS = 5,
TDB = 6,
}
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
#[error("invalid TimeScale value: {0} (expected 1..=6 for UTC, TT, UT1, TAI, GPS, TDB)")]
pub struct InvalidTimeScale(pub i32);
impl TryFrom<i32> for TimeScale {
type Error = InvalidTimeScale;
fn try_from(value: i32) -> Result<Self, Self::Error> {
match value {
1 => Ok(Self::UTC),
2 => Ok(Self::TT),
3 => Ok(Self::UT1),
4 => Ok(Self::TAI),
5 => Ok(Self::GPS),
6 => Ok(Self::TDB),
_ => Err(InvalidTimeScale(value)),
}
}
}
impl std::fmt::Display for TimeScale {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Self::UTC => "Coordinated Universal Time",
Self::TT => "Terrestrial Time",
Self::UT1 => "Universal Time 1",
Self::TAI => "International Atomic Time",
Self::GPS => "Global Positioning System",
Self::TDB => "Barycentric Dynamical Time",
Self::Invalid => "Invalid",
}
)
}
}