type-history-codegen 0.3.2

Shared type history parsing, authority, and Rust generation
Documentation
use super::{Admission, Declaration, Invocation};
use std::fs;

#[test]
fn missing_malformed_and_unmatched_declarations_reject() {
    let owner = tempfile::tempdir().unwrap();
    let path = owner.path().join("admission.json");
    let invocation = Invocation {
        path: owner.path().join("lib.rs"),
        line: 1,
        column: 0,
        stable_name: "checked.record".into(),
    };
    assert!(Admission::read(&path, &invocation).is_err());
    fs::write(&path, b"{").unwrap();
    assert!(Admission::read(&path, &invocation).is_err());
    let admission = Admission {
        strict: true,
        declarations: vec![Declaration {
            invocation: invocation.clone(),
            module_path: vec!["consumer".into(), "records".into()],
            rust_name: "Record".into(),
        }],
    };
    fs::write(&path, serde_json::to_vec(&admission).unwrap()).unwrap();
    let (strict, declaration) = Admission::read(&path, &invocation).unwrap();
    assert!(strict);
    assert_eq!(declaration.module_path, ["consumer", "records"]);
    assert_eq!(declaration.rust_name, "Record");
    let hidden = Invocation {
        line: 2,
        ..invocation.clone()
    };
    assert!(Admission::read(&path, &hidden).is_err());
}