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 clientix_core::prelude::reqwest::Method;
9use crate::client::parse_client;
10use crate::method::parse_method;
11
12#[proc_macro_attribute]
13pub fn clientix(attrs: TokenStream, item: TokenStream) -> TokenStream {
14    parse_client(item, attrs)
15}
16
17#[proc_macro_attribute]
18pub fn get(attrs: TokenStream, item: TokenStream) -> TokenStream {
19    parse_method(Method::GET, item, attrs)
20}
21
22#[proc_macro_attribute]
23pub fn post(attrs: TokenStream, item: TokenStream) -> TokenStream {
24    parse_method(Method::POST, item, attrs)
25}
26
27#[proc_macro_attribute]
28pub fn put(attrs: TokenStream, item: TokenStream) -> TokenStream {
29    parse_method(Method::PUT, item, attrs)
30}
31
32#[proc_macro_attribute]
33pub fn delete(attrs: TokenStream, item: TokenStream) -> TokenStream {
34    parse_method(Method::DELETE, item, attrs)
35}
36
37#[proc_macro_attribute]
38pub fn head(attrs: TokenStream, item: TokenStream) -> TokenStream {
39    parse_method(Method::HEAD, item, attrs)
40}
41
42#[proc_macro_attribute]
43pub fn options(attrs: TokenStream, item: TokenStream) -> TokenStream {
44    parse_method(Method::OPTIONS, item, attrs)
45}
46
47#[proc_macro_attribute]
48pub fn patch(attrs: TokenStream, item: TokenStream) -> TokenStream {
49    parse_method(Method::PATCH, item, attrs)
50}
51
52#[proc_macro_attribute]
53pub fn header(attrs: TokenStream, item: TokenStream) -> TokenStream {
54    TokenStream::default() // TODO:
55}
56
57#[proc_macro_attribute]
58pub fn data_transfer(_: TokenStream, item: TokenStream) -> TokenStream {
59    let item = parse_macro_input!(item as ItemStruct);
60
61    TokenStream::from(quote! {
62        #[derive(clientix::prelude::serde::Serialize, clientix::prelude::serde::Deserialize, Debug, Clone)]
63        #[serde(crate = "clientix::prelude::serde")]
64        #item
65    })
66}
67
68// TODO: implemented HTTP-methods based independent functions
69// TODO: implemented building client based struct params