format-json #
This code is used to format JSON files in a directory and its subdirectories.
It takes an optional command line argument which is the path to the directory.
If no argument is provided, it uses a default directory path.
It uses the serde_json
crate to parse and format the JSON files, and the walkdir
crate to recursively traverse directories.
use serde_json::Value;
use std::fs;
use std::path::Path;
use std::io::Write;
use walkdir::WalkDir;
use std::env;
// The main function starts the script.
// It reads the command line arguments and sets the directory path.
// Then it traverses the directory and its subdirectories using WalkDir.
// For each JSON file it finds, it calls `format_json_file` to format it.
fn main() {
// Read command line arguments
let args: Vec<String> = env::args().collect();
// Set directory path
let directory_path = if args.len() > 1 {
&args[1]
} else {
"E:/projects/yiff_toolkit/ponyxl_loras"
};
// Traverse directory and its subdirectories
for entry in WalkDir::new(directory_path) {
let entry = entry.unwrap();
let path = entry.path();
// If the file is a JSON file, format it
if path.extension().unwrap_or_default() == "json" {
if let Err(e) = format_json_file(&path) {
println!("Failed to format {}: {e}", path.display());
}
}
}
}
// The `format_json_file` function formats a JSON file.
// It reads the file, parses the JSON, formats it, and writes it back to the file.
// If any of these steps fail, it returns an error.
fn format_json_file(path: &Path) -> Result<(), Box<dyn std::error::Error>> {
println!("Processing file: {}", path.display());
// Read the file
let file_content = fs::read_to_string(&path)?;
// Parse the JSON
let json: Value = serde_json::from_str(&file_content)?;
// Format the JSON
let pretty_json = serde_json::to_string_pretty(&json)?;
// Write the formatted JSON back to the file
let mut file = fs::File::create(&path)?;
file.write_all(pretty_json.as_bytes())?;
println!("Formatted {} successfully.", path.display());
Ok(())
}