1use std::fmt;
2
3use crate::keywords::Keyword;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum MultiCharOperator {
9 LessEqual,
11 GreaterEqual,
13 NotEqual,
15 NotEqualAlt,
17 Concat,
19}
20
21impl fmt::Display for MultiCharOperator {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 match self {
24 MultiCharOperator::LessEqual => write!(f, "<="),
25 MultiCharOperator::GreaterEqual => write!(f, ">="),
26 MultiCharOperator::NotEqual => write!(f, "!="),
27 MultiCharOperator::NotEqualAlt => write!(f, "<>"),
28 MultiCharOperator::Concat => write!(f, "||"),
29 }
30 }
31}
32
33#[derive(Debug, Clone, PartialEq)]
35pub enum Token {
36 Keyword(Keyword),
38 Identifier(String),
40 DelimitedIdentifier(String),
42 Number(String),
44 String(String),
46 Symbol(char),
48 Operator(MultiCharOperator),
50 SessionVariable(String),
52 UserVariable(String),
54 Placeholder,
57 NumberedPlaceholder(usize),
60 NamedPlaceholder(String),
63 Semicolon,
65 Comma,
67 LParen,
69 RParen,
71 Eof,
73}
74
75impl fmt::Display for Token {
76 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
77 match self {
78 Token::Keyword(kw) => write!(f, "Keyword({})", kw),
79 Token::Identifier(id) => write!(f, "Identifier({})", id),
80 Token::DelimitedIdentifier(id) => write!(f, "DelimitedIdentifier(\"{}\")", id),
81 Token::Number(n) => write!(f, "Number({})", n),
82 Token::String(s) => write!(f, "String('{}')", s),
83 Token::Symbol(c) => write!(f, "Symbol({})", c),
84 Token::Operator(op) => write!(f, "Operator({})", op),
85 Token::SessionVariable(v) => write!(f, "SessionVariable({})", v),
86 Token::UserVariable(v) => write!(f, "UserVariable({})", v),
87 Token::Placeholder => write!(f, "Placeholder"),
88 Token::NumberedPlaceholder(n) => write!(f, "NumberedPlaceholder(${})", n),
89 Token::NamedPlaceholder(name) => write!(f, "NamedPlaceholder(:{})", name),
90 Token::Semicolon => write!(f, "Semicolon"),
91 Token::Comma => write!(f, "Comma"),
92 Token::LParen => write!(f, "LParen"),
93 Token::RParen => write!(f, "RParen"),
94 Token::Eof => write!(f, "Eof"),
95 }
96 }
97}