69 lines
1.7 KiB
Rust
69 lines
1.7 KiB
Rust
use clap::{Parser, Subcommand};
|
|
use jaby_engine_fconv::images::*;
|
|
use std::path::PathBuf;
|
|
use tool_helper::{Error, exit_with_error};
|
|
|
|
#[derive(Parser)]
|
|
#[clap(about = "Converts files to various JabyEngine related file formats", long_about = None)]
|
|
struct CommandLine {
|
|
#[clap(long="lz4", default_value_t=false)]
|
|
compress_lz4: bool,
|
|
|
|
#[clap(short='o')]
|
|
output_file: Option<PathBuf>,
|
|
|
|
#[clap(value_parser)]
|
|
input_file: Option<PathBuf>,
|
|
|
|
#[clap(subcommand)]
|
|
sub_command: SubCommands,
|
|
}
|
|
|
|
#[derive(Subcommand)]
|
|
enum SubCommands {
|
|
Nothing,
|
|
SimpleTIM(reduced_tim::Arguments)
|
|
}
|
|
|
|
fn run_main(cmd: CommandLine) -> Result<(), Error> {
|
|
let mut input = tool_helper::open_input(cmd.input_file)?;
|
|
let mut buffer = Vec::<u8>::new();
|
|
let mut output_file = tool_helper::open_output(cmd.output_file)?;
|
|
let dst_buffer = {
|
|
if cmd.compress_lz4 {
|
|
&mut buffer as &mut dyn std::io::Write
|
|
}
|
|
|
|
else {
|
|
&mut output_file as &mut dyn std::io::Write
|
|
}
|
|
};
|
|
|
|
match cmd.sub_command {
|
|
SubCommands::Nothing => {
|
|
std::io::copy(&mut input, dst_buffer)?;
|
|
},
|
|
SubCommands::SimpleTIM(args) => {
|
|
reduced_tim::convert(args, input, dst_buffer)?;
|
|
}
|
|
}
|
|
|
|
// We encoded the file to a temporary buffer and now need to write it
|
|
if cmd.compress_lz4 {
|
|
let buffer = tool_helper::compress::psx_default::lz4(&buffer)?;
|
|
output_file.write(&buffer)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn main() {
|
|
match CommandLine::try_parse() {
|
|
Ok(cmd) => {
|
|
if let Err(error) = run_main(cmd) {
|
|
exit_with_error(error);
|
|
}
|
|
},
|
|
Err(error) => println!("{}", error)
|
|
}
|
|
} |