mod tools;
use std::{fs, process};
use clap::{Parser, Subcommand};
use ufftools::write_uff;
#[derive(Parser)]
#[command(name = "uff-tools", about = "Work with .uff character packages", version)]
struct Args {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
Inspect {
file: String,
#[arg(short, long)]
verbose: bool,
#[arg(short, long, value_name = "NAME")]
anim: Option<String>,
},
Generate {
file: String,
},
}
fn generate_package(file: &str) {
let pkg = tools::gen_fixture::generate_fixture();
let data = write_uff(&pkg).unwrap_or_else(|e| {
eprintln!("error: failed to encode package: {e}");
process::exit(1);
});
fs::write(file, &data).unwrap_or_else(|e| {
eprintln!("error: cannot write to \"{file}\": {e}");
process::exit(1);
});
println!("wrote {} bytes to {file}", data.len());
}
fn main() {
let args = Args::parse();
match args.command {
Command::Inspect { file, verbose, anim } => {
tools::inspect::inspect_package(&file, verbose, anim.as_deref());
}
Command::Generate { file } => {
generate_package(&file);
}
}
}