sqlx_conditional_queries_layering/
lib.rs

1#[macro_export]
2macro_rules! create_conditional_query_as {
3    ($dollar:tt$name:tt, $($conditional_part:tt)*) => {
4        #[allow(unused_macros)]
5        macro_rules! $name {
6            ($type:ty, $query:expr $dollar(, $dollar($more_conditionals:tt)*)?) => {
7                sqlx_conditional_queries::conditional_query_as!(
8                    $type,
9                    $query,
10                    $($conditional_part)*
11                    $dollar(, $dollar($more_conditionals)*)?
12                )
13            };
14        }
15
16        paste::paste! {
17            #[allow(unused_macros)]
18            macro_rules! [<_DO_NOT_USE_EXPLICITLY_ $name>] {
19                ($inner_dollar:tt$feed_name:tt, $dollar($feed_conditionals:tt)*) => {
20                    sqlx_conditional_queries_layering::create_conditional_query_as!(
21                        $inner_dollar$feed_name,
22                        $($conditional_part)*,
23                        $dollar($feed_conditionals)*
24                    );
25                };
26            }
27
28            #[allow(unused_macros)]
29            macro_rules! [<_$name _DO_NOT_USE_EXPLICITLY>] {
30                ($inner_dollar:tt$existing_query:ident, $feed_name:tt) => {
31                    $existing_query!(
32                        $inner_dollar$feed_name,
33                        $($conditional_part)*
34                    );
35                }
36            }
37        }
38    };
39}
40
41#[macro_export]
42macro_rules! supply_sql_variables_to_query_as {
43    ($dollar:tt$query_macro:ident as $as:ident, $($conditional_part:tt)*) => {
44        paste::paste! {
45            [<_DO_NOT_USE_EXPLICITLY_ $query_macro>]!($dollar$as, $($conditional_part)*)
46        }
47    };
48}
49
50#[macro_export]
51macro_rules! merge_sql_query_as {
52    ($dollar:tt($a:ident, $b:ident) as $as:ident) => {
53        paste::paste! {
54            [<_ $a _DO_NOT_USE_EXPLICITLY>]!(
55                $dollar[<_DO_NOT_USE_EXPLICITLY_ $b>],
56                $as
57            )
58        }
59    };
60
61    ($dollar:tt@$suffix:ident, $a:ident, $b:ident) => {
62        paste::paste! {
63            sqlx_conditional_queries_layering::merge_sql_query_as!(
64                $dollar([<$a $suffix>], [<$b $suffix>]) as [<$a _with_ $b $suffix>]
65            )
66        }
67    };
68
69    ($dollar:tt@$suffix:ident, $a:ident, $b:ident $(, $c:ident)*) => {
70        sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@$suffix, $a, $b);
71        paste::paste! {
72            sqlx_conditional_queries_layering::merge_sql_query_as!(
73                @$suffix,
74                [<$a _with_ $b>]
75                $(, $c)*
76            );
77        }
78    };
79
80    ($dollar:tt($a:ident, $b:ident)) => {
81        sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@_query, $a, $b)
82    };
83
84    ($dollar:tt($a:ident, $b:ident $(, $c:ident)*)) => {
85        sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@_query, $a, $b $(, $c)*)
86    }
87}
88
89pub enum Fall {
90    Through,
91}