From d7c92223301492c5d23322f2a944a858ba06786c Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Sat, 29 Feb 2020 19:57:34 +0000 Subject: [PATCH] Refactor apply_metadata() to remove clone --- schemars/src/gen.rs | 12 +++++++----- schemars/src/json_schema_impls/core.rs | 4 +--- schemars/src/lib.rs | 7 ++----- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/schemars/src/gen.rs b/schemars/src/gen.rs index 17fed1d..e0aa203 100644 --- a/schemars/src/gen.rs +++ b/schemars/src/gen.rs @@ -343,10 +343,12 @@ impl SchemaGenerator { } } - // TODO should this take a Schema instead of SchemaObject? - pub(crate) fn apply_metadata(&self, schema: &mut SchemaObject, metadata: Metadata) { - self.make_extensible(schema); - // TODO get rid of the clone - schema.metadata = Some(Box::new(metadata)).merge(schema.metadata.clone()); + pub(crate) fn apply_metadata(&self, schema: Schema, metadata: Metadata) -> Schema { + let mut schema_obj = schema.into(); + + self.make_extensible(&mut schema_obj); + schema_obj.metadata = Some(Box::new(metadata)).merge(schema_obj.metadata); + + Schema::Object(schema_obj) } } diff --git a/schemars/src/json_schema_impls/core.rs b/schemars/src/json_schema_impls/core.rs index 9f0fe7c..8accdb1 100644 --- a/schemars/src/json_schema_impls/core.rs +++ b/schemars/src/json_schema_impls/core.rs @@ -67,9 +67,7 @@ impl JsonSchema for Option { let mut schema = gen.subschema_for::(); if let Some(metadata) = metadata { - let mut schema_obj = schema.into(); - gen.apply_metadata(&mut schema_obj, metadata); - schema = Schema::Object(schema_obj); + schema = gen.apply_metadata(schema, metadata); } let object = parent.object(); diff --git a/schemars/src/lib.rs b/schemars/src/lib.rs index 4d3f0db..d3204da 100644 --- a/schemars/src/lib.rs +++ b/schemars/src/lib.rs @@ -37,8 +37,7 @@ fn main() { "type": "object", "required": [ "my_bool", - "my_int", - "my_nullable_enum" + "my_int" ], "properties": { "my_bool": { @@ -303,9 +302,7 @@ pub trait JsonSchema { let mut schema = gen.subschema_for::(); if let Some(metadata) = metadata { - let mut schema_obj = schema.into(); - gen.apply_metadata(&mut schema_obj, metadata); - schema = Schema::Object(schema_obj); + schema = gen.apply_metadata(schema, metadata); } let object = parent.object();