mirror of
https://github.com/Noratrieb/jsonformat.git
synced 2026-01-14 14:15:03 +01:00
added #3 support drag and drop in windows
This commit is contained in:
parent
427f285f24
commit
f05b911415
2 changed files with 23 additions and 2 deletions
|
|
@ -29,6 +29,12 @@ OPTIONS:
|
|||
Reads from stdin if no file is supplied.
|
||||
Outputs to stdout if no output file is specified.
|
||||
|
||||
On windows, it writes to a file called `<filename>_f.json`, unless the `--stdout` flag is used or a custom output file is provided. This it to enable drag-and-drop in windows explorer.
|
||||
|
||||
## Error handling
|
||||
`jsonformat` does not report malformed json - it can't even fully know whether the json is actually malformed. Malformed json is just formatted kind of incorrectly, with no data lost and no crashes. If you find one, open an issue,
|
||||
|
||||
|
||||
## How?
|
||||
`jsonformat` does not actually parse the json, it just loops through each character and keeps track of some flags. It then copies these characters to the output buffer, adding and removing whitespace.
|
||||
|
||||
|
|
|
|||
19
src/main.rs
19
src/main.rs
|
|
@ -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)?;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue