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)]