formualizer_eval/macros/
arg.rs1#[macro_export]
2macro_rules! arg {
3 ($h:expr => bool) => {{
5 use formualizer_parse::types::LiteralValue as V;
6 let v = $h.value()?;
7 match v.as_ref() {
8 V::Boolean(b) => Ok(*b),
9 V::Number(n) => Ok(*n != 0.0),
10 V::Int(i) => Ok(*i != 0),
11 V::Empty => Ok(false),
12 V::Error(e) => Err($crate::error::ExcelError::from(e.clone())),
13 _ => Err($crate::error::ExcelError::new(
14 $crate::error::ExcelErrorKind::Value,
15 )),
16 }
17 }};
18 ($h:expr => f64) => {{
20 use formualizer_parse::types::LiteralValue as V;
21 let v = $h.value()?;
22 match v.as_ref() {
23 V::Number(n) => Ok(*n),
24 V::Int(i) => Ok(*i as f64),
25 V::Boolean(b) => Ok(if *b { 1.0 } else { 0.0 }),
26 V::Empty => Ok(0.0),
27 V::Error(e) => Err($crate::error::ExcelError::from(e.clone())),
28 _ => Err($crate::error::ExcelError::new(
29 $crate::error::ExcelErrorKind::Value,
30 )),
31 }
32 }}; }