harper_core/patterns/
either_pattern.rs1use crate::Token;
2
3use super::Pattern;
4
5#[derive(Default)]
7pub struct EitherPattern {
8 patterns: Vec<Box<dyn Pattern>>,
9}
10
11impl EitherPattern {
12 pub fn new(patterns: Vec<Box<dyn Pattern>>) -> Self {
13 Self { patterns }
14 }
15
16 pub fn add(&mut self, pattern: Box<dyn Pattern>) {
17 self.patterns.push(pattern);
18 }
19}
20
21impl Pattern for EitherPattern {
22 fn matches(&self, tokens: &[Token], source: &[char]) -> usize {
23 let mut longest = 0;
24
25 for pattern in self.patterns.iter() {
26 let match_len = pattern.matches(tokens, source);
27
28 if match_len > longest {
29 longest = match_len
30 }
31 }
32
33 longest
34 }
35}