Crate near_schemafy

source ·
Expand description

This is a Rust crate which can take a json schema (draft 4) and generate Rust types which are serializable with serde. No checking such as min_value are done but instead only the structure of the schema is followed as closely as possible.

As a schema could be arbitrarily complex this crate makes no guarantee that it can generate good types or even any types at all for a given schema but the crate does manage to bootstrap itself which is kind of cool.

Example

Generated types for VS Codes debug server protocol: https://docs.rs/debugserver-types

Usage

Rust types can be generated by passing a path to a JSON schema to the schemafy! procedural macro.

extern crate serde;
extern crate schemafy_core;
extern crate serde_json;

use serde::{Serialize, Deserialize};

schemafy::schemafy!(
    "tests/nested.json"
);

schemafy::schemafy!(
    root: Schema // Optional name for the root type (if one exists)
    "schemafy_lib/src/schema.json"
);


fn main() -> Result<(), Box<dyn std::error::Error>> {
    let nested: Defnested = serde_json::from_str(r#"{ "append": "abc" }"#)?;
    assert_eq!(nested.append, Some("abc".to_string()));
    Ok(())
}

Macros

Generate Rust types from a JSON schema.