harper_core/patterns/
naive_pattern_group.rs

1use super::Pattern;
2use crate::Token;
3
4/// A naive pattern collection that naively iterates through a list of patterns,
5/// returning the first one that matches.
6#[derive(Default)]
7pub struct NaivePatternGroup {
8    patterns: Vec<Box<dyn Pattern>>,
9}
10
11impl NaivePatternGroup {
12    pub fn push(&mut self, pattern: Box<dyn Pattern>) {
13        self.patterns.push(pattern);
14    }
15}
16
17impl Pattern for NaivePatternGroup {
18    fn matches(&self, tokens: &[Token], source: &[char]) -> Option<usize> {
19        self.patterns
20            .iter()
21            .filter_map(|p| p.matches(tokens, source))
22            .next()
23    }
24}