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
|
||||
|
||||
## [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
|
||||
### Added:
|
||||
- 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"
|
||||
description = "Generate JSON Schemas from Rust code"
|
||||
repository = "https://github.com/GREsau/schemars"
|
||||
version = "0.6.0"
|
||||
version = "0.6.1"
|
||||
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
||||
edition = "2018"
|
||||
license = "MIT"
|
||||
|
@ -12,7 +12,7 @@ categories = ["encoding"]
|
|||
build = "build.rs"
|
||||
|
||||
[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_json = "1.0"
|
||||
chrono = { version = "0.4", default-features = false, optional = true }
|
||||
|
|
|
@ -195,6 +195,10 @@ pub mod schema;
|
|||
|
||||
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;
|
||||
|
||||
/// A type which can be described as a JSON Schema document.
|
||||
|
@ -215,64 +219,64 @@ use schema::Schema;
|
|||
/// let my_schema = schema_for!(MyStruct);
|
||||
/// ```
|
||||
pub trait JsonSchema {
|
||||
/// 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 recursive types, this *must* return `true` to prevent infinite cycles when generating schemas.
|
||||
///
|
||||
/// By default, this returns `true`.
|
||||
fn is_referenceable() -> bool {
|
||||
true
|
||||
}
|
||||
/// 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 recursive types, this *must* return `true` to prevent infinite cycles when generating schemas.
|
||||
///
|
||||
/// By default, this returns `true`.
|
||||
fn is_referenceable() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
/// 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.
|
||||
fn schema_name() -> String;
|
||||
/// 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.
|
||||
fn schema_name() -> String;
|
||||
|
||||
/// Generates a JSON Schema for this type.
|
||||
///
|
||||
/// 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.
|
||||
///
|
||||
/// This should not return a `$ref` schema.
|
||||
fn json_schema(gen: &mut gen::SchemaGenerator) -> Schema;
|
||||
/// Generates a JSON Schema for this type.
|
||||
///
|
||||
/// 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.
|
||||
///
|
||||
/// This should not return a `$ref` schema.
|
||||
fn json_schema(gen: &mut gen::SchemaGenerator) -> Schema;
|
||||
|
||||
/// Helper for generating schemas for flattened `Option` fields.
|
||||
///
|
||||
/// This should not need to be called or implemented by code outside of `schemars`.
|
||||
#[doc(hidden)]
|
||||
fn json_schema_optional(gen: &mut gen::SchemaGenerator) -> Schema {
|
||||
Self::json_schema(gen)
|
||||
}
|
||||
/// Helper for generating schemas for flattened `Option` fields.
|
||||
///
|
||||
/// This should not need to be called or implemented by code outside of `schemars`.
|
||||
#[doc(hidden)]
|
||||
fn json_schema_optional(gen: &mut gen::SchemaGenerator) -> Schema {
|
||||
Self::json_schema(gen)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub mod tests {
|
||||
use super::*;
|
||||
use super::*;
|
||||
|
||||
pub fn schema_object_for<T: JsonSchema>() -> schema::SchemaObject {
|
||||
schema_object(schema_for::<T>())
|
||||
}
|
||||
pub fn schema_object_for<T: JsonSchema>() -> schema::SchemaObject {
|
||||
schema_object(schema_for::<T>())
|
||||
}
|
||||
|
||||
pub fn custom_schema_object_for<T: JsonSchema>(
|
||||
settings: gen::SchemaSettings,
|
||||
) -> schema::SchemaObject {
|
||||
schema_object(custom_schema_for::<T>(settings))
|
||||
}
|
||||
pub fn custom_schema_object_for<T: JsonSchema>(
|
||||
settings: gen::SchemaSettings,
|
||||
) -> schema::SchemaObject {
|
||||
schema_object(custom_schema_for::<T>(settings))
|
||||
}
|
||||
|
||||
pub fn schema_for<T: JsonSchema>() -> schema::Schema {
|
||||
custom_schema_for::<T>(Default::default())
|
||||
}
|
||||
pub fn schema_for<T: JsonSchema>() -> schema::Schema {
|
||||
custom_schema_for::<T>(Default::default())
|
||||
}
|
||||
|
||||
pub fn custom_schema_for<T: JsonSchema>(settings: gen::SchemaSettings) -> schema::Schema {
|
||||
T::json_schema(&mut gen::SchemaGenerator::new(settings))
|
||||
}
|
||||
pub fn custom_schema_for<T: JsonSchema>(settings: gen::SchemaSettings) -> schema::Schema {
|
||||
T::json_schema(&mut gen::SchemaGenerator::new(settings))
|
||||
}
|
||||
|
||||
pub fn schema_object(schema: schema::Schema) -> schema::SchemaObject {
|
||||
match schema {
|
||||
schema::Schema::Object(o) => o,
|
||||
s => panic!("Schema was not an object: {:?}", s),
|
||||
}
|
||||
pub fn schema_object(schema: schema::Schema) -> schema::SchemaObject {
|
||||
match schema {
|
||||
schema::Schema::Object(o) => o,
|
||||
s => panic!("Schema was not an object: {:?}", s),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
name = "schemars_derive"
|
||||
description = "Macros for #[derive(JsonSchema)], for use with schemars"
|
||||
repository = "https://github.com/GREsau/schemars"
|
||||
version = "0.6.0"
|
||||
version = "0.6.1"
|
||||
authors = ["Graham Esau <gesau@hotmail.co.uk>"]
|
||||
edition = "2018"
|
||||
license = "MIT"
|
||||
|
|
|
@ -59,12 +59,12 @@ pub fn set_metadata_on_schema(schema_expr: TokenStream, metadata: &SchemaMetadat
|
|||
{
|
||||
let default = #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! {
|
||||
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