Skip to main content

clockwords/
lib.rs

1pub mod lang;
2pub mod resolve;
3pub mod scanner;
4pub mod types;
5
6pub use chrono_tz::Tz;
7pub use scanner::TimeExpressionScanner;
8pub use types::*;
9
10/// Create a scanner with all four languages enabled (EN, DE, FR, ES).
11pub fn default_scanner() -> TimeExpressionScanner {
12    scanner_for_languages(&["en", "de", "fr", "es"])
13}
14
15/// Create a scanner for specific languages.
16///
17/// Supported language ids: `"en"`, `"de"`, `"fr"`, `"es"`.
18/// Languages are tried in the order given; earlier languages take priority
19/// when deduplicating overlapping matches.
20pub fn scanner_for_languages(lang_ids: &[&str]) -> TimeExpressionScanner {
21    let languages: Vec<Box<dyn lang::LanguageParser>> = lang_ids
22        .iter()
23        .filter_map(|id| match *id {
24            "en" => Some(Box::new(lang::en::English::new()) as Box<dyn lang::LanguageParser>),
25            "de" => Some(Box::new(lang::de::German::new()) as Box<dyn lang::LanguageParser>),
26            "fr" => Some(Box::new(lang::fr::French::new()) as Box<dyn lang::LanguageParser>),
27            "es" => Some(Box::new(lang::es::Spanish::new()) as Box<dyn lang::LanguageParser>),
28            _ => None,
29        })
30        .collect();
31
32    TimeExpressionScanner::new(languages, ParserConfig::default())
33}
34
35// Tests have been moved to the `tests/` directory.