json_schema 1.8.0

Generated types based on the JSON-Schema for json_schema
Documentation
extern crate json_schema;

use json_schema::*;

#[test]
fn can_build_and_serialize() {
    let schema = JSONSchemaObjectBuilder::default()
        .title("foobar".to_string())
        ._type(Type::SimpleTypes(SimpleTypes::String))
        .build()
        .unwrap();

    let as_str = serde_json::to_string(&schema).unwrap();
    let expected = "{\"title\":\"foobar\",\"type\":\"string\"}".to_string();
    assert_eq!(as_str, expected);
}

#[test]
fn can_build_and_serialize_array_types() {

    let schema = JSONSchemaObjectBuilder::default()
        ._type(Type::ArrayOfSimpleTypes(vec!(SimpleTypes::String, SimpleTypes::Array)))
        .build()
        .unwrap();

    let as_str = serde_json::to_string(&schema).unwrap();
    println!("{}", as_str);

    let expected = "{\"type\":[\"string\",\"array\"]}".to_string();
    assert_eq!(as_str, expected);
}

#[test]
fn can_deserialize() {
    let foo = r#"{
            "title": "helloworld",
            "type": "string"
        }"#;

    let as_json_schema: JSONSchemaObject = serde_json::from_str(foo).unwrap();
    assert_eq!(as_json_schema.title.unwrap(), "helloworld");
    assert_eq!(as_json_schema._type.unwrap(), Type::SimpleTypes(SimpleTypes::String));
}

#[test]
fn can_deserialize_with_array_type() {
    let foo = r#"{
            "title": "helloworld",
            "type": ["string", "array"]
        }"#;

    let as_json_schema: JSONSchemaObject = serde_json::from_str(&foo).unwrap();

    let title = as_json_schema.title.as_ref();
    assert_eq!(title.unwrap(), "helloworld");
    let types_vec: ArrayOfSimpleTypes = vec!(SimpleTypes::String, SimpleTypes::Array);
    let t = as_json_schema._type.as_ref();
    assert_eq!(t.unwrap(), &Type::ArrayOfSimpleTypes(types_vec));

    let back_to_str = serde_json::to_string(&as_json_schema);
    assert_eq!(foo.replace(" ", "").replace("\n", ""), back_to_str.unwrap());
}

#[test]
fn can_deserialize_boolean_schema() {
    let foo = "true";
    let as_json_schema: JSONSchema = serde_json::from_str(&foo).unwrap();
    assert_eq!(as_json_schema, JSONSchema::JSONSchemaBoolean(true));
}

#[test]
fn can_deserialize_nested_schema() {
    let foo = r#"{
            "title": "helloworld",
            "type": "object",
            "properties": {
                "foo": { "type": "string", "title": "nestedfoo" }
            }
        }"#;

    let as_json_schema: JSONSchema = serde_json::from_str(&foo).unwrap();

    match as_json_schema {
        JSONSchema::JSONSchemaObject(as_json_schema) => {
            let title = as_json_schema.title.as_ref();
            assert_eq!(title.unwrap(), "helloworld");

            let subschema_props = as_json_schema
                .properties
                .unwrap();
            let subschema = subschema_props.get("foo").unwrap();

            match subschema {
                JSONSchema::JSONSchemaObject(subschema) => {
                    let sub_title = subschema.title.as_ref();
                    assert_eq!(sub_title.unwrap(), "nestedfoo");
                }
                JSONSchema::JSONSchemaBoolean(_subschema) => {
                    assert_eq!(0,1);
                }
            }
        },
        JSONSchema::JSONSchemaBoolean(_as_json_schema) => {
            assert_eq!(0,1);
        }
    }
}