lolibaso_macros/
lib.rs

1use proc_macro::TokenStream;
2
3mod api_requst;
4mod api_response;
5mod err_enum;
6mod get_config;
7mod init;
8mod provider;
9
10#[proc_macro_derive(Provider, attributes(provider))]
11pub fn derive_provider(input: TokenStream) -> TokenStream {
12    let input = syn::parse_macro_input!(input as syn::DeriveInput);
13    provider::expand(input)
14        .unwrap_or_else(syn::Error::into_compile_error)
15        .into()
16}
17
18#[allow(non_snake_case)]
19#[proc_macro_attribute]
20pub fn BizErrEnum(_args: TokenStream, item: TokenStream) -> TokenStream {
21    let entity = syn::parse_macro_input!(item as err_enum::ErrEnum);
22    let output = entity
23        .expand()
24        .unwrap_or_else(syn::Error::into_compile_error);
25
26    let stream: TokenStream = output.into();
27
28    stream
29}
30
31#[proc_macro_derive(ApiRequest, attributes(request))]
32pub fn derive_api_request(input: TokenStream) -> TokenStream {
33    let input = syn::parse_macro_input!(input as api_requst::Request);
34    input.expand().into()
35}
36
37#[proc_macro_derive(ApiResponse, attributes(response))]
38pub fn derive_api_response(input: TokenStream) -> TokenStream {
39    let input = syn::parse_macro_input!(input as api_response::ApiResponse);
40    input.expand().into()
41}
42
43#[allow(non_snake_case)]
44#[proc_macro_attribute]
45pub fn InitFunction(args: TokenStream, item: TokenStream) -> TokenStream {
46    let entity = syn::parse_macro_input!(item as init::InitMethod);
47    let ext_fields = syn::parse_macro_input!(args as init::ExtFields);
48    let output = entity.expand(ext_fields).unwrap_or_else(|err| {
49        let err = err.to_compile_error();
50        quote::quote! {
51            #err
52        }
53    });
54
55    let stream: TokenStream = output.into();
56
57    stream
58}
59
60#[proc_macro_derive(GetConfig)]
61pub fn derive_get_config(input: TokenStream) -> TokenStream {
62    let input = syn::parse_macro_input!(input as get_config::GetConfig);
63    input
64        .expand()
65        .unwrap_or_else(syn::Error::into_compile_error)
66        .into()
67}