sea_query_derive/
raw_query.rs

1use 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}