rustolio_utils_macros/
lib.rs1use proc_macro::TokenStream;
12use syn::{DeriveInput, ItemFn, parse_macro_input};
13
14mod encode;
15mod service;
16
17#[proc_macro_derive(Service, attributes(impls))]
19pub fn service_derive(item: TokenStream) -> TokenStream {
20 service::service_derive(item)
21}
22
23#[proc_macro_attribute]
24pub fn service_impl(attr: TokenStream, item: TokenStream) -> TokenStream {
25 service::service_impl(attr, item)
26}
27
28#[proc_macro]
29pub fn service(item: TokenStream) -> TokenStream {
30 service::service(item)
31}
32
33#[proc_macro_derive(Encode, attributes(encode))]
34pub fn derive_encode(input: TokenStream) -> TokenStream {
35 let input = parse_macro_input!(input as DeriveInput);
36 match encode::derive_encode(input) {
37 Ok(v) => v,
38 Err(e) => e.into_compile_error().into(),
39 }
40}
41
42#[proc_macro_derive(Decode, attributes(encode))]
43pub fn derive_decode(input: TokenStream) -> TokenStream {
44 let input = parse_macro_input!(input as DeriveInput);
45 match encode::derive_decode(input) {
46 Ok(v) => v,
47 Err(e) => e.into_compile_error().into(),
48 }
49}
50
51#[proc_macro_attribute]
52pub fn async_impl(_attr: TokenStream, input: TokenStream) -> TokenStream {
53 let input = parse_macro_input!(input as ItemFn);
54 match encode::async_impl(input) {
55 Ok(v) => v,
56 Err(e) => e.into_compile_error().into(),
57 }
58}