use super::{Field, FieldError};
use std::str::FromStr;
#[derive(Debug, PartialEq)]
pub enum NameInd<const I: usize> {
AbeamFix,
BearingDistanceFix,
AirportNameAsFix,
FIRFix,
PhoneticLetterNameFix,
AirportIdentFix,
LatitudeLongitudeFix,
MultipleWordNameFix,
NavaidIdentFix,
PublishedFiveLetterNameFix,
PublishedNameFixLessThanFiveLetters,
PublishedNameFixMoreThanFiveLetters,
AirportRwyRelatedFix,
UIRFix,
LocalizerMarkerWithPublishedFiveLetter,
LocalizerMarkerWithoutPublishedFiveLetter,
Unspecified, }
impl<const I: usize> Field for NameInd<I> {}
impl<const I: usize> FromStr for NameInd<I> {
type Err = FieldError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match &s[I..I + 3] {
"A " => Ok(Self::AbeamFix),
"B " => Ok(Self::BearingDistanceFix),
"D " => Ok(Self::AirportNameAsFix),
"F " => Ok(Self::FIRFix),
"H " => Ok(Self::PhoneticLetterNameFix),
"I " => Ok(Self::AirportIdentFix),
"L " => Ok(Self::LatitudeLongitudeFix),
"M " => Ok(Self::MultipleWordNameFix),
"N " => Ok(Self::NavaidIdentFix),
"P " => Ok(Self::PublishedFiveLetterNameFix),
"Q " => Ok(Self::PublishedNameFixLessThanFiveLetters),
"R " => Ok(Self::PublishedNameFixMoreThanFiveLetters),
"T " => Ok(Self::AirportRwyRelatedFix),
"U " => Ok(Self::UIRFix),
" O " => Ok(Self::LocalizerMarkerWithPublishedFiveLetter),
" M " => Ok(Self::LocalizerMarkerWithoutPublishedFiveLetter),
" " => Ok(Self::Unspecified),
_ => Err(FieldError::UnexpectedChar(
"unexpected name format indicator",
)),
}
}
}