sqlx_exasol_macros/
lib.rs1#![cfg_attr(not(test), warn(unused_crate_dependencies))]
2
3mod parse;
4
5#[allow(unused_imports, reason = "built-in; conditionally compiled")]
6use proc_macro::TokenStream;
7
8#[cfg(feature = "macros")]
9#[proc_macro]
10pub fn expand_query(input: TokenStream) -> TokenStream {
11 let input = syn::parse_macro_input!(input as sqlx_macros_core::query::QueryMacroInput);
12
13 match sqlx_macros_core::query::expand_input(input, &[sqlx_exasol_impl::QUERY_DRIVER]) {
14 Ok(ts) => parse::rewrite(ts).into(),
15 Err(e) => {
16 if let Some(parse_err) = e.downcast_ref::<syn::Error>() {
17 parse_err.to_compile_error().into()
18 } else {
19 let msg = e.to_string();
20 quote::quote!(::std::compile_error!(#msg)).into()
21 }
22 }
23 }
24}
25
26#[cfg(feature = "derive")]
27#[proc_macro_derive(Encode, attributes(sqlx))]
28pub fn derive_encode(tokenstream: TokenStream) -> TokenStream {
29 let input = syn::parse_macro_input!(tokenstream as syn::DeriveInput);
30 match sqlx_macros_core::derives::expand_derive_encode(&input) {
31 Ok(ts) => parse::rewrite(ts).into(),
32 Err(e) => e.to_compile_error().into(),
33 }
34}
35
36#[cfg(feature = "derive")]
37#[proc_macro_derive(Decode, attributes(sqlx))]
38pub fn derive_decode(tokenstream: TokenStream) -> TokenStream {
39 let input = syn::parse_macro_input!(tokenstream as syn::DeriveInput);
40 match sqlx_macros_core::derives::expand_derive_decode(&input) {
41 Ok(ts) => parse::rewrite(ts).into(),
42 Err(e) => e.to_compile_error().into(),
43 }
44}
45
46#[cfg(feature = "derive")]
47#[proc_macro_derive(Type, attributes(sqlx))]
48pub fn derive_type(tokenstream: TokenStream) -> TokenStream {
49 let input = syn::parse_macro_input!(tokenstream as syn::DeriveInput);
50 match sqlx_macros_core::derives::expand_derive_type_encode_decode(&input) {
51 Ok(ts) => parse::rewrite(ts).into(),
52 Err(e) => e.to_compile_error().into(),
53 }
54}
55
56#[cfg(feature = "derive")]
57#[proc_macro_derive(FromRow, attributes(sqlx))]
58pub fn derive_from_row(input: TokenStream) -> TokenStream {
59 let input = syn::parse_macro_input!(input as syn::DeriveInput);
60
61 match sqlx_macros_core::derives::expand_derive_from_row(&input) {
62 Ok(ts) => parse::rewrite(ts).into(),
63 Err(e) => e.to_compile_error().into(),
64 }
65}
66
67#[cfg(feature = "migrate")]
68#[proc_macro]
69pub fn migrate(input: TokenStream) -> TokenStream {
70 let input = syn::parse_macro_input!(input as Option<syn::LitStr>);
71 match sqlx_macros_core::migrate::expand(input) {
72 Ok(ts) => parse::rewrite(quote::quote!({#ts})).into(),
77 Err(e) => {
78 if let Some(parse_err) = e.downcast_ref::<syn::Error>() {
79 parse_err.to_compile_error().into()
80 } else {
81 let msg = e.to_string();
82 quote::quote!(::std::compile_error!(#msg)).into()
83 }
84 }
85 }
86}
87
88#[cfg(feature = "macros")]
89#[proc_macro_attribute]
90pub fn test(args: TokenStream, input: TokenStream) -> TokenStream {
91 let input = syn::parse_macro_input!(input as syn::ItemFn);
92
93 match sqlx_macros_core::test_attr::expand(args.into(), input) {
94 Ok(ts) => parse::rewrite(ts).into(),
95 Err(e) => {
96 if let Some(parse_err) = e.downcast_ref::<syn::Error>() {
97 parse_err.to_compile_error().into()
98 } else {
99 let msg = e.to_string();
100 quote::quote!(::std::compile_error!(#msg)).into()
101 }
102 }
103 }
104}