wagon_codegen/nodes/
comp.rs1use 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}