Fix elided_lifetimes_in_associated_constant compiler warning.

Will become an error in a future rust release. https://github.com/rust-lang/rust/issues/115010
This commit is contained in:
Martin Dahl 2023-12-13 14:52:32 +01:00
parent e81f706abe
commit 39b9f59fe7
1 changed files with 13 additions and 2 deletions

View File

@ -700,10 +700,21 @@ pub fn generate_rust_msg(module_: &str, prefix_: &str, name_: &str) -> proc_macr
.into_iter()
.flatten()
.map(|(const_name, typ)| {
let typ: Box<syn::Type> = syn::parse_str(typ).unwrap();
let const_name = format_ident!("{const_name}");
let value = format_ident!("{key}__{const_name}");
quote! { pub const #const_name: #typ = #value; }
if let Ok(mut typ) = syn::parse_str::<Box<syn::TypeReference>>(typ) {
// If the constant is a reference, rustc needs it to be static.
// (see https://github.com/rust-lang/rust/issues/115010)
typ.lifetime = Some(syn::Lifetime::new("'static", proc_macro2::Span::call_site()));
quote! { pub const #const_name: #typ = #value; }
}
else if let Ok(typ) = syn::parse_str::<Box<syn::Type>>(typ) {
// Value
quote! { pub const #const_name: #typ = #value; }
} else {
// Something else, hope for the best but will most likely fail to compile.
quote! { pub const #const_name: #typ = #value; }
}
})
.collect();