use chrono::{DateTime, FixedOffset};
#[derive(Debug, Copy, Clone)]
pub enum Function {
Abs,
Sum,
Product,
Average,
Or,
And,
Xor,
Not,
Negate,
Days,
Right,
Left,
Iff,
IsBlank,
}
#[derive(Debug, Copy, Clone)]
pub enum Operator {
Plus,
Minus,
Multiply,
Divide,
Power,
Concat,
Equal,
NotEqual,
Greater,
Less,
GreaterOrEqual,
LessOrEqual,
Function(Function),
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum Error {
Div0,
Cast,
Parse,
Value,
Argument,
Reference,
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum Boolean {
True,
False,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Value {
Number(f32),
Text(String),
Boolean(Boolean),
Iterator(Vec<Value>),
Error(Error),
Date(DateTime<FixedOffset>),
Blank,
}
#[derive(Debug, Clone)]
pub enum Formula {
Operation(Expression),
Value(Value),
Reference(String),
Iterator(Vec<Formula>),
}
#[derive(Debug, Clone)]
pub struct Expression {
pub op: Operator,
pub values: Vec<Formula>,
}