Skip to main content

vitrail_pg_macros/
lib.rs

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/// Validates a schema DSL declaration at compile time.
22#[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}