fr_trie/
matcher.rs

1//! The Trie Matcher trait
2use std::sync::Arc;
3use serde::{Serialize, Deserialize};
4
5///////////////////////////
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub enum MatchType {
9    Literal,
10    AnyOr
11}
12
13///////////////////////////
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16pub enum State {
17    Accepting,
18    Expecting,
19    Accepted,
20    Rejected,
21    Beyond,
22    Failure(String),
23}
24
25#[derive(Debug, Clone, Copy)]
26pub enum Event {
27    CharIn(char),
28    EndOfStream
29}
30
31#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
32pub struct StateSequence {
33    pub match_type: MatchType,
34    pub sequence: Vec<char>
35}
36
37///! This is the trait on which [Iterator] relies
38///!
39pub trait PushdownStateMachine {
40    fn new() -> Self;
41
42    fn step_in(&mut self, key: &Vec<Arc<StateSequence>>);
43    fn step_out(&mut self);
44
45    fn accepts_more(&self) -> bool;
46    fn feed(&mut self, ev: Event);
47
48    fn state(&self) -> State;
49    fn is_sink(&self) -> bool;
50}
51
52pub enum Ahead {
53    Exactly(char),
54    AnyOr(char),
55    Any,
56}
57
58#[cfg(test)]
59mod tests {
60    use super::*;
61
62    #[test]
63    fn matcher_test() {
64        let ev1 = Event::CharIn(12 as char);
65        let ev2 = Event::EndOfStream;
66        let ev3 = ev2;
67        println!("states = {:?}, {:?} {:?}", ev1.clone(), ev2, ev3);
68    }
69}