use crate::VerticalDistance;
pub fn vd_kind(vd: &VerticalDistance) -> &'static str {
match vd {
VerticalDistance::Agl(_) => "agl",
VerticalDistance::Altitude(_) => "alt",
VerticalDistance::PressureAltitude(_) => "pa",
VerticalDistance::Fl(_) => "fl",
VerticalDistance::Gnd => "gnd",
VerticalDistance::Msl(_) => "msl",
VerticalDistance::Unlimited => "unlimited",
}
}
pub fn vd_value(vd: &VerticalDistance) -> Option<i64> {
match vd {
VerticalDistance::Agl(n) => Some(*n as i64),
VerticalDistance::Altitude(n) => Some(*n as i64),
VerticalDistance::PressureAltitude(n) => Some(*n as i64),
VerticalDistance::Fl(n) => Some(*n as i64),
VerticalDistance::Msl(n) => Some(*n as i64),
VerticalDistance::Gnd | VerticalDistance::Unlimited => None,
}
}
pub fn vd_from_row(kind: &str, value: Option<i64>) -> Option<VerticalDistance> {
match (kind, value) {
("agl", Some(n)) => u16::try_from(n).ok().map(VerticalDistance::Agl),
("alt", Some(n)) => u16::try_from(n).ok().map(VerticalDistance::Altitude),
("pa", Some(n)) => i16::try_from(n)
.ok()
.map(VerticalDistance::PressureAltitude),
("fl", Some(n)) => u16::try_from(n).ok().map(VerticalDistance::Fl),
("msl", Some(n)) => u16::try_from(n).ok().map(VerticalDistance::Msl),
("gnd", _) => Some(VerticalDistance::Gnd),
("unlimited", _) => Some(VerticalDistance::Unlimited),
_ => None,
}
}