Skip to main content

wordchipper_cli_util/lexers/
lexer_selector.rs

1use crate::lexers::LexerInventory;
2
3#[derive(clap::Args, Debug)]
4#[group(required = true, multiple = false)]
5pub struct LexerSelectorArgs {
6    /// Model name for selection.
7    #[arg(long)]
8    lexer_model: Option<String>,
9
10    /// Pattern for selection.
11    #[arg(long)]
12    pattern: Option<String>,
13}
14
15impl LexerSelectorArgs {
16    pub fn get_pattern(&self) -> Result<String, Box<dyn std::error::Error>> {
17        if let Some(p) = &self.pattern {
18            log::info!("Selecting Pattern: {}", p);
19            return Ok(p.clone());
20        }
21
22        let name = self.lexer_model.as_ref().unwrap();
23        match LexerInventory::build().find_model(name) {
24            Some(model) => {
25                log::info!("Selecting Model: {}", name);
26                log::info!("Model Pattern: {}", model.pattern);
27                Ok(model.pattern.clone())
28            }
29            None => Err(format!("Model not found: {name}").into()),
30        }
31    }
32}