jsoncompat 0.5.0

JSON Schema and OpenAPI Compatibility Checker
Documentation
use json_schema_ast::SchemaDocument;
use jsoncompat_codegen::generate_dataclass_module_from_document;
use serde_json::Value;
use std::{fs, path::Path};

pub fn assert_split_snapshot(schema: &Value, output: &Path) {
    let module =
        generate_dataclass_module_from_document(&SchemaDocument::from_json(schema).unwrap())
            .unwrap();
    let implementation = module.private_file();
    let stem = output.file_stem().unwrap().to_str().unwrap();
    let companion = format!("_{stem}_generated");
    if std::env::var_os("JSONCOMPAT_UPDATE_DATACLASSES_FIXTURES").is_some() {
        fs::write(output, module.public_file(&companion)).unwrap();
        fs::write(
            output.with_file_name(format!("{companion}.py")),
            &implementation,
        )
        .unwrap();
    }
    assert_eq!(
        module.public_file(&companion),
        fs::read_to_string(output).unwrap().replace("\r\n", "\n"),
        "regenerate {} with jsoncompat codegen --output",
        output.display(),
    );
    assert_eq!(
        implementation,
        fs::read_to_string(output.with_file_name(format!("{companion}.py")))
            .unwrap()
            .replace("\r\n", "\n"),
    );
}