wordchipper_cli_util/lexers/
lexer_selector.rs1use crate::lexers::LexerInventory;
2
3#[derive(clap::Args, Debug)]
4#[group(required = true, multiple = false)]
5pub struct LexerSelectorArgs {
6 #[arg(long)]
8 lexer_model: Option<String>,
9
10 #[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}