duckling 0.4.0

A Rust port of Facebook's Duckling library for parsing natural language into structured data
Documentation
use crate::pattern::regex;
use crate::types::{Rule, TokenData};

use super::Grain;

pub fn rules() -> Vec<Rule> {
    vec![
        Rule {
            name: "secunde (grain)".to_string(),
            pattern: vec![regex("sec(und(a|e|ă))?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Second))),
        },
        Rule {
            name: "minute (grain)".to_string(),
            pattern: vec![regex("min(ut(e|ul)?)?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Minute))),
        },
        Rule {
            name: "ore (grain)".to_string(),
            pattern: vec![regex("h|or(a|e(le)?|ă)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Hour))),
        },
        Rule {
            name: "zile (grain)".to_string(),
            pattern: vec![regex("zi(le(le)?|u(a|ă))?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Day))),
        },
        Rule {
            name: "saptamani (grain)".to_string(),
            pattern: vec![regex("sapt(a|ă)m(a|â)n(ile|a|ă|i)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Week))),
        },
        Rule {
            name: "luni (grain)".to_string(),
            pattern: vec![regex("lun(i(le)?|a|ă)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Month))),
        },
        Rule {
            name: "trimestru (grain)".to_string(),
            pattern: vec![regex("trimestr(e(le)?|ul?)")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Quarter))),
        },
        Rule {
            name: "ani (grain)".to_string(),
            pattern: vec![regex("an(ul|ii?)?")],
            production: Box::new(|_| Some(TokenData::TimeGrain(Grain::Year))),
        },
    ]
}