wagon_codegen/nodes/
comp.rs

1use quote::quote;
2
3use crate::SpannableIdent;
4
5use super::{Rc, ToTokensState};
6use proc_macro2::{TokenStream, Ident};
7
8use wagon_parser::parser::comp::{Comparison, CompOp};
9
10impl<U> ToTokensState<U> for Comparison {
11    fn to_tokens(&self, state: &mut U, label: Rc<Ident>, attr_fun: fn(&mut U, Rc<Ident>, SpannableIdent)) -> TokenStream {
12        if let Some(comp_op) = &self.comp {
13            let left = self.sum.to_tokens(state, label.clone(), attr_fun);
14            let op  = &comp_op.op;
15            let right = comp_op.right.to_tokens(state, label, attr_fun);
16            if matches!(op, CompOp::In) {
17                quote!(
18                    wagon_value::Value::from((#left.contains(#right)))
19                )
20            } else {
21                quote!(
22                    wagon_value::Value::from((#left #op #right))
23                )
24            }
25        } else {
26            self.sum.to_tokens(state, label, attr_fun)
27        }
28    }
29}