skillet 0.6.3

Skillet: micro expression language (arithmetic, logical, functions, arrays, conditionals, excel formulas) made in Rust bin cli and server
Documentation
use std::rc::Rc;

#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
    Number(f64),
    StringLit(String),
    Null,
    Unary(UnaryOp, Rc<Expr>),
    Binary(Rc<Expr>, BinaryOp, Rc<Expr>),
    Variable(String),
    PropertyAccess { target: Rc<Expr>, property: String },
    SafePropertyAccess { target: Rc<Expr>, property: String },
    SafeMethodCall { target: Rc<Expr>, name: String, args: Vec<Expr> },
    FunctionCall { name: String, args: Vec<Expr> },
    Spread(Rc<Expr>),
    Array(Vec<Expr>),
    ObjectLiteral(Vec<(String, Expr)>),
    MethodCall { target: Rc<Expr>, name: String, args: Vec<Expr>, predicate: bool },
    Index { target: Rc<Expr>, index: Rc<Expr> },
    Slice { target: Rc<Expr>, start: Option<Rc<Expr>>, end: Option<Rc<Expr>> },
    TypeCast { expr: Rc<Expr>, ty: TypeName },
    Assignment { variable: String, value: Rc<Expr> },
    Sequence(Vec<Expr>),
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TypeName {
    Integer,
    Float,
    String,
    Boolean,
    Array,
    Currency,
    DateTime,
    Json,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnaryOp {
    Plus,
    Minus,
    Not,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BinaryOp {
    Add,
    Sub,
    Mul,
    Div,
    Mod,
    Pow,
    Gt,
    Lt,
    Ge,
    Le,
    Eq,
    Ne,
    And,
    Or,
}