use std::fmt;
#[derive(Copy, Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum Distance {
Meters(f64),
Kilometers(f64),
Miles(f64),
NauticalMiles(f64),
}
impl Distance {
#[inline]
pub fn meters(&self) -> f64 {
match self {
Self::Meters(m) => *m,
Self::Kilometers(km) => km * 1_000.0,
Self::Miles(mi) => mi * 1_609.344,
Self::NauticalMiles(nmi) => nmi * 1_852.0,
}
}
#[inline]
pub fn km(v: f64) -> Self {
Self::Kilometers(v)
}
#[inline]
pub fn mi(v: f64) -> Self {
Self::Miles(v)
}
}
impl fmt::Display for Distance {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Meters(v) => write!(f, "{}m", v),
Self::Kilometers(v) => write!(f, "{}km", v),
Self::Miles(v) => write!(f, "{}mi", v),
Self::NauticalMiles(v) => write!(f, "{}nmi", v),
}
}
}