structsy_derive/
lib.rs

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}