Skip to main content

cartel_gen/
lib.rs

1#![allow(clippy::too_many_arguments)]
2
3extern crate proc_macro;
4
5use backend::Backend;
6use proc_macro::TokenStream;
7use syn::{DeriveInput, ItemImpl, parse_macro_input};
8
9mod backend;
10mod build;
11mod derive_table;
12mod emit;
13mod parse;
14mod pg;
15mod row_meta;
16mod shape;
17mod sqlite;
18mod util;
19mod where_clause;
20
21#[proc_macro_derive(PgTable, attributes(pk, table_name))]
22pub fn pg_derive_table(input: TokenStream) -> TokenStream {
23    let input = parse_macro_input!(input as DeriveInput);
24    match pg::PgBackend::derive_table(&input) {
25        Ok(ts) => ts.into(),
26        Err(e) => e.to_compile_error().into(),
27    }
28}
29
30#[proc_macro_attribute]
31pub fn query_group(_attr: TokenStream, item: TokenStream) -> TokenStream {
32    let block = parse_macro_input!(item as ItemImpl);
33    match pg::PgBackend::expand_query_group(block) {
34        Ok(ts) => ts.into(),
35        Err(e) => e.to_compile_error().into(),
36    }
37}
38
39#[proc_macro]
40pub fn pg_instance(input: TokenStream) -> TokenStream {
41    match pg::PgBackend::expand_instance(input) {
42        Ok(ts) => ts.into(),
43        Err(e) => e.to_compile_error().into(),
44    }
45}
46
47#[proc_macro_derive(SqliteTable, attributes(pk, table_name))]
48pub fn sqlite_derive_table(input: TokenStream) -> TokenStream {
49    let input = parse_macro_input!(input as DeriveInput);
50    match sqlite::SqliteBackend::derive_table(&input) {
51        Ok(ts) => ts.into(),
52        Err(e) => e.to_compile_error().into(),
53    }
54}
55
56#[proc_macro_attribute]
57pub fn sqlite_query(attr: TokenStream, item: TokenStream) -> TokenStream {
58    let f = parse_macro_input!(item as syn::ItemFn);
59    let no_probe = attr.to_string().contains("no_probe");
60    match sqlite::SqliteBackend::query_free(f, no_probe) {
61        Ok(ts) => ts.into(),
62        Err(e) => e.to_compile_error().into(),
63    }
64}