litcheck_filecheck/pattern/
id.rs

1use crate::common::*;
2
3#[derive(Debug, thiserror::Error)]
4#[error("invalid pattern identifier: out of range")]
5pub struct InvalidPatternIdentifier;
6
7pub trait PatternIdentifier: Sized + Copy + PartialEq + Eq + fmt::Debug {
8    fn new(id: usize) -> Result<Self, InvalidPatternIdentifier>;
9    fn new_unchecked(id: usize) -> Self;
10    fn as_usize(&self) -> usize;
11}
12
13impl PatternIdentifier for usize {
14    #[inline(always)]
15    fn new(id: usize) -> Result<Self, InvalidPatternIdentifier> {
16        Ok(id)
17    }
18    #[inline(always)]
19    fn new_unchecked(id: usize) -> Self {
20        id
21    }
22    #[inline(always)]
23    fn as_usize(&self) -> usize {
24        *self
25    }
26}
27
28impl PatternIdentifier for regex_automata::PatternID {
29    fn new(id: usize) -> Result<Self, InvalidPatternIdentifier> {
30        regex_automata::PatternID::new(id).map_err(|_| InvalidPatternIdentifier)
31    }
32    fn new_unchecked(id: usize) -> Self {
33        regex_automata::PatternID::new_unchecked(id)
34    }
35    fn as_usize(&self) -> usize {
36        regex_automata::PatternID::as_usize(self)
37    }
38}
39
40impl PatternIdentifier for aho_corasick::PatternID {
41    fn new(id: usize) -> Result<Self, InvalidPatternIdentifier> {
42        aho_corasick::PatternID::new(id).map_err(|_| InvalidPatternIdentifier)
43    }
44    fn new_unchecked(id: usize) -> Self {
45        aho_corasick::PatternID::new_unchecked(id)
46    }
47    fn as_usize(&self) -> usize {
48        aho_corasick::PatternID::as_usize(self)
49    }
50}