carapax-codegen 0.2.0

Procedural macroses for carapax
Documentation
use crate::dialogue::meta::DialogueMeta;
use proc_macro2::TokenStream;
use quote::quote;

pub(crate) fn build(meta: DialogueMeta) -> TokenStream {
    let DialogueMeta {
        vis,
        ident,
        ident_inner,
        handler,
        state,
        context,
        input,
        error,
    } = meta;
    quote! {
        #handler
        #[allow(non_camel_case_types)]
        #vis struct #ident;
        #[::carapax::async_trait]
        impl ::carapax::dialogue::DialogueHandler<#context, #state> for #ident {
            type Input = #input;
            type Error = #error;
            async fn handle(
                &mut self,
                state: #state,
                context: &#context,
                input: Self::Input
            ) -> ::std::result::Result<::carapax::dialogue::DialogueResult<#state>, Self::Error> {
                #ident_inner(state, context, input).await
            }
        }
    }
}