1use proc_macro::TokenStream;
2
3mod delete;
4mod embedded_migrations;
5mod filter;
6mod insert;
7mod macro_inputs;
8mod order;
9mod query;
10mod schema;
11mod update;
12
13use delete::DeleteManyDerive;
14use embedded_migrations::EmbeddedMigrationsInput;
15use insert::{InsertInputDerive, InsertResultDerive};
16use macro_inputs::{DeleteMacroInput, InsertMacroInput, QueryMacroInput, UpdateMacroInput};
17use query::{QueryResultDerive, QueryVariablesDerive};
18use schema::ParsedSchema;
19use update::{UpdateDataDerive, UpdateManyDerive};
20
21#[proc_macro]
23pub fn schema(input: TokenStream) -> TokenStream {
24 let schema = syn::parse_macro_input!(input as ParsedSchema);
25
26 match schema.expand() {
27 Ok(tokens) => tokens.into(),
28 Err(error) => error.to_compile_error().into(),
29 }
30}
31
32#[proc_macro]
33pub fn query(input: TokenStream) -> TokenStream {
34 let query = syn::parse_macro_input!(input as QueryMacroInput);
35 query.expand().into()
36}
37
38#[proc_macro]
39pub fn insert(input: TokenStream) -> TokenStream {
40 let insert = syn::parse_macro_input!(input as InsertMacroInput);
41 insert.expand().into()
42}
43
44#[proc_macro]
45pub fn delete(input: TokenStream) -> TokenStream {
46 let delete = syn::parse_macro_input!(input as DeleteMacroInput);
47 delete.expand().into()
48}
49
50#[proc_macro]
51pub fn update(input: TokenStream) -> TokenStream {
52 let update = syn::parse_macro_input!(input as UpdateMacroInput);
53 update.expand().into()
54}
55
56#[proc_macro]
57pub fn embed_migrations(input: TokenStream) -> TokenStream {
58 let migrations = syn::parse_macro_input!(input as EmbeddedMigrationsInput);
59
60 match migrations.expand() {
61 Ok(tokens) => tokens.into(),
62 Err(error) => error.to_compile_error().into(),
63 }
64}
65
66#[proc_macro_derive(QueryResult, attributes(vitrail))]
67pub fn derive_query_result(input: TokenStream) -> TokenStream {
68 let input = syn::parse_macro_input!(input as syn::DeriveInput);
69
70 match QueryResultDerive::parse(input).and_then(|derive| derive.expand()) {
71 Ok(tokens) => tokens.into(),
72 Err(error) => error.to_compile_error().into(),
73 }
74}
75
76#[proc_macro_derive(QueryVariables)]
77pub fn derive_query_variables(input: TokenStream) -> TokenStream {
78 let input = syn::parse_macro_input!(input as syn::DeriveInput);
79
80 match QueryVariablesDerive::parse(input).and_then(|derive| derive.expand()) {
81 Ok(tokens) => tokens.into(),
82 Err(error) => error.to_compile_error().into(),
83 }
84}
85
86#[proc_macro_derive(InsertInput, attributes(vitrail))]
87pub fn derive_insert_input(input: TokenStream) -> TokenStream {
88 let input = syn::parse_macro_input!(input as syn::DeriveInput);
89
90 match InsertInputDerive::parse(input).and_then(|derive| derive.expand()) {
91 Ok(tokens) => tokens.into(),
92 Err(error) => error.to_compile_error().into(),
93 }
94}
95
96#[proc_macro_derive(InsertResult, attributes(vitrail))]
97pub fn derive_insert_result(input: TokenStream) -> TokenStream {
98 let input = syn::parse_macro_input!(input as syn::DeriveInput);
99
100 match InsertResultDerive::parse(input).and_then(|derive| derive.expand()) {
101 Ok(tokens) => tokens.into(),
102 Err(error) => error.to_compile_error().into(),
103 }
104}
105
106#[proc_macro_derive(UpdateData, attributes(vitrail))]
107pub fn derive_update_data(input: TokenStream) -> TokenStream {
108 let input = syn::parse_macro_input!(input as syn::DeriveInput);
109
110 match UpdateDataDerive::parse(input).and_then(|derive| derive.expand()) {
111 Ok(tokens) => tokens.into(),
112 Err(error) => error.to_compile_error().into(),
113 }
114}
115
116#[proc_macro_derive(UpdateMany, attributes(vitrail))]
117pub fn derive_update_many(input: TokenStream) -> TokenStream {
118 let input = syn::parse_macro_input!(input as syn::DeriveInput);
119
120 match UpdateManyDerive::parse(input).and_then(|derive| derive.expand()) {
121 Ok(tokens) => tokens.into(),
122 Err(error) => error.to_compile_error().into(),
123 }
124}
125
126#[proc_macro_derive(DeleteMany, attributes(vitrail))]
127pub fn derive_delete_many(input: TokenStream) -> TokenStream {
128 let input = syn::parse_macro_input!(input as syn::DeriveInput);
129
130 match DeleteManyDerive::parse(input).and_then(|derive| derive.expand()) {
131 Ok(tokens) => tokens.into(),
132 Err(error) => error.to_compile_error().into(),
133 }
134}