Implement JsonSchema for Range/RangeInclusive

This commit is contained in:
Graham Esau 2019-10-27 22:30:01 +00:00
parent b334bef91a
commit fe861ac3a1
10 changed files with 203 additions and 50 deletions

View file

@ -17,6 +17,10 @@
"definitions": {
"Duration": {
"type": "object",
"required": [
"nanos",
"secs"
],
"properties": {
"nanos": {
"type": "integer",
@ -30,6 +34,10 @@
},
"SystemTime": {
"type": "object",
"required": [
"nanos_since_epoch",
"secs_since_epoch"
],
"properties": {
"nanos_since_epoch": {
"type": "integer",

View file

@ -0,0 +1,53 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "MyStruct",
"type": "object",
"required": [
"inclusive",
"range"
],
"properties": {
"inclusive": {
"$ref": "#/definitions/Range_Of_Number"
},
"range": {
"$ref": "#/definitions/Range_Of_Integer"
}
},
"definitions": {
"Range_Of_Integer": {
"type": "object",
"required": [
"end",
"start"
],
"properties": {
"end": {
"type": "integer",
"format": "uint"
},
"start": {
"type": "integer",
"format": "uint"
}
}
},
"Range_Of_Number": {
"type": "object",
"required": [
"end",
"start"
],
"properties": {
"end": {
"type": "number",
"format": "double"
},
"start": {
"type": "number",
"format": "double"
}
}
}
}
}

View file

@ -1,33 +1,19 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Result_Of_MyStruct_Or_Array_Of_String",
"oneOf": [
{
"type": "object",
"required": [
"Ok"
],
"properties": {
"Ok": {
"$ref": "#/definitions/MyStruct"
}
}
},
{
"type": "object",
"required": [
"Err"
],
"properties": {
"Err": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
"title": "Container",
"type": "object",
"required": [
"result1",
"result2"
],
"properties": {
"result1": {
"$ref": "#/definitions/Result_Of_MyStruct_Or_Array_Of_String"
},
"result2": {
"$ref": "#/definitions/Result_Of_Boolean_Or_Null"
}
},
"definitions": {
"MyStruct": {
"type": "object",
@ -40,6 +26,61 @@
"format": "int32"
}
}
},
"Result_Of_Boolean_Or_Null": {
"oneOf": [
{
"type": "object",
"required": [
"Ok"
],
"properties": {
"Ok": {
"type": "boolean"
}
}
},
{
"type": "object",
"required": [
"Err"
],
"properties": {
"Err": {
"type": "null"
}
}
}
]
},
"Result_Of_MyStruct_Or_Array_Of_String": {
"oneOf": [
{
"type": "object",
"required": [
"Ok"
],
"properties": {
"Ok": {
"$ref": "#/definitions/MyStruct"
}
}
},
{
"type": "object",
"required": [
"Err"
],
"properties": {
"Err": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
]
}
}
}

15
schemars/tests/range.rs Normal file
View file

@ -0,0 +1,15 @@
mod util;
use schemars::JsonSchema;
use util::*;
use std::ops::{Range, RangeInclusive};
#[derive(Debug, JsonSchema)]
struct MyStruct {
range: Range<usize>,
inclusive: RangeInclusive<f64>,
}
#[test]
fn result() -> TestResult {
test_default_generated_schema::<MyStruct>("range")
}

View file

@ -7,7 +7,13 @@ struct MyStruct {
foo: i32,
}
#[derive(Debug, JsonSchema)]
struct Container {
result1: Result<MyStruct, Vec<String>>,
result2: Result<bool, ()>,
}
#[test]
fn result() -> TestResult {
test_default_generated_schema::<Result<MyStruct, Vec<String>>>("result")
test_default_generated_schema::<Container>("result")
}