aboutsummaryrefslogtreecommitdiffstats
path: root/src/regex/simple.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/regex/simple.rs')
-rw-r--r--src/regex/simple.rs24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/regex/simple.rs b/src/regex/simple.rs
index e75ff14..4286322 100644
--- a/src/regex/simple.rs
+++ b/src/regex/simple.rs
@@ -8,6 +8,7 @@ fn empty_match() -> Option<Match> {
})
}
+#[derive(Debug)]
pub struct Anything;
#[derive(Debug, Clone)]
@@ -17,12 +18,19 @@ impl RegexEngine for Anything {
type CompileError = NotASimpleWildcard;
fn compile(pat: Pattern) -> Result<Self, Self::CompileError> {
- if let Pattern::Rep(pat, 0, None, _) = pat
- && let Pattern::CharacterClass(Class::Everything) = *pat
- {
- Ok(Anything)
- } else {
- Err(NotASimpleWildcard)
+ match pat {
+ Pattern::Rep(pat, 0, None, _) => match *pat {
+ Pattern::CharacterClass(Class::Everything) => Ok(Anything),
+ _ => Err(NotASimpleWildcard),
+ },
+ Pattern::Concat(pats) | Pattern::Alt(pats) => {
+ if !pats.is_empty() && pats.into_iter().all(|p| Anything::compile(p).is_ok()) {
+ Ok(Anything)
+ } else {
+ Err(NotASimpleWildcard)
+ }
+ }
+ _ => Err(NotASimpleWildcard),
}
}
@@ -31,6 +39,7 @@ impl RegexEngine for Anything {
}
}
+#[derive(Debug)]
pub struct Nothing;
#[derive(Debug, Clone)]
pub struct NotASimpleNothing;
@@ -70,8 +79,9 @@ impl RegexEngine for Nothing {
}
}
+#[derive(Debug)]
pub struct Exact {
- bytes: Vec<u8>,
+ pub bytes: Vec<u8>,
}
const MEM_LIMIT: usize = 25_000;