postgres_query_macro/
lib.rs

1extern crate proc_macro;
2
3#[macro_use]
4mod macros;
5
6mod from_sql_row;
7mod query;
8
9use proc_macro::TokenStream;
10use proc_macro_hack::proc_macro_hack;
11use syn::{parse_macro_input, DeriveInput};
12
13#[proc_macro_hack]
14pub fn query_static(input: TokenStream) -> TokenStream {
15    let query = parse_macro_input!(input as query::QueryInput);
16
17    let output = match query.convert_to_struct_static() {
18        Ok(output) => output,
19        Err(e) => e.to_compile_error(),
20    };
21
22    TokenStream::from(output)
23}
24
25#[proc_macro_hack]
26pub fn query_dynamic(input: TokenStream) -> TokenStream {
27    let query = parse_macro_input!(input as query::QueryInput);
28
29    let output = match query.convert_to_struct_dynamic() {
30        Ok(output) => output,
31        Err(e) => e.to_compile_error(),
32    };
33
34    TokenStream::from(output)
35}
36
37#[proc_macro_derive(FromSqlRow, attributes(row))]
38pub fn from_sql_row(input: TokenStream) -> TokenStream {
39    let input = parse_macro_input!(input as DeriveInput);
40    let output = from_sql_row::derive(input);
41    TokenStream::from(output)
42}