Giter VIP home page Giter VIP logo

typify's Introduction

Typify

Compile JSON Schema documents into Rust types. This can be used ...

  • via the macro import_types!("types.json") to generate Rust types directly in your program

  • via a builder interface to generate Rust types in build.rs

  • or via the builder functions to generate persistent files e.g. when building API bindings.

JSON Schema โ†’ Rust types

We can divide types in JSON Schema into a few classes:

Simple types

Integers, floating-point numbers, strings, etc. Those all have straightforward translations. The only significant nuance is how to select the appropriate built-in type.

Arrays

JSON Schema arrays can turn into three Rust types Vec<T>, HashSet<T>, and tuples. Arrays may have a fixed length that matches a fixed list of item types; this matches well with Rust tuples. The distintion between Vec<T> and HashSet<T> is only if the uniqueItems field is true.

Objects

In general Objects turn in to Rust structs, but if there are no properties defined Typify models this as a HashMap<String, T> if the additionalProperties schema specifies T or a HashMap<String, serde_json::Value> otherwise. Properties that are not in the required set and represented as an Option<T>.

OneOf

The OneOf construct maps to a Rust enum. Typify maps this to the various serde enum types.

AnyOf / AllOf

The anyOf and allOf constructs are a little trickier to handle, but (in general) Typify models these as structs where each member is decorated with the #[serde(flatten)] attribute.

WIP

Typify is a work in progress. Changes that affect output will likely be breaking changes. We will continue to update the crate version number with each change; be cognizant when updating to a new version.

Bounded numbers aren't very well handled. Consider, for example, the schema:

{
    "type": "integer",
    "minimum": 1,
    "maximum": 6
}

The resulting types won't enforce those value constraints.

Similarly, patterns and lengths for strings are not enforced.

In general, if you have a JSON Schema that causes Typify to fail or if the generated type isn't what you expect, please file an issue.

typify's People

Contributors

ahl avatar albanminassian avatar benignbala avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.