1mod method;
2mod client;
3mod return_kind;
4
5use proc_macro::TokenStream;
6use quote::quote;
7use syn::{parse_macro_input, ItemStruct};
8use crate::client::parse_client;
9use crate::method::{parse_method, HttpMethod};
10
11#[proc_macro_attribute]
12pub fn clientix(attrs: TokenStream, item: TokenStream) -> TokenStream {
13 parse_client(item, attrs)
14}
15
16#[proc_macro_attribute]
17pub fn get(attrs: TokenStream, item: TokenStream) -> TokenStream {
18 parse_method(HttpMethod::Get, item, attrs)
19}
20
21#[proc_macro_attribute]
22pub fn post(attrs: TokenStream, item: TokenStream) -> TokenStream {
23 parse_method(HttpMethod::Post, item, attrs)
24}
25
26#[proc_macro_attribute]
27pub fn put(attrs: TokenStream, item: TokenStream) -> TokenStream {
28 parse_method(HttpMethod::Put, item, attrs)
29}
30
31#[proc_macro_attribute]
32pub fn delete(attrs: TokenStream, item: TokenStream) -> TokenStream {
33 parse_method(HttpMethod::Delete, item, attrs)
34}
35
36#[proc_macro_attribute]
39pub fn data_transfer(_: TokenStream, item: TokenStream) -> TokenStream {
40 let item = parse_macro_input!(item as ItemStruct);
41
42 TokenStream::from(quote! {
43 #[derive(clientix::prelude::serde::Serialize, clientix::prelude::serde::Deserialize, Debug, Clone)]
44 #[serde(crate = "clientix::prelude::serde")]
45 #item
46 })
47}
48
49