clientix_codegen/
lib.rs

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// TODO: implemented other methods: PATCH, OPTION and etc
37
38#[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// TODO: implemented HTTP-methods based independent functions
50// TODO: implemented building client based struct params