added #3 support drag and drop in windows

This commit is contained in:
nora 2021-07-18 11:56:01 +02:00
parent 427f285f24
commit f05b911415
2 changed files with 23 additions and 2 deletions

View file

@ -6,9 +6,10 @@ use std::io::Read;
fn main() -> Result<(), io::Error> {
let matches = clap_app!(jsonformat =>
(version: "1.0")
(version: "1.1")
(author: "nilstrieb <nilstrieb@gmail.com>")
(about: "Formats json from stdin or from a file")
(@arg stdout: -s --stdout "Output the result to stdout instead of the default output file. Windows only.")
(@arg indentation: -i --indent +takes_value "Set the indentation used (\\s for space, \\t for tab)")
(@arg output: -o --output +takes_value "The output file for the formatted json")
(@arg input: "The input file to format")
@ -37,7 +38,21 @@ fn main() -> Result<(), io::Error> {
let formatted = format_json(&str, replaced_indent.as_deref());
match matches.value_of("output") {
let mut output = matches.value_of("output");
let mut windows_output_default_file: Option<String> = None;
#[cfg(windows)]
if !matches.is_present("stdout") {
if let Some(file) = matches.value_of("input") {
// on windows, set the default output file if no stdout flag is provided
// this makes it work with drag and drop in windows explorer
windows_output_default_file = Some(file.replace(".json", "_f.json"))
}
}
output = windows_output_default_file.as_deref().or(output);
match output {
Some(file) => {
fs::write(file, formatted)?;
}