Add examples to docs
This commit is contained in:
parent
d67abbdbb1
commit
f387a0ec56
11 changed files with 223 additions and 17 deletions
14
docs/_includes/example.md
Normal file
14
docs/_includes/example.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% capture input %}examples/{{ include.name }}.rs{% endcapture %}
|
||||||
|
{% capture output %}examples/{{ include.name }}.schema.json{% endcapture %}
|
||||||
|
|
||||||
|
```rust
|
||||||
|
{% include {{ input }} %}
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Click to see the output JSON schema...</summary>
|
||||||
|
|
||||||
|
```json
|
||||||
|
{% include {{ output }} %}
|
||||||
|
```
|
||||||
|
</details>
|
21
docs/_includes/examples/main.rs
Normal file
21
docs/_includes/examples/main.rs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
use schemars::{schema_for, JsonSchema};
|
||||||
|
|
||||||
|
#[derive(JsonSchema)]
|
||||||
|
pub struct MyStruct {
|
||||||
|
pub my_int: i32,
|
||||||
|
pub my_bool: bool,
|
||||||
|
pub my_nullable_enum: Option<MyEnum>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(JsonSchema)]
|
||||||
|
pub enum MyEnum {
|
||||||
|
StringNewType(String),
|
||||||
|
StructVariant {
|
||||||
|
floats: Vec<f32>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let schema = schema_for!(MyStruct);
|
||||||
|
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
|
||||||
|
}
|
69
docs/_includes/examples/main.schema.json
Normal file
69
docs/_includes/examples/main.schema.json
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "MyStruct",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"my_bool",
|
||||||
|
"my_int",
|
||||||
|
"my_nullable_enum"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"my_bool": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"my_int": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int32"
|
||||||
|
},
|
||||||
|
"my_nullable_enum": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/MyEnum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"MyEnum": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"StringNewType"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"StringNewType": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"StructVariant"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"StructVariant": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"floats"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"floats": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "number",
|
||||||
|
"format": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
docs/_includes/examples/serde_attrs.rs
Normal file
26
docs/_includes/examples/serde_attrs.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
use schemars::{schema_for, JsonSchema};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, JsonSchema)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct MyStruct {
|
||||||
|
#[serde(rename = "myNumber")]
|
||||||
|
pub my_int: i32,
|
||||||
|
pub my_bool: bool,
|
||||||
|
#[serde(default)]
|
||||||
|
pub my_nullable_enum: Option<MyEnum>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, JsonSchema)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum MyEnum {
|
||||||
|
StringNewType(String),
|
||||||
|
StructVariant {
|
||||||
|
floats: Vec<f32>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let schema = schema_for!(MyStruct);
|
||||||
|
println!("{}", serde_json::to_string_pretty(&schema).unwrap());
|
||||||
|
}
|
53
docs/_includes/examples/serde_attrs.schema.json
Normal file
53
docs/_includes/examples/serde_attrs.schema.json
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "MyStruct",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"myBool",
|
||||||
|
"myNumber"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"myBool": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"myNullableEnum": {
|
||||||
|
"default": null,
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/MyEnum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"myNumber": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int32"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"MyEnum": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"floats"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"floats": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "number",
|
||||||
|
"format": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,3 +48,8 @@ code {
|
||||||
margin-left: -20px;
|
margin-left: -20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
details summary {
|
||||||
|
display: list-item;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
13
docs/examples/1-derive_jsonschema.md
Normal file
13
docs/examples/1-derive_jsonschema.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Deriving JsonSchema
|
||||||
|
parent: Examples
|
||||||
|
nav_order: 1
|
||||||
|
summary: Deriving JsonSchema on a struct and enum.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Deriving JsonSchema
|
||||||
|
|
||||||
|
This is the simplest usage of Schemars. Both types are made to derive `JsonSchema`, and the `schema_for!` macro is used to generate the schema itself.
|
||||||
|
|
||||||
|
{% include example.md name="main" %}
|
15
docs/examples/2-serde_attrs.md
Normal file
15
docs/examples/2-serde_attrs.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Using Serde Attributes
|
||||||
|
parent: Examples
|
||||||
|
nav_order: 2
|
||||||
|
summary: 'Deriving JsonSchema on types that use #[serde] attributes to customise serialization behaviour.'
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using Serde Attributes
|
||||||
|
|
||||||
|
One of the main aims of this library is compatibility with [Serde](https://github.com/serde-rs/serde). Any generated schema *should* match how [serde_json](https://github.com/serde-rs/json) would serialize/deserialize to/from JSON. To support this, Schemars will check for any `#[serde(...)]` attributes on types that derive `JsonSchema`, and adjust the generated schema accordingly.
|
||||||
|
|
||||||
|
The list of supported `#[serde]` attributes are [documented here]({{ site.baseurl }}/deriving/attributes/#supported-serde-attributes).
|
||||||
|
|
||||||
|
{% include example.md name="serde_attrs" %}
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
title: Example 1
|
|
||||||
parent: Examples
|
|
||||||
nav_order: 1
|
|
||||||
summary: blah blah blahhh
|
|
||||||
---
|
|
||||||
|
|
||||||
# Examples 1: A Meta-Example
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
title: Example 2
|
|
||||||
parent: Examples
|
|
||||||
nav_order: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# Examples 2: Another Meta-Example
|
|
|
@ -10,3 +10,10 @@ do
|
||||||
example=${file%.rs}
|
example=${file%.rs}
|
||||||
cargo run --example "$example" > "$example.schema.json"
|
cargo run --example "$example" > "$example.schema.json"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
rm -f docs/_includes/examples/*.rs
|
||||||
|
rm -f docs/_includes/examples/*.schema.json
|
||||||
|
|
||||||
|
cp schemars/examples/* docs/_includes/examples/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue