|
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