lua_engine_macros 0.1.0

proc macros for lua engine
Documentation
use quote::quote;
use proc_macro::TokenStream;
use syn::{parse_macro_input, DeriveInput};

#[proc_macro_derive(SmartExpression)]
pub fn expression_impl_fn(input: TokenStream) -> TokenStream {
    let input: DeriveInput = parse_macro_input!(input);
    let name = &input.ident;

    let expanded = quote! {
        impl Expression for #name {
            fn as_any(&self) -> &dyn Any {
                self
            }

            fn to_string(&self) -> String {
                return format!("{:?}", self);
            }
        }
    };

    TokenStream::from(expanded)
}

#[proc_macro_derive(SmartStatement)]
pub fn statement_as_any_fn(input: TokenStream) -> TokenStream {
    let input: DeriveInput = parse_macro_input!(input);
    let name = &input.ident;

    let expanded = quote! {
        impl Statement for #name {
            fn as_any(&self) -> &dyn Any {
                self
            }

            fn to_string(&self) -> String {
                return format!("{:?}", self);
            }
        }
    };

    TokenStream::from(expanded)
}