use super::util;
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum Token<'a> {
HeaderMnemonicSeparator,
HeaderQuerySuffix,
ProgramMessageUnitSeparator,
ProgramHeaderSeparator,
ProgramDataSeparator,
ProgramMnemonic(&'a [u8]),
CharacterProgramData(&'a [u8]),
DecimalNumericProgramData(&'a [u8]),
DecimalNumericSuffixProgramData(&'a [u8], &'a [u8]),
NonDecimalNumericProgramData(u64),
StringProgramData(&'a [u8]),
ArbitraryBlockData(&'a [u8]),
ExpressionProgramData(&'a [u8]),
}
impl<'a> Token<'a> {
pub fn is_data(&self) -> bool {
matches!(
self,
Self::CharacterProgramData(_)
| Self::DecimalNumericProgramData(_)
| Self::DecimalNumericSuffixProgramData(_, _)
| Self::NonDecimalNumericProgramData(_)
| Self::StringProgramData(_)
| Self::ArbitraryBlockData(_)
| Self::ExpressionProgramData(_)
)
}
pub fn match_program_header(&self, mnemonic: &'a [u8]) -> bool {
match self {
Token::ProgramMnemonic(s) | Token::CharacterProgramData(s) => {
util::mnemonic_match(mnemonic, s)
}
_ => false,
}
}
}