1use darling::FromDeriveInput;
2use syn::{parse_macro_input, AttributeArgs, DeriveInput, Item};
3mod persistent;
4use persistent::PersistentInfo;
5use persistent::ProjectionInfo;
6mod queries;
7use queries::persistent_queries;
8
9#[proc_macro_attribute]
10pub fn queries(args: proc_macro::TokenStream, original: proc_macro::TokenStream) -> proc_macro::TokenStream {
11 let parsed: Item = syn::parse(original).unwrap();
12 let args: AttributeArgs = parse_macro_input!(args as AttributeArgs);
13 let gen = persistent_queries(parsed, args, false);
14 gen.into()
15}
16
17#[proc_macro_attribute]
18pub fn embedded_queries(args: proc_macro::TokenStream, original: proc_macro::TokenStream) -> proc_macro::TokenStream {
19 let parsed: Item = syn::parse(original).unwrap();
20 let args: AttributeArgs = parse_macro_input!(args as AttributeArgs);
21 let gen = persistent_queries(parsed, args, true);
22 gen.into()
23}
24
25#[proc_macro_derive(PersistentEmbedded, attributes(index))]
26pub fn persistent_embedded(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
27 let parsed: DeriveInput = syn::parse(input).unwrap();
28
29 let gen = PersistentInfo::from_derive_input(&parsed).unwrap().to_embedded_tokens();
30 gen.into()
31}
32
33#[proc_macro_derive(Persistent, attributes(index))]
34pub fn persistent(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
35 let parsed: DeriveInput = syn::parse(input).unwrap();
36
37 let gen = PersistentInfo::from_derive_input(&parsed).unwrap().to_tokens();
38 gen.into()
39}
40
41#[proc_macro_derive(Projection, attributes(projection))]
42pub fn projection(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
43 let parsed: DeriveInput = syn::parse(input).unwrap();
44
45 let gen = ProjectionInfo::from_derive_input(&parsed).unwrap().to_tokens();
46 gen.into()
47}