grit_pattern_matcher/pattern/
equal.rs1use super::{
2 functions::{Evaluator, FuncEvaluation},
3 patterns::{Pattern, PatternName},
4 variable::Variable,
5 State,
6};
7use crate::context::{ExecContext, QueryContext};
8use grit_util::{error::GritResult, AnalysisLogs};
9
10#[derive(Debug, Clone)]
11pub struct Equal<Q: QueryContext> {
12 pub var: Variable,
13 pub pattern: Pattern<Q>,
14}
15
16impl<Q: QueryContext> Equal<Q> {
17 pub fn new(var: Variable, pattern: Pattern<Q>) -> Self {
18 Self { var, pattern }
19 }
20}
21
22impl<Q: QueryContext> PatternName for Equal<Q> {
23 fn name(&self) -> &'static str {
24 "EQUAL"
25 }
26}
27
28impl<Q: QueryContext> Evaluator<Q> for Equal<Q> {
29 fn execute_func<'a>(
30 &'a self,
31 state: &mut State<'a, Q>,
32 context: &'a Q::ExecContext<'a>,
33 logs: &mut AnalysisLogs,
34 ) -> GritResult<FuncEvaluation<Q>> {
35 let lhs_text = self.var.text(state, context.language())?;
36 let rhs_text = self.pattern.text(state, context, logs)?;
37 Ok(FuncEvaluation {
38 predicator: lhs_text == rhs_text,
39 ret_val: None,
40 })
41 }
42}