Move root schema definitions into Metadata

This commit is contained in:
Graham Esau 2019-10-13 22:42:34 +01:00
parent c78d721fc5
commit f38f58d1e8
3 changed files with 6 additions and 5 deletions

View file

@ -35,12 +35,13 @@ macro_rules! impl_merge {
} }
impl_merge!(SchemaObject { impl_merge!(SchemaObject {
merge: definitions extensions instance_type enum_values merge: extensions instance_type enum_values
metadata subschemas number string array object, metadata subschemas number string array object,
or: format const_value reference, or: format const_value reference,
}); });
impl_merge!(Metadata { impl_merge!(Metadata {
merge: definitions,
or: schema id title description, or: schema id title description,
}); });

View file

@ -129,7 +129,7 @@ impl SchemaGenerator {
let metadata = schema.metadata.get_or_insert_with(Default::default); let metadata = schema.metadata.get_or_insert_with(Default::default);
metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned()); metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned());
metadata.title = Some(T::schema_name()); metadata.title = Some(T::schema_name());
schema.definitions.extend(self.definitions().clone()); metadata.definitions.extend(self.definitions().clone());
Ok(schema) Ok(schema)
} }
@ -138,7 +138,7 @@ impl SchemaGenerator {
let metadata = schema.metadata.get_or_insert_with(Default::default); let metadata = schema.metadata.get_or_insert_with(Default::default);
metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned()); metadata.schema = Some("http://json-schema.org/draft-07/schema#".to_owned());
metadata.title = Some(T::schema_name()); metadata.title = Some(T::schema_name());
schema.definitions.extend(self.into_definitions()); metadata.definitions.extend(self.into_definitions());
Ok(schema) Ok(schema)
} }

View file

@ -48,8 +48,6 @@ pub struct SchemaObject {
pub enum_values: Option<Vec<Value>>, pub enum_values: Option<Vec<Value>>,
#[serde(rename = "const", skip_serializing_if = "Option::is_none")] #[serde(rename = "const", skip_serializing_if = "Option::is_none")]
pub const_value: Option<Value>, pub const_value: Option<Value>,
#[serde(alias = "$defs", skip_serializing_if = "Map::is_empty")]
pub definitions: Map<String, Schema>,
#[serde(flatten, deserialize_with = "skip_if_default")] #[serde(flatten, deserialize_with = "skip_if_default")]
pub subschemas: Option<Box<SubschemaValidation>>, pub subschemas: Option<Box<SubschemaValidation>>,
#[serde(flatten, deserialize_with = "skip_if_default")] #[serde(flatten, deserialize_with = "skip_if_default")]
@ -126,6 +124,8 @@ pub struct Metadata {
pub title: Option<String>, pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>, pub description: Option<String>,
#[serde(alias = "$defs", skip_serializing_if = "Map::is_empty")]
pub definitions: Map<String, Schema>,
} }
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema)] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema)]