litcheck_filecheck/pattern/
id.rs1use 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}