nyandere 0.1.2

i help with keeping track of purchases. meow
Documentation
use logos::Logos;

use crate::{NameRef, aux::Stack};

// TODO: allow case-insensitive keywords.
// `CREATE CONCEPT cotton price=2€` allows directly distinguishing between
// what is keyword and what is name
#[derive(Stack!, Logos)]
pub enum Token<'src> {
    // commands
    #[token("create")]
    Create,
    #[token("pay")]
    Pay,
    #[token("deliver")]
    Deliver,
    #[token("balance")]
    Balance,

    // actors
    #[token("entity")]
    Entity,
    #[token("concept")]
    Concept,
    #[token("object")]
    Object,

    // punctuation
    #[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),
    /// See <https://www.unicode.org/reports/tr31/#R1>, very backwards-compatible.
    #[regex(r"\p{ID_Start}[\p{ID_Continue}-]*")]
    Ident(NameRef<'src>),

    #[regex(r"#[^\r\n]*", logos::skip)]
    Comment,
    #[regex(r"[ \t]+")]
    Whitespace,

    Error,
}