pub(crate) mod generate;
mod input;
mod warm_cache;
use std::path::PathBuf;
use std::process::ExitCode;
use clap::Parser;
#[derive(Debug, Parser)]
#[command(version, about)]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Debug, clap::Subcommand)]
enum Command {
Generate(generate::GenerateArgs),
WarmCache(warm_cache::WarmCacheArgs),
Config(ConfigArgs),
}
#[derive(Debug, Parser)]
struct ConfigArgs {
#[command(subcommand)]
command: ConfigCommand,
}
#[derive(Debug, clap::Subcommand)]
enum ConfigCommand {
Translate(TranslateArgs),
}
#[derive(Debug, Parser)]
struct TranslateArgs {
#[arg(long)]
from: PathBuf,
#[arg(long)]
to: PathBuf,
}
pub fn run() -> ExitCode {
let cli = Cli::parse();
match cli.command {
Command::Generate(args) => {
if let Err(e) = generate::generate(&args) {
eprintln!("Error: {e:?}");
ExitCode::FAILURE
} else {
ExitCode::SUCCESS
}
}
Command::WarmCache(args) => {
if let Err(e) = warm_cache::warm_cache(&args) {
eprintln!("Error: {e:?}");
ExitCode::FAILURE
} else {
ExitCode::SUCCESS
}
}
Command::Config(args) => match args.command {
ConfigCommand::Translate(args) => {
if let Err(e) = crate::config::cbindgen::translate(&args.from, &args.to) {
eprintln!("Error: {e}");
ExitCode::FAILURE
} else {
ExitCode::SUCCESS
}
}
},
}
}