Add SetSingleExample visitor for openapi 3.0

This commit is contained in:
Graham Esau 2020-06-12 21:38:13 +01:00
parent ca7c66eb08
commit 8f85178a7a
2 changed files with 29 additions and 0 deletions

View file

@ -79,6 +79,9 @@ impl SchemaSettings {
Box::new(ReplaceBoolSchemas { Box::new(ReplaceBoolSchemas {
skip_additional_properties: true, skip_additional_properties: true,
}), }),
Box::new(SetSingleExample {
retain_examples: false,
}),
], ],
_hidden: (), _hidden: (),
} }

View file

@ -93,6 +93,7 @@ fn visit_single_or_vec<V: Visitor + ?Sized>(v: &mut V, target: &mut Option<Singl
/// TODO document /// TODO document
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct ReplaceBoolSchemas { pub struct ReplaceBoolSchemas {
/// TODO document
pub skip_additional_properties: bool, pub skip_additional_properties: bool,
} }
@ -146,3 +147,28 @@ impl Visitor for RemoveRefSiblings {
} }
} }
} }
/// TODO document
#[derive(Debug, Clone)]
pub struct SetSingleExample {
/// TODO document
pub retain_examples: bool,
}
impl Visitor for SetSingleExample {
fn visit_schema_object(&mut self, schema: &mut SchemaObject) {
visit_schema_object(self, schema);
let first_example = schema.metadata.as_mut().and_then(|m| {
if self.retain_examples {
m.examples.first().cloned()
} else {
m.examples.drain(..).next()
}
});
if let Some(example) = first_example {
schema.extensions.insert("example".to_owned(), example);
}
}
}