🦀/100 Projects/Notes/Source

src/main.rs

View on GitHub
use serde_json::{Value};
use std::env;
use std::fs;
 
fn merge_json(base: &mut Value, patch: &Value) {
    match (base, patch) {
        (Value::Object(base_map), Value::Object(patch_map)) => {
            for (key, patch_value) in patch_map {
                match base_map.get_mut(key) {
                    Some(base_value) => merge_json(base_value, patch_value),
                    None => {
                        base_map.insert(key.clone(), patch_value.clone());
                    }
                }
            }
        }
        (base_value, patch_value) => {
            *base_value = patch_value.clone(); // overwrite
        }
    }
}
 
fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() != 4 {
        eprintln!("Usage: {} <base.json> <patch.json> <output.json>", args[0]);
        return;
    }
 
    let base_path = &args[1];
    let patch_path = &args[2];
    let output_path = &args[3];
 
    let base_data = fs::read_to_string(base_path).expect("Failed to read base.json");
    let patch_data = fs::read_to_string(patch_path).expect("Failed to read patch.json");
 
    let mut base_json: Value = serde_json::from_str(&base_data).expect("Invalid base.json");
    let patch_json: Value = serde_json::from_str(&patch_data).expect("Invalid patch.json");
 
    merge_json(&mut base_json, &patch_json);
 
    fs::write(output_path, serde_json::to_string_pretty(&base_json).unwrap())
        .expect("Failed to write merged output");
 
    println!("✅ Merged JSON saved to {}", output_path);
}

← Back to folder