1use crate::span::Span;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum TokenKind {
5 Keyword(&'static str),
6 Identifier(String),
7 Number(String),
8 String(String),
9 BinaryString(Vec<u8>),
10 Regex {
11 pattern: String,
12 parts: Vec<TemplatePart>,
13 flags: String,
14 },
15 Template(Vec<TemplatePart>),
16 Operator(String),
17 Punct(char),
18 Eof,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq)]
22pub struct Token {
23 pub kind: TokenKind,
24 pub span: Span,
25}
26
27impl Token {
28 pub fn new(kind: TokenKind, span: Span) -> Self {
29 Self { kind, span }
30 }
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub enum TemplatePart {
35 Text { line: usize, value: String },
36 Expr { line: usize, source: String },
37}