#![deny(unused_crate_dependencies)]
mod exec;
mod platform;
use std::path::PathBuf;
use clap::Parser;
use crate::exec::CargoFmtOptions;
use crate::exec::RustfmtOptions;
use crate::exec::RustfmtStdioOptions;
#[derive(Debug, Parser)]
pub struct Command {
#[arg(short = 'c', long = "config")]
pub config: Option<PathBuf>,
#[arg(long = "check")]
pub check: bool,
#[arg(long = "preserve-config")]
pub preserve_config: bool,
#[arg(long = "stdin")]
pub stdin: bool,
#[arg(short = 'f', long = "file")]
pub files: Vec<PathBuf>,
#[arg(raw = true)]
additional_args: Vec<String>,
}
fn main() -> anyhow::Result<()> {
let mut args = std::env::args().collect::<Vec<String>>();
if let Some(arg) = args.get(1)
&& arg == "xfmt"
{
args.remove(0);
}
let command = Command::parse_from(&args);
if command.stdin {
exec::rustfmt_stdio(RustfmtStdioOptions {
check: command.check,
preserve_config: command.preserve_config,
additional_args: command.additional_args,
})
}
else if !command.files.is_empty() {
exec::rustfmt(RustfmtOptions {
check: command.check,
files: command.files,
preserve_config: command.preserve_config,
additional_args: command.additional_args,
})
}
else {
exec::cargo_fmt(CargoFmtOptions {
check: command.check,
preserve_config: command.preserve_config,
additional_args: command.additional_args,
})
}
}