rustra_macros/
macro_bridge_type.rs1#[proc_macro_attribute]
17pub fn bridge_type(_attr: TokenStream, item: TokenStream) -> TokenStream {
18 let mut input = parse_macro_input!(item as DeriveInput);
19
20 input.attrs.push(syn::parse_quote! {
22 #[derive(Debug, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
23 });
24
25 let has_serde_rename = input.attrs.iter().any(|attr| {
27 if !attr.path().is_ident("serde") {
28 return false;
29 }
30 let Ok(nested) = attr.parse_args_with(
31 syn::punctuated::Punctuated::<syn::MetaNameValue, syn::Token![,]>::parse_terminated,
32 ) else {
33 return false;
34 };
35 nested.iter().any(|nv| nv.path.is_ident("rename_all"))
36 });
37
38 if !has_serde_rename {
39 input.attrs.push(syn::parse_quote! {
40 #[serde(rename_all = "camelCase")]
41 });
42 }
43
44 quote! { #input }.into()
45}