kari 0.1.0

An embeddable programming language, writting in and for Rust
Documentation
use crate::data::token::{
    self,
    Span,
    Token,
};


pub struct Expression {
    pub kind: Kind,
    pub span: Span,
}


pub enum Kind {
    Bool(bool),
    Float(f32),
    Number(u32),
    List(Vec<Expression>),
    String(String),
    Symbol(String),
    Word(String),
}

impl Expression {
    pub fn from_token(token: Token) -> Self {
        let kind = match token.kind {
            token::Kind::Bool(value)   => Kind::Bool(value),
            token::Kind::Float(value)  => Kind::Float(value),
            token::Kind::Number(value) => Kind::Number(value),
            token::Kind::String(value) => Kind::String(value),
            token::Kind::Symbol(value) => Kind::Symbol(value),
            token::Kind::Word(value)   => Kind::Word(value),

            kind => panic!("Can convert {} to value", kind),
        };

        Self {
            kind,
            span: token.span,
        }
    }
}