1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/// Defines Excel Functions.
#[derive(Debug)]
pub enum Function {
    Abs,
    Sum,
    Product,
    Or,
    And,
    Xor,
    Not,
}

/// Defines Excel Operators.
#[derive(Debug)]
pub enum Operator {
    Plus,
    Minus,
    Multiply,
    Divide,
    Power,
    Concat,
    Equal,
    NotEqual,
    Greater,
    Less,
    GreaterOrEqual,
    LessOrEqual,
    Function(Function),
}

/// Defines error types.
#[derive(Debug)]
pub enum Error {
    Div0,
    Cast,
    Formula,
    Parse,
    Value,
}

/// Defines boolean types.
#[derive(Debug)]
pub enum Boolean {
    True,
    False,
}

/// The result of an evaluation.
#[derive(Debug)]
pub enum Value {
    Number(f32),
    Text(String),
    Boolean(Boolean),
    Error(Error),
}

/// Defines each term in Expression Struct.
#[derive(Debug)]
pub enum Formula {
    Operation(Expression),
    Value(Value),
    Reference(String),
}

/// Struct that holds a parsed string. Formula enum and Expression Struct are defined recursively.
#[derive(Debug)]
pub struct Expression {
    pub op: Operator,
    pub values: Vec<Formula>,
}