use anyhow::Result;
use clap::{Parser, ValueEnum};
use codebank::{Bank, BankConfig, BankStrategy, CodeBank};
use std::fs;
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[clap(
name = "codebank",
about = "A tool to generate code banks from source code",
version
)]
struct Cli {
input: PathBuf,
#[clap(short, long)]
output: Option<PathBuf>,
#[clap(short, long, value_enum, default_value_t = OutputStrategy::Default)]
strategy: OutputStrategy,
}
#[derive(Copy, Clone, Debug, ValueEnum)]
enum OutputStrategy {
Default,
NoTests,
Summary,
}
fn main() -> Result<()> {
let cli = Cli::parse();
let code_bank = CodeBank::try_new()?;
let strategy = match cli.strategy {
OutputStrategy::Default => BankStrategy::Default,
OutputStrategy::NoTests => BankStrategy::NoTests,
OutputStrategy::Summary => BankStrategy::Summary,
};
let config = BankConfig::new(cli.input, strategy, vec![]);
let content = code_bank.generate(&config)?;
if let Some(output_file) = cli.output {
fs::write(&output_file, content)?;
println!("Code bank written to {}", output_file.display());
} else {
println!("{}", content);
}
Ok(())
}