qt_macros 0.1.1

Macros for Qt
Documentation
use proc_macro::TokenStream;
use proc_macro2::Span;
use quote::quote;
use syn::{parse_macro_input, Ident, LitStr};

pub fn q_init_resource(input: TokenStream) -> TokenStream {
    let resource_name = parse_macro_input!(input as LitStr).value();
    let escaped_resource_name = resource_name
        .chars()
        .map(|c| {
            if c.is_ascii_alphanumeric() || c == '_' {
                c
            } else {
                '_'
            }
        })
        .collect::<String>();
    let fn_name = Ident::new(
        &format!("ritual_init_resource_{}", escaped_resource_name),
        Span::call_site(),
    );
    let expanded = quote! {
        {
            extern "C" {
                fn #fn_name();
            }
            unsafe {
                #fn_name();
            }
        }
    };

    TokenStream::from(expanded)
}