1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
use crate::parser::parse::span::*; use crate::parser::parse::unit::*; use crate::Text; use std::fmt; #[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)] pub enum RawToken { Integer(i64), Size(i64, Unit), String(Span), Variable(Span), Bare, } impl RawToken { pub fn type_name(&self) -> &'static str { match self { RawToken::Integer(_) => "Integer", RawToken::Size(..) => "Size", RawToken::String(_) => "String", RawToken::Variable(_) => "Variable", RawToken::Bare => "String", } } } pub type Token = Spanned<RawToken>; impl Token { pub fn debug(&self, source: &'a Text) -> DebugToken<'a> { DebugToken { node: *self, source, } } } pub struct DebugToken<'a> { node: Token, source: &'a Text, } impl fmt::Debug for DebugToken<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.node.span().slice(self.source)) } }