sea_query_derive/
raw_query.rs1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{
4 Ident, LitStr, Token,
5 parse::{Parse, ParseStream},
6};
7
8struct CallArgs {
9 builder: Ident,
10 _comma: Token![,],
11 sql_string: LitStr,
12}
13
14impl Parse for CallArgs {
15 fn parse(input: ParseStream) -> syn::Result<Self> {
16 Ok(CallArgs {
17 builder: input.parse()?,
18 _comma: input.parse()?,
19 sql_string: input.parse()?,
20 })
21 }
22}
23
24pub fn expand(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
25 let CallArgs {
26 builder,
27 sql_string,
28 ..
29 } = syn::parse(input)?;
30
31 let builder = match builder.to_string().as_str() {
32 "PostgresQueryBuilder" => quote!(postgres),
33 "MysqlQueryBuilder" => quote!(mysql),
34 "SqliteQueryBuilder" => quote!(sqlite),
35 _ => quote!(#builder),
36 };
37
38 Ok(quote!(
39 sea_query::raw_sql!(seaql::#builder::query, #sql_string)
40 ))
41}