scyllax_macros_core/queries/
mod.rs

1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::ItemStruct;
4
5pub mod read;
6pub mod upsert;
7pub mod write;
8
9/// Implements the [`Query`] trait for a struct.
10pub fn impl_generic_query(
11    input: &ItemStruct,
12    query: String,
13    inner_entity_type: Option<&syn::Type>,
14) -> TokenStream {
15    let struct_ident = &input.ident;
16
17    let query = if let Some(inner_entity_type) = inner_entity_type {
18        quote!(#query.replace("*", &#inner_entity_type::keys().join(", ")))
19    } else {
20        quote!(#query.to_string())
21    };
22
23    quote! {
24        #[scyllax::prelude::async_trait]
25        impl scyllax::prelude::Query for #struct_ident {
26            fn query() -> String {
27                #query
28            }
29        }
30    }
31}