reifydb-rql 0.4.12

ReifyDB Query Language (RQL) parser and AST
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use super::{keyword::Keyword, operator::Operator, separator::Separator};
use crate::bump::BumpFragment;

#[derive(Debug, Clone, Copy)]
pub struct Token<'bump> {
	pub kind: TokenKind,
	pub fragment: BumpFragment<'bump>,
}

impl PartialEq for Token<'_> {
	fn eq(&self, other: &Self) -> bool {
		self.kind == other.kind && self.value() == other.value()
	}
}

impl Eq for Token<'_> {}

impl<'bump> Token<'bump> {
	pub fn is_eof(&self) -> bool {
		self.kind == TokenKind::EOF
	}
	pub fn is_identifier(&self) -> bool {
		self.kind == TokenKind::Identifier
	}
	pub fn is_literal(&self, literal: Literal) -> bool {
		self.kind == TokenKind::Literal(literal)
	}
	pub fn is_separator(&self, separator: Separator) -> bool {
		self.kind == TokenKind::Separator(separator)
	}
	pub fn is_keyword(&self, keyword: Keyword) -> bool {
		self.kind == TokenKind::Keyword(keyword)
	}
	pub fn is_operator(&self, operator: Operator) -> bool {
		self.kind == TokenKind::Operator(operator)
	}
	pub fn is_keyword_as_ident(&self) -> bool {
		matches!(self.kind, TokenKind::Keyword(_))
	}
	pub fn is_variable(&self) -> bool {
		self.kind == TokenKind::Variable
	}
	pub fn is_system_column(&self) -> bool {
		self.kind == TokenKind::SystemColumn
	}
	pub fn value(&self) -> &str {
		self.fragment.text()
	}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TokenKind {
	EOF,
	Keyword(Keyword),
	Identifier,
	Literal(Literal),
	Operator(Operator),
	Variable,
	Separator(Separator),
	SystemColumn,
}

#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum Literal {
	False,
	Number,
	Temporal,
	Text,
	True,
	None,
}