sqlm_postgres_macros/
lib.rs

1#![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}