Make HashSet and BTreeSet use the uniqueItems keyword in their schema (#64)
Co-authored-by: Graham Esau <gesau@hotmail.co.uk>
This commit is contained in:
parent
c4ef7bad22
commit
addac6d386
7 changed files with 48 additions and 10 deletions
|
@ -7,6 +7,7 @@
|
|||
### Changed:
|
||||
- Minimum supported rust version is now 1.37.0
|
||||
- Deriving JsonSchema on enums now sets `additionalProperties` to false on generated schemas wherever serde doesn't accept unknown properties. This includes non-unit variants of externally tagged enums, and struct-style variants of all enums that have the `deny_unknown_fields` attribute.
|
||||
- Schemas for HashSet and BTreeSet now have `uniqueItems` set to true (https://github.com/GREsau/schemars/pull/64)
|
||||
|
||||
### Fixed
|
||||
- Fix use of `#[serde(transparent)]` in combination with `#[schemars(with = ...)]` (https://github.com/GREsau/schemars/pull/67)
|
||||
|
|
|
@ -29,9 +29,38 @@ macro_rules! seq_impl {
|
|||
};
|
||||
}
|
||||
|
||||
macro_rules! set_impl {
|
||||
($($desc:tt)+) => {
|
||||
impl $($desc)+
|
||||
where
|
||||
T: JsonSchema,
|
||||
{
|
||||
no_ref_schema!();
|
||||
|
||||
fn schema_name() -> String {
|
||||
format!("Set_of_{}", T::schema_name())
|
||||
}
|
||||
|
||||
fn json_schema(gen: &mut SchemaGenerator) -> Schema {
|
||||
SchemaObject {
|
||||
instance_type: Some(InstanceType::Array.into()),
|
||||
array: Some(Box::new(ArrayValidation {
|
||||
unique_items: Some(true),
|
||||
items: Some(gen.subschema_for::<T>().into()),
|
||||
..Default::default()
|
||||
})),
|
||||
..Default::default()
|
||||
}
|
||||
.into()
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
seq_impl!(<T> JsonSchema for std::collections::BinaryHeap<T>);
|
||||
seq_impl!(<T> JsonSchema for std::collections::BTreeSet<T>);
|
||||
seq_impl!(<T, H> JsonSchema for std::collections::HashSet<T, H>);
|
||||
set_impl!(<T> JsonSchema for std::collections::BTreeSet<T>);
|
||||
set_impl!(<T, H> JsonSchema for std::collections::HashSet<T, H>);
|
||||
seq_impl!(<T> JsonSchema for std::collections::LinkedList<T>);
|
||||
seq_impl!(<T> JsonSchema for Vec<T>);
|
||||
seq_impl!(<T> JsonSchema for std::collections::VecDeque<T>);
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
"items": {
|
||||
"type": "integer",
|
||||
"format": "int"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,7 +24,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -315,7 +315,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
@ -670,7 +671,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
|
|
@ -255,7 +255,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
@ -552,7 +553,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
|
|
@ -315,7 +315,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
@ -674,7 +675,8 @@
|
|||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"properties": {
|
||||
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue