use clap::{Parser, Subcommand};
use std::path::PathBuf;
pub mod commands;
#[derive(Parser)]
#[command(name = "ocr")]
#[command(about = "A pure Rust CLI OCR tool for printed text extraction")]
#[command(version = "0.1.0")]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Extract {
#[arg(value_name = "IMAGE_PATH")]
image_path: PathBuf,
#[arg(short, long, value_name = "FILE")]
output: Option<PathBuf>,
#[arg(short, long, default_value = "en")]
lang: String,
#[arg(long)]
preprocess: bool,
#[arg(short, long, default_value = "text")]
format: String,
#[arg(long, default_value = "3")]
psm: u8,
#[arg(long, default_value = "0.5")]
confidence: f32,
#[arg(long, default_value = "pattern")]
engine: String,
#[arg(long)]
dict_correct: bool,
#[arg(long, default_value = "auto")]
device: String,
#[arg(long)]
osd: bool,
},
Batch {
#[arg(short, long, value_name = "DIR")]
input_dir: PathBuf,
#[arg(short, long, value_name = "DIR")]
output_dir: PathBuf,
#[arg(short, long, default_value = "en")]
lang: String,
#[arg(long, default_value = "0.5")]
confidence: f32,
#[arg(long, default_value = "4")]
max_concurrent: usize,
#[arg(long, default_value = "pattern")]
engine: String,
#[arg(long)]
dict_correct: bool,
#[arg(long, default_value = "auto")]
device: String,
},
Layout {
#[arg(value_name = "IMAGE_PATH")]
image_path: PathBuf,
#[arg(short, long, value_name = "FILE")]
output: Option<PathBuf>,
},
ListLanguages,
Check,
Info,
Validate {
#[arg(value_name = "FILE")]
config_file: PathBuf,
},
#[cfg(feature = "web-api")]
Serve {
#[arg(long, default_value = "127.0.0.1")]
host: String,
#[arg(long, default_value_t = 8080)]
port: u16,
#[arg(long, default_value_t = 20)]
max_upload_size: usize,
},
}
pub fn parse() -> Cli {
Cli::parse()
}