cl_token/
token_data.rs

1//! Additional data stored within a [Token](super::Token),
2//! external to its [TokenKind](super::token_type::TokenKind)
3/// Additional data stored within a [Token](super::Token),
4/// external to its [TokenKind](super::token_type::TokenKind)
5#[derive(Clone, Debug, PartialEq)]
6pub enum TokenData {
7    /// [Token](super::Token) contains a [String]
8    String(String),
9    /// [Token](super::Token) contains a [character](char)
10    Character(char),
11    /// [Token](super::Token) contains an [integer](u128)
12    Integer(u128),
13    /// [Token](super::Token) contains a [float](f64)
14    Float(f64),
15    /// [Token](super::Token) contains no additional data
16    None,
17}
18from! {
19    value: String => Self::String(value),
20    value: u128 => Self::Integer(value),
21    value: f64 => Self::Float(value),
22    value: char => Self::Character(value),
23    _v:    () => Self::None,
24}
25/// Implements [From] for an enum
26macro from($($value:ident: $src:ty => $dst:expr),*$(,)?) {
27    $(impl From<$src> for TokenData {
28        fn from($value: $src) -> Self { $dst }
29    })*
30}
31impl std::fmt::Display for TokenData {
32    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33        match self {
34            TokenData::String(v) => write!(f, "\"{v}\""),
35            TokenData::Character(v) => write!(f, "'{v}'"),
36            TokenData::Integer(v) => v.fmt(f),
37            TokenData::Float(v) => v.fmt(f),
38            TokenData::None => "None".fmt(f),
39        }
40    }
41}