Skip to content

Commit

Permalink
add #[openapi(rename = "...")] attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
tomsik68 committed Dec 8, 2021
1 parent b6a428f commit 7bc30d0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
40 changes: 39 additions & 1 deletion macros/src/actix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,44 @@ pub fn emit_v2_errors_overlay(attrs: TokenStream, input: TokenStream) -> TokenSt
gen.into()
}

fn extract_rename(attrs: &[Attribute]) -> Option<String> {
attrs
.into_iter()
.filter(|attr| {
attr.path
.get_ident()
.map(|id| id.to_string() == "openapi")
.unwrap_or(false)
})
.next()
.map(|attr| {
match attr
.parse_meta()
.expect("failed to parse `#[openapi(...)]` meta")
{
Meta::NameValue(mnv) => {
if mnv
.path
.get_ident()
.map(|id| id == "rename")
.unwrap_or(false)
{
match mnv.lit {
Lit::Str(s) => Some(s.value().clone()),
_ => panic!("#[openapi(rename = ...)] expects literal as argument"),
}
} else {
None
}
}
_ => {
panic!("expected name=value meta inside #[openapi] attribute");
}
}
})
.flatten()
}

/// Actual parser and emitter for `api_v2_schema` macro.
pub fn emit_v2_definition(input: TokenStream) -> TokenStream {
let item_ast = match crate::expect_struct_or_enum(input) {
Expand Down Expand Up @@ -718,7 +756,7 @@ pub fn emit_v2_definition(input: TokenStream) -> TokenStream {
),
};

let schema_name = name.to_string();
let schema_name = extract_rename(&item_ast.attrs).unwrap_or(name.to_string());
let props_gen_empty = props_gen.is_empty();
let gen = quote! {
impl #impl_generics paperclip::v2::schema::Apiv2Schema for #name #ty_generics #where_clause {
Expand Down
1 change: 1 addition & 0 deletions tests/test_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ enum PetClass {

#[derive(Deserialize, Serialize, Apiv2Schema)]
#[serde(rename_all = "camelCase")]
#[openapi(rename = "PetRenamed")]
/// Pets are awesome!
struct Pet {
/// Pick a good one.
Expand Down

0 comments on commit 7bc30d0

Please sign in to comment.