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}