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": [