yara-x-macros 1.15.0

Procedural macros used by the yara-x crate
Documentation
extern crate proc_macro;

use proc_macro2::TokenStream;
use quote::{ToTokens, quote};
use syn::{ItemFn, Result};

pub(crate) fn impl_module_main_macro(input: ItemFn) -> Result<TokenStream> {
    let fn_name = &input.sig.ident;

    let main_stub = quote! {
        use protobuf::MessageDyn;
        use crate::modules::ModuleError;
        pub(crate) fn __main__(data: &[u8], meta: Option<&[u8]>) -> Result<Box<dyn MessageDyn>, ModuleError> {
            #fn_name(data, meta).map(|ok| Box::new(ok) as Box<dyn MessageDyn>)
        }
    };

    let mut token_stream = input.to_token_stream();

    token_stream.extend(main_stub);

    Ok(token_stream)
}