use crate::cli::error::CliError;
use crate::cli::utils::maybe_plural;
use crate::cli::{CommandResult, GlobalOptions};
use clap::Args;
use darklua_core::{Configuration, GeneratorParameters, Resources};
use std::path::PathBuf;
use std::time::Instant;
#[derive(Debug, Args)]
pub struct Options {
input_path: PathBuf,
output_path: PathBuf,
#[arg(long)]
column_span: Option<usize>,
}
pub fn run(options: &Options, _global: &GlobalOptions) -> CommandResult {
log::debug!("running `minify`: {:?}", options);
let resources = Resources::from_file_system();
let process_options = darklua_core::Options::new(&options.input_path)
.with_output(&options.output_path)
.with_configuration(
Configuration::empty().with_generator(
options
.column_span
.map(|column_span| GeneratorParameters::Dense { column_span })
.unwrap_or_else(GeneratorParameters::default_dense),
),
);
let process_start_time = Instant::now();
let result = darklua_core::process(&resources, process_options);
let process_duration = durationfmt::to_string(process_start_time.elapsed());
let success_count = result.success_count();
match result.result() {
Ok(()) => {
println!(
"successfully minified {} file{} (in {})",
success_count,
maybe_plural(success_count),
process_duration
);
Ok(())
}
Err(errors) => {
let error_count = errors.len();
if success_count > 0 {
eprintln!(
"successfully minified {} file{} (in {})",
success_count,
maybe_plural(success_count),
process_duration
);
eprintln!(
"But {} error{} happened:",
error_count,
maybe_plural(error_count)
);
} else {
eprintln!(
"{} error{} happened:",
error_count,
maybe_plural(error_count)
);
}
errors.iter().for_each(|error| eprintln!("-> {}", error));
Err(CliError::new(1))
}
}
}