use std::str::FromStr;
use logos::{Lexer, Logos, Span};
use crate::Loc;
impl From<Span> for Loc {
fn from(value: Span) -> Self {
Loc {
start: value.start.try_into().unwrap(),
end: value.end.try_into().unwrap(),
}
}
}
pub fn location<'src, T: Logos<'src>>(lexer: &mut Lexer<'src, T>) -> Loc {
lexer.span().into()
}
pub fn string<'src, T: Logos<'src, Source = str>>(
lexer: &mut Lexer<'src, T>,
) -> (Loc, &'src str) {
(location(lexer), lexer.slice())
}
pub fn parse<'src, T: Logos<'src, Source = str>, R: FromStr>(lexer: &mut Lexer<'src, T>) -> Option<(Loc, R)> {
Some((lexer.span().into(), lexer.slice().parse().ok()?))
}