From f38f58d1e84f5dc1ab5b5abb782d4abf237eddf8 Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Sun, 13 Oct 2019 22:42:34 +0100 Subject: [PATCH] Move root schema definitions into Metadata --- schemars/src/flatten.rs | 3 ++- schemars/src/gen.rs | 4 ++-- schemars/src/schema.rs | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/schemars/src/flatten.rs b/schemars/src/flatten.rs index 82f452c..506e719 100644 --- a/schemars/src/flatten.rs +++ b/schemars/src/flatten.rs @@ -35,12 +35,13 @@ macro_rules! impl_merge { } impl_merge!(SchemaObject { - merge: definitions extensions instance_type enum_values + merge: extensions instance_type enum_values metadata subschemas number string array object, or: format const_value reference, }); impl_merge!(Metadata { + merge: definitions, or: schema id title description, }); diff --git a/schemars/src/gen.rs b/schemars/src/gen.rs index f51d34d..725c3f4 100644 --- a/schemars/src/gen.rs +++ b/schemars/src/gen.rs @@ -129,7 +129,7 @@ impl SchemaGenerator { let metadata = schema.metadata.get_or_insert_with(Default::default); metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned()); metadata.title = Some(T::schema_name()); - schema.definitions.extend(self.definitions().clone()); + metadata.definitions.extend(self.definitions().clone()); Ok(schema) } @@ -138,7 +138,7 @@ impl SchemaGenerator { let metadata = schema.metadata.get_or_insert_with(Default::default); metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned()); metadata.title = Some(T::schema_name()); - schema.definitions.extend(self.into_definitions()); + metadata.definitions.extend(self.into_definitions()); Ok(schema) } diff --git a/schemars/src/schema.rs b/schemars/src/schema.rs index eb19372..69bc8eb 100644 --- a/schemars/src/schema.rs +++ b/schemars/src/schema.rs @@ -48,8 +48,6 @@ pub struct SchemaObject { pub enum_values: Option>, #[serde(rename = "const", skip_serializing_if = "Option::is_none")] pub const_value: Option, - #[serde(alias = "$defs", skip_serializing_if = "Map::is_empty")] - pub definitions: Map, #[serde(flatten, deserialize_with = "skip_if_default")] pub subschemas: Option>, #[serde(flatten, deserialize_with = "skip_if_default")] @@ -126,6 +124,8 @@ pub struct Metadata { pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, + #[serde(alias = "$defs", skip_serializing_if = "Map::is_empty")] + pub definitions: Map, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema)]