formualizer_eval/macros/
arg.rs

1#[macro_export]
2macro_rules! arg {
3    // ----- boolean -----
4    ($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    // ----- number -----
19    ($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    }}; // more coercions (text, date, range) as you need…
33}