binary_options_tools_macros/
lib.rs1mod action;
2mod config;
3mod deserialize;
4mod impls;
5mod region;
6mod serialize;
7mod timeout;
8
9use action::ActionImpl;
10use config::Config;
11use deserialize::Deserializer;
12use region::RegionImpl;
13use timeout::{Timeout, TimeoutArgs, TimeoutBody};
14
15use darling::FromDeriveInput;
16use proc_macro::TokenStream;
17use quote::quote;
18use serialize::Serializer;
19use syn::{parse_macro_input, DeriveInput};
20
21#[proc_macro]
22pub fn deserialize(input: TokenStream) -> TokenStream {
23 let d = parse_macro_input!(input as Deserializer);
24 quote! { #d }.into()
25}
26
27#[proc_macro]
28pub fn serialize(input: TokenStream) -> TokenStream {
29 let s = parse_macro_input!(input as Serializer);
30 quote! { #s }.into()
31}
32
33#[proc_macro_attribute]
40pub fn timeout(attr: TokenStream, item: TokenStream) -> TokenStream {
41 let args = parse_macro_input!(attr as TimeoutArgs);
42 let body = parse_macro_input!(item as TimeoutBody);
43 let timeout = Timeout::new(body, args);
44 let q = quote! { #timeout };
45
46 q.into()
48}
49
50#[proc_macro_derive(Config, attributes(config))]
51pub fn config(input: TokenStream) -> TokenStream {
52 let parsed = parse_macro_input!(input as DeriveInput);
53 let config = Config::from_derive_input(&parsed).unwrap();
54 quote! { #config }.into()
55}
56
57#[proc_macro_derive(RegionImpl, attributes(region))]
58pub fn region(input: TokenStream) -> TokenStream {
59 let parsed = parse_macro_input!(input as DeriveInput);
60 let region = RegionImpl::from_derive_input(&parsed).unwrap();
61 quote! { #region }.into()
62}
63
64#[proc_macro_derive(ActionImpl, attributes(action))]
65pub fn action_impl(input: TokenStream) -> TokenStream {
66 let parsed = parse_macro_input!(input as DeriveInput);
67 let action = match ActionImpl::from_derive_input(&parsed) {
68 Ok(action) => action,
69 Err(e) => return e.write_errors().into(),
70 };
71 quote! {
72 #action
73 }
74 .into()
75}