1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
extern crate regex;

use regex::Regex;

pub struct TokenDefinition<T> {
    name: String,
    regex: Regex,
    conversion: Box<Fn(String) -> T>,
}

impl<T> TokenDefinition<T> {
    pub fn new(name: &str, regex: &str, conversion: Box<Fn(String) -> T>) -> Self {
        TokenDefinition {
            name: String::from(name),
            regex: Regex::new(regex).unwrap(),
            conversion,
        }
    }

    pub fn name(&self) -> &str {
        &self.name
    }

    pub fn regex(&self) -> &Regex {
        &self.regex
    }

    pub fn conversion(&self) -> &Box<Fn(String) -> T> {
        &self.conversion
    }
}