#json-schema #json #code-gen #codegen #generate-json #quicktype

quick-type-schema

Generate json schema and language bindings

2 releases

new 0.1.1 Jun 13, 2024
0.1.0 Jun 2, 2024

#606 in Development tools

Download history 134/week @ 2024-05-27 43/week @ 2024-06-03 124/week @ 2024-06-10

301 downloads per month

BSD-2-Clause

18KB
392 lines

quick-type-schema

Version Badge Docs Badge License Badge Downloads Badge

quick-type-schema is a simple library that takes your rust types and converts them to whatever language by converting your types into JSON schema, then running it through quicktype.io. Created for bubbel-backend, this library has been repurposed for the general use case!

To be 100% clear, this library is a wrapper over quicktype.io. Additionally, not all cases and options are tested / available. Please report all issues you come across.

Prerequisites

Since this library is a wrapper over quicktype, you will need either npx or quicktype installed. The latter will startup faster.

Additionally, you will need the JsonSchema trait from schema-rs to be derived for your types.

Usage

Add to Cargo.toml

[dependencies]
quick-type-schema = "0.1"
use quick_type_schema::{CodegenContext, Language};

// quicktype cli override arguments can be explicitly added here.
// These overrides even affect `Language` passed in `codegen.finish`
// Ex: `Some(&["-l", "typescript", "--just-types"])`
let mut codegen = CodegenContext::new(None);

// Add a type that has derived `JsonSchema`
codegen.add_type::<MyStruct>();

// Add your own json schema
codegen.add_schema("{ ... }");

codegen.finish(Language::Typescript);

You can add these to your build process, but because of the slow startup of quicktype and lack of caching, this is highly discouraged.

Language Support

quick-type-schema supports pretty much every language quicktype supports. However, some have been left out due to incompatibilities or complexity (notable ones being C, C++, Java, Kotlin, Objective-C, and Scala3). For those languages, please use the override arguments and refer to the quicktype cli - quicktype --help. Here are the supported languages:

Typescript
JsonSchema
CSharp
    +via Newton Soft
    +via System.Text.Json
Crystal
Dart
Elm
Go
Haskell
Python
    +via v3.5
    +via v3.6
    +via v3.7
Ruby
Rust
Smithy
Swift

Dependencies

~140–415KB