Skip to main content

oxilean_parse/pattern/
patterncompiler_patterns_equivalent_group.rs

1//! # PatternCompiler - patterns_equivalent_group Methods
2//!
3//! This module contains method implementations for `PatternCompiler`.
4//!
5//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
6
7use crate::Pattern;
8
9use super::patterncompiler_type::PatternCompiler;
10
11impl PatternCompiler {
12    /// Check if two patterns are structurally equivalent.
13    pub fn patterns_equivalent(&self, p1: &Pattern, p2: &Pattern) -> bool {
14        match (p1, p2) {
15            (Pattern::Wild, Pattern::Wild) => true,
16            (Pattern::Var(v1), Pattern::Var(v2)) => v1 == v2,
17            (Pattern::Lit(l1), Pattern::Lit(l2)) => l1 == l2,
18            (Pattern::Ctor(n1, a1), Pattern::Ctor(n2, a2)) => {
19                n1 == n2
20                    && a1.len() == a2.len()
21                    && a1
22                        .iter()
23                        .zip(a2.iter())
24                        .all(|(x, y)| self.patterns_equivalent(&x.value, &y.value))
25            }
26            (Pattern::Or(l1, r1), Pattern::Or(l2, r2)) => {
27                self.patterns_equivalent(&l1.value, &l2.value)
28                    && self.patterns_equivalent(&r1.value, &r2.value)
29            }
30            _ => false,
31        }
32    }
33}