use logos::Logos;
use crate::{NameRef, aux::Stack};
#[derive(Stack!, Logos)]
pub enum Token<'src> {
#[token("create")]
Create,
#[token("pay")]
Pay,
#[token("deliver")]
Deliver,
#[token("balance")]
Balance,
#[token("entity")]
Entity,
#[token("concept")]
Concept,
#[token("object")]
Object,
#[token(".")]
Dot,
#[token(":")]
Colon,
#[token(";")]
Semicolon,
#[token("=")]
Equals,
#[regex(r"\r?\n")]
Newline,
#[regex(r"eur(os)?|EUR|€", priority = 10)]
SignEuro,
#[regex(r"cents?|ct|¢", priority = 10)]
SignCent,
#[regex(r"\d+\.\d{2}")]
Decimal(&'src str),
#[regex(r"\d+")]
Natural(&'src str),
#[regex(r"\p{ID_Start}[\p{ID_Continue}-]*")]
Ident(NameRef<'src>),
#[regex(r"#[^\r\n]*", logos::skip)]
Comment,
#[regex(r"[ \t]+")]
Whitespace,
Error,
}