use quote::format_ident;
use quote::quote;
use crate::config::TypeConfig;
pub fn generate_type_aliases(config: &TypeConfig) -> proc_macro2::TokenStream {
let aliases = config.type_aliases.iter().flat_map(|alias_def| {
let original_name = &alias_def.original_name;
let alias_name = &alias_def.alias_name;
vec![
generate_single_alias(original_name, alias_name, "f32"),
generate_single_alias(original_name, alias_name, "f64"),
]
});
quote! {
#(#aliases)*
}
}
fn generate_single_alias(
original_name: &proc_macro2::Ident,
alias_name: &proc_macro2::Ident,
float_type: &str,
) -> proc_macro2::TokenStream {
let float_type_upper = float_type.to_uppercase();
let original_struct_name = format_ident!("{}{}", original_name, float_type_upper);
let alias_struct_name = format_ident!("{}{}", alias_name, float_type_upper);
let doc_string = format!("Type alias for [`{}`]", original_struct_name);
quote! {
#[doc = #doc_string]
pub type #alias_struct_name = #original_struct_name;
}
}