openpql_pql_parser/ast/
fncall.rs1use super::{Expr, Ident, Loc, String};
2
3#[derive(Clone, PartialEq, derive_more::From, derive_more::Debug)]
4#[debug("{:?}({})", self.name, _to_str(&self.args))]
5pub struct FnCall<'i> {
6 pub name: Ident<'i>,
7 pub args: Vec<Expr<'i>>,
8
9 pub loc: (Loc, Loc),
10}
11
12fn _to_str(elems: &[Expr<'_>]) -> String {
13 elems
14 .iter()
15 .map(|e| format!("{e:?}"))
16 .collect::<Vec<_>>()
17 .join(",")
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use crate::*;
24
25 #[test]
26 fn test_fn_call() {
27 let src = "equity(hero, river)";
28 let fncall = parse_fn_call(src).unwrap();
29
30 let ident = |id| Ident::from((id, loc(src, id)));
31
32 assert_eq!(fncall.name, ident("equity"));
33 assert_eq!(fncall.args.len(), 2);
34 assert_eq!(fncall.args[0], ident("hero").into());
35 assert_eq!(fncall.args[1], ident("river").into());
36 assert_eq!(fncall.loc, (0, src.len()));
37 }
38
39 #[test]
40 fn test_debug() {
41 let fncall = parse_fn_call("equity(hero, 1.23)").unwrap();
42
43 assert_eq!(format!("{fncall:?}"), "equity(hero,1.23)");
44 }
45}