From 0e3938798fb3e435c8fec6c32ddd63511cd2997b Mon Sep 17 00:00:00 2001 From: Daniel Hahne Date: Mon, 28 Dec 2020 09:01:23 +0100 Subject: [PATCH] Support Bytes (#68) --- README.md | 1 + docs/4-features.md | 1 + schemars/Cargo.toml | 5 +++++ schemars/src/json_schema_impls/bytes.rs | 6 ++++++ schemars/src/json_schema_impls/mod.rs | 2 ++ schemars/tests/bytes.rs | 8 ++++++++ schemars/tests/expected/bytes.json | 10 ++++++++++ 7 files changed, 33 insertions(+) create mode 100644 schemars/src/json_schema_impls/bytes.rs create mode 100644 schemars/tests/bytes.rs create mode 100644 schemars/tests/expected/bytes.json diff --git a/README.md b/README.md index e91b1bd..571045d 100644 --- a/README.md +++ b/README.md @@ -273,3 +273,4 @@ Schemars can implement `JsonSchema` on types from several popular crates, enable - [`smallvec`](https://crates.io/crates/smallvec) (^1.0) - [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5) - [`url`](https://crates.io/crates/url) (^2.0) +- [`bytes`](https://crates.io/crates/bytes) (^1.0) diff --git a/docs/4-features.md b/docs/4-features.md index af3e652..d080908 100644 --- a/docs/4-features.md +++ b/docs/4-features.md @@ -27,3 +27,4 @@ Schemars can implement `JsonSchema` on types from several popular crates, enable - [`smallvec`](https://crates.io/crates/smallvec) (^1.0) - [`arrayvec`](https://crates.io/crates/arrayvec) (^0.5) - [`url`](https://crates.io/crates/url) (^2.0) +- [`bytes`](https://crates.io/crates/bytes) (^1.0) diff --git a/schemars/Cargo.toml b/schemars/Cargo.toml index a85238e..1ef5862 100644 --- a/schemars/Cargo.toml +++ b/schemars/Cargo.toml @@ -25,6 +25,7 @@ uuid = { version = "0.8", default-features = false, optional = true } 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 } [dev-dependencies] pretty_assertions = "0.6.1" @@ -66,6 +67,10 @@ required-features = ["uuid"] name = "smallvec" required-features = ["smallvec"] +[[test]] +name = "bytes" +required-features = ["bytes"] + [[test]] name = "arrayvec" required-features = ["arrayvec"] diff --git a/schemars/src/json_schema_impls/bytes.rs b/schemars/src/json_schema_impls/bytes.rs new file mode 100644 index 0000000..2a84cc2 --- /dev/null +++ b/schemars/src/json_schema_impls/bytes.rs @@ -0,0 +1,6 @@ +use crate::gen::SchemaGenerator; +use crate::schema::*; +use crate::JsonSchema; +use bytes::Bytes; + +forward_impl!((JsonSchema for Bytes) => Vec); diff --git a/schemars/src/json_schema_impls/mod.rs b/schemars/src/json_schema_impls/mod.rs index d493ea0..d114ac4 100644 --- a/schemars/src/json_schema_impls/mod.rs +++ b/schemars/src/json_schema_impls/mod.rs @@ -46,6 +46,8 @@ mod array; mod arrayvec; #[cfg(std_atomic)] mod atomic; +#[cfg(feature = "bytes")] +mod bytes; #[cfg(feature = "chrono")] mod chrono; mod core; diff --git a/schemars/tests/bytes.rs b/schemars/tests/bytes.rs new file mode 100644 index 0000000..69b5612 --- /dev/null +++ b/schemars/tests/bytes.rs @@ -0,0 +1,8 @@ +mod util; +use bytes::Bytes; +use util::*; + +#[test] +fn bytes() -> TestResult { + test_default_generated_schema::("bytes") +} diff --git a/schemars/tests/expected/bytes.json b/schemars/tests/expected/bytes.json new file mode 100644 index 0000000..294f0ec --- /dev/null +++ b/schemars/tests/expected/bytes.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_uint8", + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + } +}