brack-parser 0.1.0

The parser for the Brack markup language
Documentation
use brack_tokenizer::tokens::{Location, LocationData, Token};

pub fn check_text(tokens: &Vec<Token>) -> bool {
    matches!(tokens.first(), Some(Token::Text(_, _)))
}

pub fn check_eof(tokens: &Vec<Token>) -> bool {
    matches!(tokens.first(), Some(Token::EOF(_)))
}

pub fn consume_by_kind(tokens: &[Token], kind: Token) -> (bool, Vec<Token>) {
    let (head, tail) = tokens.split_first().unwrap_or((
        &Token::EOF(Location {
            start: LocationData {
                line: 0,
                character: 0,
            },
            end: LocationData {
                line: 0,
                character: 0,
            },
        }),
        &[],
    ));
    if matches_kind(head, &kind) {
        (true, tail.to_vec())
    } else {
        (false, tokens.to_vec())
    }
}

pub fn matches_kind(token: &Token, kind: &Token) -> bool {
    use Token::*;
    match (token, kind) {
        (Empty(_), Empty(_)) => true,
        (Text(_, _), Text(_, _)) => true,
        (Ident(_, _), Ident(_, _)) => true,
        (NewLine(_), NewLine(_)) => true,
        (Dot(_), Dot(_)) => true,
        (AngleBracketOpen(_), AngleBracketOpen(_)) => true,
        (AngleBracketClose(_), AngleBracketClose(_)) => true,
        (SquareBracketOpen(_), SquareBracketOpen(_)) => true,
        (SquareBracketClose(_), SquareBracketClose(_)) => true,
        (CurlyBracketOpen(_), CurlyBracketOpen(_)) => true,
        (CurlyBracketClose(_), CurlyBracketClose(_)) => true,
        (Comma(_), Comma(_)) => true,
        (EOF(_), EOF(_)) => true,
        _ => false,
    }
}