lolibaso-macros 0.1.0

lolibaso 的过程宏 crate
Documentation
use proc_macro::TokenStream;

mod api_requst;
mod api_response;
mod err_enum;
mod get_config;
mod init;
mod provider;

#[proc_macro_derive(Provider, attributes(provider))]
pub fn derive_provider(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as syn::DeriveInput);
    provider::expand(input)
        .unwrap_or_else(syn::Error::into_compile_error)
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn BizErrEnum(_args: TokenStream, item: TokenStream) -> TokenStream {
    let entity = syn::parse_macro_input!(item as err_enum::ErrEnum);
    let output = entity
        .expand()
        .unwrap_or_else(syn::Error::into_compile_error);

    let stream: TokenStream = output.into();

    stream
}

#[proc_macro_derive(ApiRequest, attributes(request))]
pub fn derive_api_request(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as api_requst::Request);
    input.expand().into()
}

#[proc_macro_derive(ApiResponse, attributes(response))]
pub fn derive_api_response(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as api_response::ApiResponse);
    input.expand().into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn InitFunction(args: TokenStream, item: TokenStream) -> TokenStream {
    let entity = syn::parse_macro_input!(item as init::InitMethod);
    let ext_fields = syn::parse_macro_input!(args as init::ExtFields);
    let output = entity.expand(ext_fields).unwrap_or_else(|err| {
        let err = err.to_compile_error();
        quote::quote! {
            #err
        }
    });

    let stream: TokenStream = output.into();

    stream
}

#[proc_macro_derive(GetConfig)]
pub fn derive_get_config(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as get_config::GetConfig);
    input
        .expand()
        .unwrap_or_else(syn::Error::into_compile_error)
        .into()
}