jpostcode_rs 0.1.1

Japanese postal code lookup library in Rust, powered by jpostcode-data
Documentation
use serde_json::Value;
use std::collections::HashMap;
use std::fs;
use std::path::Path;
use walkdir::WalkDir;

fn main() {
    println!("cargo:rerun-if-changed=jpostcode-data/data/json");

    let json_dir = Path::new("jpostcode-data/data/json");
    let out_dir = std::env::var("OUT_DIR").unwrap();
    let dest_path = Path::new(&out_dir).join("address_data.json");

    let mut merged_data = HashMap::new();

    for entry in WalkDir::new(json_dir).into_iter().filter_map(|e| e.ok()) {
        if entry.file_type().is_file()
            && entry.path().extension().map_or(false, |ext| ext == "json")
        {
            let content = fs::read_to_string(entry.path()).unwrap();
            let file_data: HashMap<String, Value> = serde_json::from_str(&content).unwrap();

            let prefix = entry.path().file_stem().unwrap().to_str().unwrap();
            for (suffix, data) in file_data {
                let full_postcode = format!("{}{}", prefix, suffix);
                merged_data.insert(full_postcode, data);
            }
        }
    }

    fs::write(dest_path, serde_json::to_string(&merged_data).unwrap()).unwrap();
}