#json #validation #model #extensible #structures #framework #definition

yanked json-model

Extensible framework for validating JSON structures

0.2.1 Nov 7, 2018
0.2.0 Nov 4, 2018
0.1.0 Nov 1, 2018

#94 in #extensible

MIT license

67KB
2K SLoC

JSON Model Rust

crates.io Released API docs MIT licensed

Extensible framework for validating JSON structures.

Usage Example

# Cargo.toml

[dependencies]
json-model = "0.2"
serde_json = "1"
// 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

Dependencies

~2.5–4MB
~74K SLoC