#[derive(Debug, Eq, PartialEq, Clone)] pub struct Token { start: usize, end: usize, kind: TokenKind, } impl Token { pub fn new(start: usize, end: usize, kind: TokenKind) -> Self { Self { start, end, kind } } pub fn start(&self) -> usize { self.start } pub fn end(&self) -> usize { self.end } pub fn kind(&self) -> TokenKind { self.kind } } #[derive(Debug, Clone, Copy, Eq, PartialEq)] pub enum TokenKind { Fn, Identifier, LeftParentheses, RightParentheses, End, Let, Equals, IntegerLiteral, LongLiteral, String, Extern, Comma, Colon, RightArrow, Plus, Minus, }