sqlm_postgres_macros/
lib.rs1#![cfg_attr(nightly_column_names, feature(adt_const_params))]
2#![cfg_attr(nightly_column_names, allow(incomplete_features))]
3
4mod enum_derive;
5mod from_row_derive;
6mod parser;
7mod rename;
8mod sql;
9
10use proc_macro::TokenStream;
11use syn::parse_macro_input;
12
13#[proc_macro_derive(FromRow, attributes(sqlm))]
14pub fn derive_fromsql(input: TokenStream) -> TokenStream {
15 let input = parse_macro_input!(input);
16
17 from_row_derive::expand_derive_from_row(input)
18 .unwrap_or_else(|e| e.to_compile_error())
19 .into()
20}
21
22#[proc_macro_derive(Enum)]
23pub fn derive_enum(input: TokenStream) -> TokenStream {
24 let input = parse_macro_input!(input);
25
26 enum_derive::expand_derive_enum(input)
27 .unwrap_or_else(|e| e.to_compile_error())
28 .into()
29}
30
31#[proc_macro]
32pub fn sql(item: TokenStream) -> TokenStream {
33 sql::sql(item)
34}
35
36#[cfg(not(nightly_column_names))]
37fn const_name(name: &str) -> usize {
38 use std::collections::hash_map::DefaultHasher;
39 use std::hash::{Hash, Hasher};
40 let mut hasher = DefaultHasher::default();
41 name.hash(&mut hasher);
42 hasher.finish() as usize
43}
44
45#[cfg(nightly_column_names)]
46fn const_name(name: &str) -> &str {
47 name
48}