json-model 0.2.1

Extensible framework for validating JSON structures
Documentation
# JSON Model Rust

[![crates.io](https://img.shields.io/crates/v/json-model.svg)](https://crates.io/crates/json-model)
[![Released API docs](https://docs.rs/json-model/badge.svg)](https://docs.rs/json-model)
[![MIT licensed](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)

_Extensible framework for validating JSON structures._

## Usage Example

```toml
# Cargo.toml

[dependencies]
json-model = "0.2"
serde_json = "1"
```

```rust
// main.rs

extern crate json_model;
#[macro_use]
extern crate serde_json;

use json_model::{Error, Validator};

fn document() -> serde_json::Value {
    json!({
        "id": "model",
        "definitions": [
            {
                "id": "user",
                "type": "object",
                "properties": {
                    "required": ["username", "password"],
                    "definitions": [
                        {
                            "id": "username",
                            "type": "string",
                            "minLength": 3,
                            "maxLength": 30,
                        },
                        {
                            "id": "password",
                            "type": "string",
                            "minLength": 5,
                            "maxLength": 256,
                        },
                        {
                            "id": "age",
                            "type": "integer",
                            "exclusiveMin": 0,
                            "max": 273,
                        }
                    ]
                }
            }
        ]
    })
}

fn valid_input() -> serde_json::Value {
    json!({
        "username": "johndoe",
        "password": "Tr0ub4dor&3",
        "age": 12,
    })
}

fn invalid_input() -> serde_json::Value {
    json!({
        "username": "johndoe",
        "password": "123", // `password` must be at least 5 characters long
    })
}

fn build() -> Result<Validator, Error> {
    Validator::new()?.load_json(&document())?.finalize()
}

fn main() {
    let v = build().unwrap();
    assert!(v.validate_json("model/user", &valid_input()).is_ok());
    assert!(v.validate_json("model/user", &invalid_input()).is_err());
}
```

## License

MIT