zod 0.1.0

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

mod test_utils;
use test_utils::*;

#[test]
fn serde_default_named_struct_field() {
    test_case! {
        #[derive(serde::Deserialize)]
        struct Test {
            #[serde(default)]
            s: String,
            num: usize,
        }
    }

    assert!(Test::schema().contains("z.string().optional()"));
    assert_eq!(Test::type_def(), "{s?: string | undefined,\nnum: number}")
}

#[test]
fn serde_default_tuple_struct_field() {
    test_case! {
        #[derive(serde::Deserialize)]
        struct Test(#[serde(default)] String);
    }

    assert!(Test::schema().contains("z.string().optional()"));
    assert_eq!(Test::type_def(), "string | undefined")
}

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

    assert_eq!(Test::schema(), optional(usize::schema()));
    assert_eq!(Test::type_def(), "number | undefined");
    assert_eq!(Test::inline().to_string(), "Ns.Test")
}