zod 0.1.0

Rust integraions with the `zod` typescript library.
Documentation
use zod::ZodType;

mod test_utils;
use test_utils::*;

fn main() {}

#[test]
fn ok() {
    test_case! {
        struct Test(usize, usize, String);
    }

    let json = serde_json::to_value(Test(123, 42, String::from("abc"))).unwrap();
    assert_eq!(json, serde_json::json!([123, 42, "abc"]));

    assert_eq!(
        Test::schema(),
        tuple(&[usize::schema(), usize::schema(), String::schema()])
    );
    assert_eq!(Test::type_def(), "[number, number, string]");
    assert_eq!(Test::inline().to_string(), "Ns.Test")
}

#[test]
fn with_default_fields() {
    test_case! {
        #[derive(Debug, PartialEq, serde::Deserialize)]
        struct Test(usize, #[serde(default)]usize);
    }

    let test = Test(42, 0);

    let res: Test = serde_json::from_value(serde_json::json!([42])).unwrap();

    assert_eq!(test, res);

    assert_eq!(
        Test::schema(),
        tuple(&[usize::schema(), optional(usize::schema())])
    );

    assert_eq!(Test::type_def(), "[number, number | undefined]");
    assert_eq!(Test::inline().to_string(), "Ns.Test")
}