openapi-schema-to-json-schema 0.1.0

Convert OpenAPI 3.0 schema objects to JSON Schema draft-04
Documentation
  • Coverage
  • 100%
    22 out of 22 items documented4 out of 4 items with examples
  • Size
  • Source code size: 123.27 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 981.43 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 5s Average build duration of successful builds.
  • all releases: 5s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • hey-jj/openapi-schema-to-json-schema
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • hey-jj

openapi-schema-to-json-schema

Convert an OpenAPI 3.0 Schema Object into a JSON Schema draft-04 document.

OpenAPI 3.0 describes schemas with an extended subset of JSON Schema that is not itself valid draft-04. This crate bridges the gap. It is pure and in memory. It performs no I/O, no network access, and no $ref resolution.

Install

[dependencies]
openapi-schema-to-json-schema = "0.1"
serde_json = "1"

Use

use openapi_schema_to_json_schema::{from_schema, Options};
use serde_json::json;

let input = json!({ "type": "string", "nullable": true });
let output = from_schema(input, &Options::new()).unwrap();

assert_eq!(
    output,
    json!({
        "type": ["string", "null"],
        "$schema": "http://json-schema.org/draft-04/schema#"
    })
);

What it does

  • nullable: true adds "null" to type and appends null to an enum.
  • Strips OpenAPI-only keywords: nullable, discriminator, readOnly, writeOnly, xml, externalDocs, example, deprecated.
  • Maps numeric formats to bounds: int32, int64, float, double become minimum and maximum. byte becomes a base64 pattern. date becomes date-time when date_to_date_time is on.
  • Recurses combiners and structs: allOf, anyOf, oneOf, not, items, additionalProperties, and properties.
  • Prunes required of names no longer present in properties.
  • Rejects an invalid type in strict mode.

The root of the result carries "$schema". Nested schemas do not.

Parameters and responses

from_parameter converts a Parameter Object or Response Object. With a schema member it returns one JSON Schema. With a content member it returns a map keyed by MIME type, where each value is a JSON Schema with its own $schema.

use openapi_schema_to_json_schema::{from_parameter, Options};
use serde_json::json;

let param = json!({
    "name": "id",
    "in": "query",
    "schema": { "type": "string", "nullable": true }
});
let out = from_parameter(param, &Options::new()).unwrap();
assert_eq!(out["type"], json!(["string", "null"]));

Options

Option Default Effect
date_to_date_time false Rewrite format: "date" to date-time.
clone_schema true Kept for API parity. The crate owns its input, so conversion never mutates the caller's data.
support_pattern_properties false Move x-patternProperties to patternProperties and run the handler.
keep_not_supported empty Keep listed keywords that would otherwise be stripped.
strict_mode true Reject type values outside the draft-04 set.
remove_read_only false Drop properties marked readOnly: true.
remove_write_only false Drop properties marked writeOnly: true.
pattern_properties_handler dedup handler Replace the default patternProperties handler.
definition_keywords empty Dotted paths whose values hold named sub-schemas to convert.
before_transform none Hook run on each node before keyword processing.
after_transform none Hook run on each node after keyword processing.

License

Licensed under the MIT license.