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 for pattern in self.patterns.iter() {
24 let match_len = pattern.matches(tokens, source);
25
26 if match_len > 0 {
27 return match_len;
28 }
29 }
30
31 0
32 }
33}