use std::path::{Path, PathBuf};
use clap::Args;
use eyre::Result;
use smol_str::SmolStr;
use umls::{
files::Files,
index::build::{build_index, IndexBuilderOptions},
};
#[derive(Args, Debug)]
pub struct BuildIndexArgs {
#[arg(short, long, env)]
pub output: Option<PathBuf>,
#[arg(short = 'i', long, env)]
pub case_insensitive: bool,
#[arg(short, long, env)]
pub sources: Vec<SmolStr>,
#[arg(short, long, env)]
pub languages: Vec<SmolStr>,
#[arg(short = 't', long = "types", env)]
pub semantic_types: Vec<SmolStr>,
}
pub fn run(base_dir: &Path, files: Files, args: BuildIndexArgs) -> Result<()> {
let output = args
.output
.unwrap_or_else(|| base_dir.to_path_buf())
.join("index");
std::fs::create_dir(&output)?;
build_index(IndexBuilderOptions {
output_dir: &output,
files: &files,
case_insensitive: args.case_insensitive,
languages: args.languages,
sources: args.sources,
semantic_types: args.semantic_types,
})?;
Ok(())
}