sea-query-derive 1.0.0

Derive macro for sea-query's Iden trait
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use syn::{
    Ident, LitStr, Token,
    parse::{Parse, ParseStream},
};

struct CallArgs {
    sql_holder: Ident,
    _assign: Token![=],
    sql_string: LitStr,
}

impl Parse for CallArgs {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        Ok(CallArgs {
            sql_holder: input.parse()?,
            _assign: input.parse()?,
            sql_string: input.parse()?,
        })
    }
}

pub fn sqlite_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::sqlite::query, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}

pub fn sqlite_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::sqlite::query_as, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}

pub fn mysql_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::mysql::query, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}

pub fn mysql_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::mysql::query_as, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}

pub fn postgres_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::postgres::query, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}

pub fn postgres_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
    let CallArgs {
        sql_holder,
        sql_string,
        ..
    } = syn::parse(input)?;

    Ok(quote!(
        sea_query::raw_sql!(sqlx::postgres::query_as, @sqlx::AssertSqlSafe, #sql_holder = #sql_string)
    ))
}