use super::{Field, FieldError};
use std::str::FromStr;
#[derive(Debug, PartialEq)]
pub enum Datum<const I: usize> {
ADI,
AFG,
AIN,
AMA,
ANO,
AIA,
ARF,
ARS,
ASC,
ATF,
SHB,
TRN,
ASQ,
AUA,
AUG,
PHA,
IBE,
BER,
BID,
BOO,
BUR,
CAZ,
CAI,
CAO,
CAP,
CAC,
CGE,
CHI,
CHU,
EST,
COA,
DAL,
DAN,
DID,
BAT,
GIZ,
EAS,
EUR,
FOT,
GAA,
GAN,
GEO,
GRA,
GRX,
GSE,
DOB,
HEN,
HER,
HJO,
HKD,
HTN,
IND,
INF,
ING,
INH,
IDN,
IRL,
ISG,
IST,
JOH,
KAN,
KEG,
KEA,
KUS,
LCF,
LEH,
LIB,
LUZ,
MPO,
MIK,
MCN,
MAS,
MER,
MID,
MIN,
MOL,
ASM,
NAH,
NAN,
NAP,
NAS,
NAR,
NSD,
FLO,
OEG,
OHA,
FAH,
OGB,
PAM,
PLN,
PIT,
PTB,
PTN,
POS,
PDM,
PRP,
HIT,
PUR,
PUK,
QAT,
QUO,
REU,
MOD,
RTS,
SPK,
SAE,
SAO,
SAP,
SCK,
SGM,
SRL,
CCD,
SAN,
SOA,
STO,
SYO,
TAN,
TIL,
TOY,
TRI,
TDC,
Unknown,
MVS,
VOI,
VOR,
WAK,
ENW,
WGA,
WGB,
WGC,
WGE,
YAC,
ZAN,
}
impl<const I: usize> Field for Datum<I> {}
impl<const I: usize> FromStr for Datum<I> {
type Err = FieldError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match &s[I..I + 3] {
"ADI" => Ok(Self::ADI),
"AFG" => Ok(Self::AFG),
"AIN" => Ok(Self::AIN),
"AMA" => Ok(Self::AMA),
"ANO" => Ok(Self::ANO),
"AIA" => Ok(Self::AIA),
"ARF" => Ok(Self::ARF),
"ARS" => Ok(Self::ARS),
"ASC" => Ok(Self::ASC),
"ATF" => Ok(Self::ATF),
"SHB" => Ok(Self::SHB),
"TRN" => Ok(Self::TRN),
"ASQ" => Ok(Self::ASQ),
"AUA" => Ok(Self::AUA),
"AUG" => Ok(Self::AUG),
"PHA" => Ok(Self::PHA),
"IBE" => Ok(Self::IBE),
"BER" => Ok(Self::BER),
"BID" => Ok(Self::BID),
"BOO" => Ok(Self::BOO),
"BUR" => Ok(Self::BUR),
"CAZ" => Ok(Self::CAZ),
"CAI" => Ok(Self::CAI),
"CAO" => Ok(Self::CAO),
"CAP" => Ok(Self::CAP),
"CAC" => Ok(Self::CAC),
"CGE" => Ok(Self::CGE),
"CHI" => Ok(Self::CHI),
"CHU" => Ok(Self::CHU),
"EST" => Ok(Self::EST),
"COA" => Ok(Self::COA),
"DAL" => Ok(Self::DAL),
"DAN" => Ok(Self::DAN),
"DID" => Ok(Self::DID),
"BAT" => Ok(Self::BAT),
"GIZ" => Ok(Self::GIZ),
"EAS" => Ok(Self::EAS),
"EUR" => Ok(Self::EUR),
"FOT" => Ok(Self::FOT),
"GAA" => Ok(Self::GAA),
"GAN" => Ok(Self::GAN),
"GEO" => Ok(Self::GEO),
"GRA" => Ok(Self::GRA),
"GRX" => Ok(Self::GRX),
"GSE" => Ok(Self::GSE),
"DOB" => Ok(Self::DOB),
"HEN" => Ok(Self::HEN),
"HER" => Ok(Self::HER),
"HJO" => Ok(Self::HJO),
"HKD" => Ok(Self::HKD),
"HTN" => Ok(Self::HTN),
"IND" => Ok(Self::IND),
"INF" => Ok(Self::INF),
"ING" => Ok(Self::ING),
"INH" => Ok(Self::INH),
"IDN" => Ok(Self::IDN),
"IRL" => Ok(Self::IRL),
"ISG" => Ok(Self::ISG),
"IST" => Ok(Self::IST),
"JOH" => Ok(Self::JOH),
"KAN" => Ok(Self::KAN),
"KEG" => Ok(Self::KEG),
"KEA" => Ok(Self::KEA),
"KUS" => Ok(Self::KUS),
"LCF" => Ok(Self::LCF),
"LEH" => Ok(Self::LEH),
"LIB" => Ok(Self::LIB),
"LUZ" => Ok(Self::LUZ),
"MPO" => Ok(Self::MPO),
"MIK" => Ok(Self::MIK),
"MCN" => Ok(Self::MCN),
"MAS" => Ok(Self::MAS),
"MER" => Ok(Self::MER),
"MID" => Ok(Self::MID),
"MIN" => Ok(Self::MIN),
"MOL" => Ok(Self::MOL),
"ASM" => Ok(Self::ASM),
"NAH" => Ok(Self::NAH),
"NAN" => Ok(Self::NAN),
"NAP" => Ok(Self::NAP),
"NAS" => Ok(Self::NAS),
"NAR" => Ok(Self::NAR),
"NSD" => Ok(Self::NSD),
"FLO" => Ok(Self::FLO),
"OEG" => Ok(Self::OEG),
"OHA" => Ok(Self::OHA),
"FAH" => Ok(Self::FAH),
"OGB" => Ok(Self::OGB),
"PAM" => Ok(Self::PAM),
"PLN" => Ok(Self::PLN),
"PIT" => Ok(Self::PIT),
"PTB" => Ok(Self::PTB),
"PTN" => Ok(Self::PTN),
"POS" => Ok(Self::POS),
"PDM" => Ok(Self::PDM),
"PRP" => Ok(Self::PRP),
"HIT" => Ok(Self::HIT),
"PUR" => Ok(Self::PUR),
"PUK" => Ok(Self::PUK),
"QAT" => Ok(Self::QAT),
"QUO" => Ok(Self::QUO),
"REU" => Ok(Self::REU),
"MOD" => Ok(Self::MOD),
"RTS" => Ok(Self::RTS),
"SPK" => Ok(Self::SPK),
"SAE" => Ok(Self::SAE),
"SAO" => Ok(Self::SAO),
"SAP" => Ok(Self::SAP),
"SCK" => Ok(Self::SCK),
"SGM" => Ok(Self::SGM),
"SRL" => Ok(Self::SRL),
"CCD" => Ok(Self::CCD),
"SAN" => Ok(Self::SAN),
"SOA" => Ok(Self::SOA),
"STO" => Ok(Self::STO),
"SYO" => Ok(Self::SYO),
"TAN" => Ok(Self::TAN),
"TIL" => Ok(Self::TIL),
"TOY" => Ok(Self::TOY),
"TRI" => Ok(Self::TRI),
"TDC" => Ok(Self::TDC),
"U " => Ok(Self::Unknown),
"MVS" => Ok(Self::MVS),
"VOI" => Ok(Self::VOI),
"VOR" => Ok(Self::VOR),
"WAK" => Ok(Self::WAK),
"ENW" => Ok(Self::ENW),
"WGA" => Ok(Self::WGA),
"WGB" => Ok(Self::WGB),
"WGC" => Ok(Self::WGC),
"WGE" => Ok(Self::WGE),
"YAC" => Ok(Self::YAC),
"ZAN" => Ok(Self::ZAN),
_ => Err(FieldError::UnexpectedChar(
"expected a datum according to ARINC 424-17 attachment 2",
)),
}
}
}