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 CosineDistance,
21 NegativeInnerProduct,
23 L2Distance,
25}
26
27impl fmt::Display for MultiCharOperator {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 match self {
30 MultiCharOperator::LessEqual => write!(f, "<="),
31 MultiCharOperator::GreaterEqual => write!(f, ">="),
32 MultiCharOperator::NotEqual => write!(f, "!="),
33 MultiCharOperator::NotEqualAlt => write!(f, "<>"),
34 MultiCharOperator::Concat => write!(f, "||"),
35 MultiCharOperator::CosineDistance => write!(f, "<->"),
36 MultiCharOperator::NegativeInnerProduct => write!(f, "<#>"),
37 MultiCharOperator::L2Distance => write!(f, "<=>"),
38 }
39 }
40}
41
42#[derive(Debug, Clone, PartialEq)]
44pub enum Token {
45 Keyword(Keyword),
47 Identifier(String),
49 DelimitedIdentifier(String),
51 Number(String),
53 String(String),
55 Symbol(char),
57 Operator(MultiCharOperator),
59 SessionVariable(String),
61 UserVariable(String),
63 Placeholder,
66 NumberedPlaceholder(usize),
69 NamedPlaceholder(String),
72 Semicolon,
74 Comma,
76 LParen,
78 RParen,
80 Eof,
82}
83
84impl fmt::Display for Token {
85 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
86 match self {
87 Token::Keyword(kw) => write!(f, "Keyword({})", kw),
88 Token::Identifier(id) => write!(f, "Identifier({})", id),
89 Token::DelimitedIdentifier(id) => write!(f, "DelimitedIdentifier(\"{}\")", id),
90 Token::Number(n) => write!(f, "Number({})", n),
91 Token::String(s) => write!(f, "String('{}')", s),
92 Token::Symbol(c) => write!(f, "Symbol({})", c),
93 Token::Operator(op) => write!(f, "Operator({})", op),
94 Token::SessionVariable(v) => write!(f, "SessionVariable({})", v),
95 Token::UserVariable(v) => write!(f, "UserVariable({})", v),
96 Token::Placeholder => write!(f, "Placeholder"),
97 Token::NumberedPlaceholder(n) => write!(f, "NumberedPlaceholder(${})", n),
98 Token::NamedPlaceholder(name) => write!(f, "NamedPlaceholder(:{})", name),
99 Token::Semicolon => write!(f, "Semicolon"),
100 Token::Comma => write!(f, "Comma"),
101 Token::LParen => write!(f, "LParen"),
102 Token::RParen => write!(f, "RParen"),
103 Token::Eof => write!(f, "Eof"),
104 }
105 }
106}