postgres_query_macro/
lib.rs1extern 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}