#[proc_macro_attribute]
pub fn bridge_type(_attr: TokenStream, item: TokenStream) -> TokenStream {
let mut input = parse_macro_input!(item as DeriveInput);
input.attrs.push(syn::parse_quote! {
#[derive(Debug, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
});
let has_serde_rename = input.attrs.iter().any(|attr| {
if !attr.path().is_ident("serde") {
return false;
}
let Ok(nested) = attr.parse_args_with(
syn::punctuated::Punctuated::<syn::MetaNameValue, syn::Token![,]>::parse_terminated,
) else {
return false;
};
nested.iter().any(|nv| nv.path.is_ident("rename_all"))
});
if !has_serde_rename {
input.attrs.push(syn::parse_quote! {
#[serde(rename_all = "camelCase")]
});
}
quote! { #input }.into()
}