Implement JsonSchema on EnumSet type
This commit is contained in:
parent
515a87a564
commit
d059686da8
9 changed files with 50 additions and 1 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
include:
|
||||
- rust: 1.37.0
|
||||
# exclude ui_test as the output is slightly different in rustc 1.37
|
||||
test_features: "--features impl_json_schema,chrono,indexmap,either,uuid,smallvec,arrayvec"
|
||||
test_features: "--features impl_json_schema,chrono,indexmap,either,uuid,smallvec,arrayvec,enumset"
|
||||
allow_failure: false
|
||||
- rust: stable
|
||||
test_features: "--all-features"
|
||||
|
|
|
@ -274,3 +274,4 @@ Schemars can implement `JsonSchema` on types from several popular crates, enable
|
|||
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||
- [`bytes`](https://crates.io/crates/bytes) (^1.0)
|
||||
- [`enumset`](https://crates.io/crates/enumset) (^1.0)
|
||||
|
|
|
@ -28,3 +28,4 @@ Schemars can implement `JsonSchema` on types from several popular crates, enable
|
|||
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||
- [`bytes`](https://crates.io/crates/bytes) (^1.0)
|
||||
- [`enumset`](https://crates.io/crates/enumset) (^1.0)
|
||||
|
|
|
@ -26,6 +26,7 @@ smallvec = { version = "1.0", optional = true }
|
|||
arrayvec = { version = "0.5", default-features = false, optional = true }
|
||||
url = { version = "2.0", default-features = false, optional = true }
|
||||
bytes = { version = "1.0", optional = true }
|
||||
enumset = { version = "1.0", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
pretty_assertions = "0.6.1"
|
||||
|
@ -87,5 +88,9 @@ required-features = ["ui_test"]
|
|||
name = "url"
|
||||
required-features = ["url"]
|
||||
|
||||
[[test]]
|
||||
name = "enumset"
|
||||
required-features = ["enumset"]
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
all-features = true
|
||||
|
|
6
schemars/src/json_schema_impls/enumset.rs
Normal file
6
schemars/src/json_schema_impls/enumset.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
use crate::gen::SchemaGenerator;
|
||||
use crate::schema::*;
|
||||
use crate::JsonSchema;
|
||||
use enumset::{EnumSet, EnumSetType};
|
||||
|
||||
forward_impl!((<T> JsonSchema for EnumSet<T> where T: EnumSetType + JsonSchema) => std::collections::BTreeSet<T>);
|
|
@ -47,6 +47,8 @@ mod chrono;
|
|||
mod core;
|
||||
#[cfg(feature = "either")]
|
||||
mod either;
|
||||
#[cfg(feature = "enumset")]
|
||||
mod enumset;
|
||||
mod ffi;
|
||||
#[cfg(feature = "indexmap")]
|
||||
mod indexmap;
|
||||
|
|
|
@ -269,6 +269,7 @@ Schemars can implement `JsonSchema` on types from several popular crates, enable
|
|||
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||
- [`bytes`](https://crates.io/crates/bytes) (^1.0)
|
||||
- [`enumset`](https://crates.io/crates/enumset) (^1.0)
|
||||
*/
|
||||
|
||||
/// The map type used by schemars types.
|
||||
|
|
15
schemars/tests/enumset.rs
Normal file
15
schemars/tests/enumset.rs
Normal file
|
@ -0,0 +1,15 @@
|
|||
mod util;
|
||||
use enumset::{EnumSet, EnumSetType};
|
||||
use schemars::JsonSchema;
|
||||
use util::*;
|
||||
|
||||
#[derive(EnumSetType, JsonSchema)]
|
||||
enum Foo {
|
||||
Bar,
|
||||
Baz,
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn enumset() -> TestResult {
|
||||
test_default_generated_schema::<EnumSet<Foo>>("enumset")
|
||||
}
|
18
schemars/tests/expected/enumset.json
Normal file
18
schemars/tests/expected/enumset.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Set_of_Foo",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/Foo"
|
||||
},
|
||||
"uniqueItems": true,
|
||||
"definitions": {
|
||||
"Foo": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"Bar",
|
||||
"Baz"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue