v0.6.1
Fix a compile error that can occur when deriving `JsonSchema` from a project that doesn't reference serde_json
This commit is contained in:
parent
351ff1572a
commit
e151d21d6d
5 changed files with 60 additions and 52 deletions
|
@ -1,5 +1,9 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.6.1] - 2019-12-09
|
||||||
|
### Fixed:
|
||||||
|
- Fix a compile error that can occur when deriving `JsonSchema` from a project that doesn't reference serde_json
|
||||||
|
|
||||||
## [0.6.0] - 2019-12-09
|
## [0.6.0] - 2019-12-09
|
||||||
### Added:
|
### Added:
|
||||||
- When deriving `JsonSchema`, the schema's `title` and `description` are now set from `#[doc]` comments (https://github.com/GREsau/schemars/issues/7)
|
- When deriving `JsonSchema`, the schema's `title` and `description` are now set from `#[doc]` comments (https://github.com/GREsau/schemars/issues/7)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name = "schemars"
|
name = "schemars"
|
||||||
description = "Generate JSON Schemas from Rust code"
|
description = "Generate JSON Schemas from Rust code"
|
||||||
repository = "https://github.com/GREsau/schemars"
|
repository = "https://github.com/GREsau/schemars"
|
||||||
version = "0.6.0"
|
version = "0.6.1"
|
||||||
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -12,7 +12,7 @@ categories = ["encoding"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
schemars_derive = { version = "0.6.0", path = "../schemars_derive" }
|
schemars_derive = { version = "=0.6.1", path = "../schemars_derive" }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
chrono = { version = "0.4", default-features = false, optional = true }
|
chrono = { version = "0.4", default-features = false, optional = true }
|
||||||
|
|
|
@ -195,6 +195,10 @@ pub mod schema;
|
||||||
|
|
||||||
pub use schemars_derive::*;
|
pub use schemars_derive::*;
|
||||||
|
|
||||||
|
// Export serde_json so schemars_derive can use it
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub use serde_json as _serde_json;
|
||||||
|
|
||||||
use schema::Schema;
|
use schema::Schema;
|
||||||
|
|
||||||
/// A type which can be described as a JSON Schema document.
|
/// A type which can be described as a JSON Schema document.
|
||||||
|
@ -215,64 +219,64 @@ use schema::Schema;
|
||||||
/// let my_schema = schema_for!(MyStruct);
|
/// let my_schema = schema_for!(MyStruct);
|
||||||
/// ```
|
/// ```
|
||||||
pub trait JsonSchema {
|
pub trait JsonSchema {
|
||||||
/// Whether JSON Schemas generated for this type should be re-used where possible using the `$ref` keyword.
|
/// Whether JSON Schemas generated for this type should be re-used where possible using the `$ref` keyword.
|
||||||
///
|
///
|
||||||
/// For trivial types (such as primitives), this should return `false`. For more complex types, it should return `true`.
|
/// For trivial types (such as primitives), this should return `false`. For more complex types, it should return `true`.
|
||||||
/// For recursive types, this *must* return `true` to prevent infinite cycles when generating schemas.
|
/// For recursive types, this *must* return `true` to prevent infinite cycles when generating schemas.
|
||||||
///
|
///
|
||||||
/// By default, this returns `true`.
|
/// By default, this returns `true`.
|
||||||
fn is_referenceable() -> bool {
|
fn is_referenceable() -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The name of the generated JSON Schema.
|
/// The name of the generated JSON Schema.
|
||||||
///
|
///
|
||||||
/// This is used as the title for root schemas, and the key within the `definitions` property for subschemas.
|
/// This is used as the title for root schemas, and the key within the `definitions` property for subschemas.
|
||||||
fn schema_name() -> String;
|
fn schema_name() -> String;
|
||||||
|
|
||||||
/// Generates a JSON Schema for this type.
|
/// Generates a JSON Schema for this type.
|
||||||
///
|
///
|
||||||
/// If the returned schema depends on any [referenceable](JsonSchema::is_referenceable) schemas, then this method will
|
/// If the returned schema depends on any [referenceable](JsonSchema::is_referenceable) schemas, then this method will
|
||||||
/// add them to the [`SchemaGenerator`](gen::SchemaGenerator)'s schema definitions.
|
/// add them to the [`SchemaGenerator`](gen::SchemaGenerator)'s schema definitions.
|
||||||
///
|
///
|
||||||
/// This should not return a `$ref` schema.
|
/// This should not return a `$ref` schema.
|
||||||
fn json_schema(gen: &mut gen::SchemaGenerator) -> Schema;
|
fn json_schema(gen: &mut gen::SchemaGenerator) -> Schema;
|
||||||
|
|
||||||
/// Helper for generating schemas for flattened `Option` fields.
|
/// Helper for generating schemas for flattened `Option` fields.
|
||||||
///
|
///
|
||||||
/// This should not need to be called or implemented by code outside of `schemars`.
|
/// This should not need to be called or implemented by code outside of `schemars`.
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
fn json_schema_optional(gen: &mut gen::SchemaGenerator) -> Schema {
|
fn json_schema_optional(gen: &mut gen::SchemaGenerator) -> Schema {
|
||||||
Self::json_schema(gen)
|
Self::json_schema(gen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests {
|
pub mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub fn schema_object_for<T: JsonSchema>() -> schema::SchemaObject {
|
pub fn schema_object_for<T: JsonSchema>() -> schema::SchemaObject {
|
||||||
schema_object(schema_for::<T>())
|
schema_object(schema_for::<T>())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn custom_schema_object_for<T: JsonSchema>(
|
pub fn custom_schema_object_for<T: JsonSchema>(
|
||||||
settings: gen::SchemaSettings,
|
settings: gen::SchemaSettings,
|
||||||
) -> schema::SchemaObject {
|
) -> schema::SchemaObject {
|
||||||
schema_object(custom_schema_for::<T>(settings))
|
schema_object(custom_schema_for::<T>(settings))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn schema_for<T: JsonSchema>() -> schema::Schema {
|
pub fn schema_for<T: JsonSchema>() -> schema::Schema {
|
||||||
custom_schema_for::<T>(Default::default())
|
custom_schema_for::<T>(Default::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn custom_schema_for<T: JsonSchema>(settings: gen::SchemaSettings) -> schema::Schema {
|
pub fn custom_schema_for<T: JsonSchema>(settings: gen::SchemaSettings) -> schema::Schema {
|
||||||
T::json_schema(&mut gen::SchemaGenerator::new(settings))
|
T::json_schema(&mut gen::SchemaGenerator::new(settings))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn schema_object(schema: schema::Schema) -> schema::SchemaObject {
|
pub fn schema_object(schema: schema::Schema) -> schema::SchemaObject {
|
||||||
match schema {
|
match schema {
|
||||||
schema::Schema::Object(o) => o,
|
schema::Schema::Object(o) => o,
|
||||||
s => panic!("Schema was not an object: {:?}", s),
|
s => panic!("Schema was not an object: {:?}", s),
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
name = "schemars_derive"
|
name = "schemars_derive"
|
||||||
description = "Macros for #[derive(JsonSchema)], for use with schemars"
|
description = "Macros for #[derive(JsonSchema)], for use with schemars"
|
||||||
repository = "https://github.com/GREsau/schemars"
|
repository = "https://github.com/GREsau/schemars"
|
||||||
version = "0.6.0"
|
version = "0.6.1"
|
||||||
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
@ -59,12 +59,12 @@ pub fn set_metadata_on_schema(schema_expr: TokenStream, metadata: &SchemaMetadat
|
||||||
{
|
{
|
||||||
let default = #default;
|
let default = #default;
|
||||||
if !#skip_if(&default) {
|
if !#skip_if(&default) {
|
||||||
metadata.default = serde_json::value::to_value(default).ok();
|
metadata.default = schemars::_serde_json::value::to_value(default).ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
(Some(default), None) => setters.push(quote! {
|
(Some(default), None) => setters.push(quote! {
|
||||||
metadata.default = serde_json::value::to_value(#default).ok();
|
metadata.default = schemars::_serde_json::value::to_value(#default).ok();
|
||||||
}),
|
}),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue