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