From e7cae04bebb10987e3e47a3554f4f5ee5733c2c5 Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Sat, 16 May 2020 12:21:09 +0100 Subject: [PATCH] Update docs and changelog --- CHANGELOG.md | 4 ++++ README.md | 3 ++- docs/1.1-attributes.md | 9 +++++++++ docs/_includes/examples/schemars_attrs.rs | 2 +- docs/_includes/examples/schemars_attrs.schema.json | 1 + docs/_includes/examples/serde_attrs.rs | 2 +- docs/_includes/examples/serde_attrs.schema.json | 1 + schemars/examples/schemars_attrs.rs | 2 +- schemars/examples/schemars_attrs.schema.json | 1 + schemars/examples/serde_attrs.rs | 2 +- schemars/examples/serde_attrs.schema.json | 1 + schemars/src/lib.rs | 3 ++- 12 files changed, 25 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc35f30..08032c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## In-dev - version TBC +### Added: +- If a struct is annotated with `#[serde(deny_unknown_fields)]`, generated schema will have `additionalProperties` set to `false` (https://github.com/GREsau/schemars/pull/30) +- Set `type` property to `string` on simple enums (https://github.com/GREsau/schemars/issues/28) ## [0.7.3] - 2020-05-15 ### Added: diff --git a/README.md b/README.md index 1773e0f..cdcb181 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ use schemars::{schema_for, JsonSchema}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] -#[serde(rename_all = "camelCase")] +#[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct MyStruct { #[serde(rename = "myNumber")] pub my_int: i32, @@ -171,6 +171,7 @@ fn main() { "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [ diff --git a/docs/1.1-attributes.md b/docs/1.1-attributes.md index 6ff7fee..dde424a 100644 --- a/docs/1.1-attributes.md +++ b/docs/1.1-attributes.md @@ -124,6 +124,15 @@ If the given type has any required generic type parameters, then they must all b Serde docs: [variant](https://serde.rs/variant-attrs.html#with) / [field](https://serde.rs/field-attrs.html#with) +

+ +`#[serde(deny_unknown_fields)]` / `#[schemars(deny_unknown_fields)]` +

+ +Setting this on a container will set the `additionalProperties` keyword on generated schemas to `false` to show that any extra properties are explicitly disallowed. + +Serde docs: [container](https://serde.rs/container-attrs.html#deny_unknown_fields) + ## Other Attributes diff --git a/docs/_includes/examples/schemars_attrs.rs b/docs/_includes/examples/schemars_attrs.rs index 506beaf..f830e9f 100644 --- a/docs/_includes/examples/schemars_attrs.rs +++ b/docs/_includes/examples/schemars_attrs.rs @@ -2,7 +2,7 @@ use schemars::{schema_for, JsonSchema}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] -#[schemars(rename_all = "camelCase")] +#[schemars(rename_all = "camelCase", deny_unknown_fields)] pub struct MyStruct { #[serde(rename = "thisIsOverridden")] #[schemars(rename = "myNumber")] diff --git a/docs/_includes/examples/schemars_attrs.schema.json b/docs/_includes/examples/schemars_attrs.schema.json index f7e6ac9..d044193 100644 --- a/docs/_includes/examples/schemars_attrs.schema.json +++ b/docs/_includes/examples/schemars_attrs.schema.json @@ -26,6 +26,7 @@ "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [ diff --git a/docs/_includes/examples/serde_attrs.rs b/docs/_includes/examples/serde_attrs.rs index 249497f..b8d0fb4 100644 --- a/docs/_includes/examples/serde_attrs.rs +++ b/docs/_includes/examples/serde_attrs.rs @@ -2,7 +2,7 @@ use schemars::{schema_for, JsonSchema}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] -#[serde(rename_all = "camelCase")] +#[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct MyStruct { #[serde(rename = "myNumber")] pub my_int: i32, diff --git a/docs/_includes/examples/serde_attrs.schema.json b/docs/_includes/examples/serde_attrs.schema.json index f7e6ac9..d044193 100644 --- a/docs/_includes/examples/serde_attrs.schema.json +++ b/docs/_includes/examples/serde_attrs.schema.json @@ -26,6 +26,7 @@ "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [ diff --git a/schemars/examples/schemars_attrs.rs b/schemars/examples/schemars_attrs.rs index 506beaf..f830e9f 100644 --- a/schemars/examples/schemars_attrs.rs +++ b/schemars/examples/schemars_attrs.rs @@ -2,7 +2,7 @@ use schemars::{schema_for, JsonSchema}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] -#[schemars(rename_all = "camelCase")] +#[schemars(rename_all = "camelCase", deny_unknown_fields)] pub struct MyStruct { #[serde(rename = "thisIsOverridden")] #[schemars(rename = "myNumber")] diff --git a/schemars/examples/schemars_attrs.schema.json b/schemars/examples/schemars_attrs.schema.json index f7e6ac9..d044193 100644 --- a/schemars/examples/schemars_attrs.schema.json +++ b/schemars/examples/schemars_attrs.schema.json @@ -26,6 +26,7 @@ "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [ diff --git a/schemars/examples/serde_attrs.rs b/schemars/examples/serde_attrs.rs index 249497f..b8d0fb4 100644 --- a/schemars/examples/serde_attrs.rs +++ b/schemars/examples/serde_attrs.rs @@ -2,7 +2,7 @@ use schemars::{schema_for, JsonSchema}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] -#[serde(rename_all = "camelCase")] +#[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct MyStruct { #[serde(rename = "myNumber")] pub my_int: i32, diff --git a/schemars/examples/serde_attrs.schema.json b/schemars/examples/serde_attrs.schema.json index f7e6ac9..d044193 100644 --- a/schemars/examples/serde_attrs.schema.json +++ b/schemars/examples/serde_attrs.schema.json @@ -26,6 +26,7 @@ "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [ diff --git a/schemars/src/lib.rs b/schemars/src/lib.rs index 1315897..377f31f 100644 --- a/schemars/src/lib.rs +++ b/schemars/src/lib.rs @@ -113,7 +113,7 @@ use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, JsonSchema)] #[serde(rename_all = "camelCase")] pub struct MyStruct { - #[serde(rename = "myNumber")] + #[serde(rename = "myNumber", deny_unknown_fields)] pub my_int: i32, pub my_bool: bool, #[serde(default)] @@ -165,6 +165,7 @@ fn main() { "format": "int32" } }, + "additionalProperties": false, "definitions": { "MyEnum": { "anyOf": [