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:
|
include:
|
||||||
- rust: 1.37.0
|
- rust: 1.37.0
|
||||||
# exclude ui_test as the output is slightly different in rustc 1.37
|
# 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
|
allow_failure: false
|
||||||
- rust: stable
|
- rust: stable
|
||||||
test_features: "--all-features"
|
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)
|
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||||
- [`bytes`](https://crates.io/crates/bytes) (^1.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)
|
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||||
- [`bytes`](https://crates.io/crates/bytes) (^1.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 }
|
arrayvec = { version = "0.5", default-features = false, optional = true }
|
||||||
url = { version = "2.0", default-features = false, optional = true }
|
url = { version = "2.0", default-features = false, optional = true }
|
||||||
bytes = { version = "1.0", optional = true }
|
bytes = { version = "1.0", optional = true }
|
||||||
|
enumset = { version = "1.0", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
pretty_assertions = "0.6.1"
|
pretty_assertions = "0.6.1"
|
||||||
|
@ -87,5 +88,9 @@ required-features = ["ui_test"]
|
||||||
name = "url"
|
name = "url"
|
||||||
required-features = ["url"]
|
required-features = ["url"]
|
||||||
|
|
||||||
|
[[test]]
|
||||||
|
name = "enumset"
|
||||||
|
required-features = ["enumset"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
all-features = true
|
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;
|
mod core;
|
||||||
#[cfg(feature = "either")]
|
#[cfg(feature = "either")]
|
||||||
mod either;
|
mod either;
|
||||||
|
#[cfg(feature = "enumset")]
|
||||||
|
mod enumset;
|
||||||
mod ffi;
|
mod ffi;
|
||||||
#[cfg(feature = "indexmap")]
|
#[cfg(feature = "indexmap")]
|
||||||
mod 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)
|
- [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5)
|
||||||
- [`url`](https://crates.io/crates/url) (^2.0)
|
- [`url`](https://crates.io/crates/url) (^2.0)
|
||||||
- [`bytes`](https://crates.io/crates/bytes) (^1.0)
|
- [`bytes`](https://crates.io/crates/bytes) (^1.0)
|
||||||
|
- [`enumset`](https://crates.io/crates/enumset) (^1.0)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/// The map type used by schemars types.
|
/// 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