unitdc 0.1.0

A dc-like arbitrary precision quantity calculator.
Documentation
use num_rational::BigRational;
use num_traits::ToPrimitive;

#[derive(Debug, PartialEq)]
pub enum Token {
    Number(BigRational),
    Unit(String),
    Add,
    Sub,
    Mul,
    Div,
    VarStore(String),
    VarRecall(String),
    Operator(char),
    MacroInvoke((String, String)),
    Comment(String),
}

impl Token {
    pub fn roughly_eq(&self, other: &Self) -> bool {
        match (self, other) {
            (Token::Number(a), Token::Number(b)) => a.to_f64().unwrap() == b.to_f64().unwrap(),
            (Token::Unit(a), Token::Unit(b)) => a == b,
            (Token::Add, Token::Add) => true,
            (Token::Sub, Token::Sub) => true,
            (Token::Mul, Token::Mul) => true,
            (Token::Div, Token::Div) => true,
            (Token::Operator(a), Token::Operator(b)) => a == b,
            _ => false,
        }
    }
}