scylla_macros_flex/
lib.rs

1use proc_macro::TokenStream;
2
3mod from_row;
4mod from_user_type;
5mod into_cql_select;
6mod parser;
7
8/// #[derive(FromRow)] derives FromRow for struct
9/// Works only on simple structs without generics etc
10#[proc_macro_derive(FromRowLax)]
11pub fn from_row_derive(tokens_input: TokenStream) -> TokenStream {
12    from_row::from_row_derive(tokens_input)
13}
14
15/// #[derive(FromUserType)] allows to parse a struct as User Defined Type
16/// Works only on simple structs without generics etc
17#[proc_macro_derive(FromUserTypeLax)]
18pub fn from_user_type_derive(tokens_input: TokenStream) -> TokenStream {
19    from_user_type::from_user_type_derive(tokens_input)
20}
21
22#[proc_macro_derive(IntoCQLSelect)]
23pub fn into_cql_select_derive(tokens_input: TokenStream) -> TokenStream {
24    into_cql_select::into_cql_select_derive(tokens_input)
25}
26
27cfg_if::cfg_if! {
28    if #[cfg(feature = "speedy")] {
29        mod ext_speedy;
30        /// #[derive(FromSpeedy)] derives FromSpeedy for structs/enum
31        #[proc_macro_derive(FromSpeedy)]
32        pub fn from_speedy_derive(tokens_input: TokenStream) -> TokenStream {
33            ext_speedy::from_speedy_derive(tokens_input)
34        }
35
36        /// #[derive(IntoSpeedy)] derives FromSpeedy for structs/enum
37        #[proc_macro_derive(IntoSpeedy)]
38        pub fn into_speedy_derive(tokens_input: TokenStream) -> TokenStream {
39            ext_speedy::into_speedy_derive(tokens_input)
40        }
41    }
42}
43
44cfg_if::cfg_if! {
45    if #[cfg(feature = "serde_json")] {
46        mod ext_serde_json;
47        /// #[derive(FromJson)] derives FromJson for struct
48        /// Works only on simple structs without generics etc
49        #[proc_macro_derive(FromJson)]
50        pub fn from_json_derive(tokens_input: TokenStream) -> TokenStream {
51            ext_serde_json::from_json_derive(tokens_input)
52        }
53
54        /// #[derive(IntoJson)] derives FromJson for struct
55        /// Works only on simple structs without generics etc
56        #[proc_macro_derive(IntoJson)]
57        pub fn into_json_derive(tokens_input: TokenStream) -> TokenStream {
58            ext_serde_json::into_json_derive(tokens_input)
59        }
60    }
61}
62
63cfg_if::cfg_if! {
64    if #[cfg(feature = "rmp-serde")] {
65        mod ext_rmp_serde;
66        /// #[derive(FromMessagePack)] derives FromMessagePack for struct
67        /// Works only on simple structs without generics etc
68        #[proc_macro_derive(FromMessagePack)]
69        pub fn from_mp_derive(tokens_input: TokenStream) -> TokenStream {
70            ext_rmp_serde::from_mp_derive(tokens_input)
71        }
72
73        /// #[derive(IntoMessagePack)] derives FromMessagePack for struct
74        /// Works only on simple structs without generics etc
75        #[proc_macro_derive(IntoMessagePack)]
76        pub fn into_mp_derive(tokens_input: TokenStream) -> TokenStream {
77            ext_rmp_serde::into_mp_derive(tokens_input)
78        }
79    }
80}
81
82cfg_if::cfg_if! {
83    if #[cfg(feature = "protobuf")]{
84        mod ext_protobuf;
85        /// #[derive(FromProtobuf)] derives FromProtobuf for struct
86        /// Works only on simple structs without generics etc
87        #[proc_macro_derive(FromProtobuf)]
88        pub fn from_protobuf_derive(tokens_input: TokenStream) -> TokenStream {
89            ext_protobuf::from_protobuf_derive(tokens_input)
90        }
91
92        /// #[derive(IntoProtobuf)] derives FromProtobuf for struct
93        /// Works only on simple structs without generics etc
94        #[proc_macro_derive(IntoProtobuf)]
95        pub fn into_protobuf_derive(tokens_input: TokenStream) -> TokenStream {
96            ext_protobuf::into_protobuf_derive(tokens_input)
97        }
98    }
99}