use std::str::FromStr; #[derive(PartialEq, Debug, Clone, Copy)] pub enum Op { Add, Sub, Mul, Div, Modulo, Equals, Greater, GrEqTo, Less, LsEqTo, Define, } impl FromStr for Op { type Err = String; fn from_str(s: &str) -> Result { match s { "+" => Ok(Op::Add), "-" => Ok(Op::Sub), "*" => Ok(Op::Mul), "/" => Ok(Op::Div), "%" => Ok(Op::Modulo), "=" => Ok(Op::Equals), ">" => Ok(Op::Greater), ">=" => Ok(Op::GrEqTo), "<" => Ok(Op::Less), "<=" => Ok(Op::LsEqTo), "define" => Ok(Op::Define), x => Err(format!("{} is not an operator", x)) } } } #[derive(PartialEq, Debug, Clone)] pub enum Number { Int(isize), Float(f32) } #[derive(PartialEq, Debug, Clone)] pub enum Type { Bool(bool), Number(Number), Str(String), Symbol(String), Operator(Op), }