fn to_tokens()

in yaml_test_runner/src/step/comparison.rs [67:101]


    fn to_tokens(&self, tokens: &mut Tokens) {
        let expr = self.expr.expression();
        let op = match self.op.as_str() {
            "lte" => "<=",
            "lt" => "<",
            "gt" => ">",
            "gte" => ">=",
            n => panic!("unsupported op {}", n),
        };

        match self.value.as_i64() {
            Some(i) => self.assert(i, &expr, op, tokens),
            None => match self.value.as_f64() {
                Some(f) => self.assert(f, &expr, op, tokens),
                None => {
                    match self.value.as_str() {
                        // handle "set" values
                        Some(s) if s.starts_with('$') => {
                            let s = s
                                .trim_start_matches('$')
                                .trim_start_matches('{')
                                .trim_end_matches('}');
                            let expr_ident = syn::Ident::from(expr.as_str());
                            let ident = syn::Ident::from(s);
                            let op_ident = syn::Ident::from(op);
                            tokens.append(quote! {
                                assert_comparison_from_set_value!(&json#expr_ident, #op_ident #ident);
                            });
                        }
                        _ => panic!("Expected i64 or f64 but found {:?}", &self.value),
                    }
                }
            },
        }
    }