Refactor out add_schema_as_property

This commit is contained in:
Graham Esau 2021-04-16 10:42:03 +01:00
parent 1a2dafc1a5
commit 60a9869448
6 changed files with 89 additions and 101 deletions

View file

@ -1,7 +1,6 @@
use crate::attr;
use attr::Attrs;
use proc_macro2::{Ident, Span, TokenStream};
use quote::{ToTokens, TokenStreamExt};
use proc_macro2::TokenStream;
#[derive(Debug, Clone)]
pub struct SchemaMetadata<'a> {
@ -14,24 +13,6 @@ pub struct SchemaMetadata<'a> {
pub default: Option<TokenStream>,
}
impl ToTokens for SchemaMetadata<'_> {
fn to_tokens(&self, tokens: &mut TokenStream) {
let setters = self.make_setters();
if setters.is_empty() {
tokens.append(Ident::new("None", Span::call_site()))
} else {
tokens.extend(quote! {
Some({
schemars::schema::Metadata {
#(#setters)*
..Default::default()
}
})
})
}
}
}
impl<'a> SchemaMetadata<'a> {
pub fn from_attrs(attrs: &'a Attrs) -> Self {
SchemaMetadata {
@ -46,10 +27,15 @@ impl<'a> SchemaMetadata<'a> {
}
pub fn apply_to_schema(&self, schema_expr: TokenStream) -> TokenStream {
quote! {
{
let schema = #schema_expr;
schemars::_private::apply_metadata(schema, #self)
let setters = self.make_setters();
if setters.is_empty() {
schema_expr
} else {
quote! {
schemars::_private::apply_metadata(#schema_expr, schemars::schema::Metadata {
#(#setters)*
..Default::default()
})
}
}
}