|
2 | 2 |
|
3 | 3 | extern crate proc_macro; |
4 | 4 | extern crate postgres_derive_internals; |
5 | | -#[macro_use] |
6 | | -extern crate post_expansion; |
| 5 | + |
7 | 6 | extern crate syn; |
8 | | -extern crate quote; |
9 | 7 |
|
10 | 8 | use proc_macro::TokenStream; |
11 | | -use quote::{ToTokens, Tokens}; |
12 | | - |
13 | | -register_post_expansion!(PostExpansion_postgres_derive); |
14 | 9 |
|
15 | | -#[proc_macro_derive(ToSql)] |
| 10 | +#[proc_macro_derive(ToSql, attributes(postgres))] |
16 | 11 | pub fn derive_tosql(input: TokenStream) -> TokenStream { |
17 | 12 | derive(input, postgres_derive_internals::expand_derive_tosql) |
18 | 13 | } |
19 | 14 |
|
20 | | -#[proc_macro_derive(FromSql)] |
| 15 | +#[proc_macro_derive(FromSql, attributes(postgres))] |
21 | 16 | pub fn derive_fromsql(input: TokenStream) -> TokenStream { |
22 | 17 | derive(input, postgres_derive_internals::expand_derive_fromsql) |
23 | 18 | } |
24 | 19 |
|
25 | 20 | fn derive(input: TokenStream, expand: fn(&str) -> Result<String, String>) -> TokenStream { |
26 | | - let source = input.to_string(); |
27 | | - |
28 | | - let decl = expand_decl(&source); |
29 | | - |
30 | | - let impl_ = match expand(&source) { |
31 | | - Ok(impl_) => impl_, |
| 21 | + match expand(&input.to_string()) { |
| 22 | + Ok(impl_) => impl_.parse().unwrap(), |
32 | 23 | Err(e) => panic!("{}", e), |
33 | | - }; |
34 | | - |
35 | | - let expanded = format!("{}\n{}", decl, impl_); |
36 | | - expanded.parse().unwrap() |
37 | | -} |
38 | | - |
39 | | -fn expand_decl(source: &str) -> String { |
40 | | - let ast = syn::parse_macro_input(source).unwrap(); |
41 | | - let stripped = post_expansion::strip_attrs_later(ast, &["postgres"], "postgres_derive"); |
42 | | - |
43 | | - let mut tokens = Tokens::new(); |
44 | | - stripped.to_tokens(&mut tokens); |
45 | | - tokens.to_string() |
| 24 | + } |
46 | 25 | } |
0 commit comments