syncular-codegen 0.1.0

Schema introspection and Rust code generator for Syncular app clients.
use std::process::Command;

#[test]
fn generated_outputs_are_current() {
    let codegen_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    let rust_dir = codegen_dir
        .parent()
        .and_then(std::path::Path::parent)
        .expect("rust dir");
    let runtime_dir = rust_dir.join("crates/runtime");
    let example_dir = rust_dir.join("examples/todo-app");

    let output = Command::new(env!("CARGO_BIN_EXE_syncular-codegen"))
        .arg("--manifest-dir")
        .arg(&runtime_dir)
        .arg("--codegen-config")
        .arg("syncular.codegen.json")
        .arg("--migrations-dir")
        .arg(runtime_dir.join("migrations"))
        .arg("--rust-output-dir")
        .arg(runtime_dir.join("src/fixtures/todo/generated"))
        .arg("--check")
        .output()
        .expect("run syncular-codegen --check for runtime generated modules");

    assert!(
        output.status.success(),
        "runtime generated outputs are out of date\nstdout:\n{}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );

    let output = Command::new(env!("CARGO_BIN_EXE_syncular-codegen"))
        .arg("--manifest-dir")
        .arg(&example_dir)
        .arg("--check")
        .output()
        .expect("run syncular-codegen --check for example app");

    assert!(
        output.status.success(),
        "example app generated outputs are out of date\nstdout:\n{}\nstderr:\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );
}