use logos::Logos;
#[derive(Logos, Debug, Clone, PartialEq)]
pub(crate) enum Token<'a> {
#[regex(r"[+-][0-9]{2}(\.[0-9]+)?", priority = 3)]
Signed2(&'a str),
#[regex(r"[+-][0-9]{3}(\.[0-9]+)?", priority = 3)]
Signed3(&'a str),
#[regex(r"[+-][0-9]{4}(\.[0-9]+)?", priority = 3)]
Signed4(&'a str),
#[regex(r"[+-][0-9]{5}(\.[0-9]+)?", priority = 3)]
Signed5(&'a str),
#[regex(r"[+-][0-9]{6}(\.[0-9]+)?", priority = 3)]
Signed6(&'a str),
#[regex(r"[+-][0-9]{7}(\.[0-9]+)?", priority = 3)]
Signed7(&'a str),
#[regex(r"[+-][0-9]+(\.[0-9]+)?", priority = 1)]
SignedOther(&'a str),
#[regex(r"CRS[A-Za-z0-9]+")]
CrsId(&'a str),
#[token("/")]
Solidus,
}
impl<'a> Token<'a> {
pub(crate) fn as_signed_str(&self) -> Option<&'a str> {
match self {
Self::Signed2(s)
| Self::Signed3(s)
| Self::Signed4(s)
| Self::Signed5(s)
| Self::Signed6(s)
| Self::Signed7(s)
| Self::SignedOther(s) => Some(s),
_ => None,
}
}
}