1use proc_macro::{Span, TokenStream};
2use rpc_toolkit_macro_internals::*;
3
4#[proc_macro_attribute]
5pub fn command(args: TokenStream, item: TokenStream) -> TokenStream {
6 let args = syn::parse_macro_input!(args as syn::AttributeArgs);
7 let item = syn::parse_macro_input!(item as syn::ItemFn);
8 build_command(args, item).into()
9}
10
11#[proc_macro_attribute]
26pub fn arg(_: TokenStream, _: TokenStream) -> TokenStream {
27 syn::Error::new(
28 Span::call_site().into(),
29 "`arg` is only allowed on arguments of a function with the `command` attribute",
30 )
31 .to_compile_error()
32 .into()
33}
34
35#[proc_macro_attribute]
37pub fn context(_: TokenStream, _: TokenStream) -> TokenStream {
38 syn::Error::new(
39 Span::call_site().into(),
40 "`context` is only allowed on arguments of a function with the `command` attribute",
41 )
42 .to_compile_error()
43 .into()
44}
45
46#[proc_macro]
47pub fn rpc_handler(item: TokenStream) -> TokenStream {
48 let item = syn::parse_macro_input!(item as RpcHandlerArgs);
49 build_rpc_handler(item).into()
50}
51
52#[proc_macro]
53pub fn rpc_server(item: TokenStream) -> TokenStream {
54 let item = syn::parse_macro_input!(item as RpcServerArgs);
55 build_rpc_server(item).into()
56}
57
58#[proc_macro]
59pub fn run_cli(item: TokenStream) -> TokenStream {
60 let item = syn::parse_macro_input!(item as RunCliArgs);
61 build_run_cli(item).into()
62}