use serde::{Deserialize, Serialize};
pub mod eval_bridge;
pub mod eval_value;
pub mod executor;
pub mod rounding;
pub mod semantics;
pub mod value;
pub use eval_bridge::CellEnv;
pub use eval_value::EvalValue;
pub use executor::{build_dag, run, EvalTrace, RunResult};
pub use value::{CellValue, ExcelError};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
pub enum CellExpr {
Formula(crate::formula::Expr),
Literal(CellValue),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Cell {
pub key: String,
pub expr: CellExpr,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn cell_holds_a_literal_expr() {
let c = Cell {
key: "2_Constants!C17".to_string(),
expr: CellExpr::Literal(CellValue::Number(1.05)),
};
let j = serde_json::to_value(&c).unwrap();
assert_eq!(j["key"], "2_Constants!C17");
assert_eq!(j["expr"]["Literal"]["Number"], 1.05);
}
#[test]
fn cell_holds_a_formula_expr() {
let c = Cell {
key: "S!A1".to_string(),
expr: CellExpr::Formula(crate::formula::Expr::Number(2.0)),
};
let j = serde_json::to_value(&c).unwrap();
assert_eq!(j["expr"]["Formula"]["Number"], 2.0);
}
}