1
1
#![ recursion_limit = "256" ]
2
+
2
3
extern crate syn;
3
4
#[ macro_use]
4
5
extern crate quote;
5
6
6
- use syn:: { MacroInput , MetaItem , Body , VariantData } ;
7
- use quote:: { Tokens , ToTokens } ;
8
-
9
- use overrides:: Overrides ;
10
-
11
7
mod accepts;
12
8
mod composites;
13
9
mod enums;
@@ -24,86 +20,3 @@ pub fn expand_derive_fromsql(source: &str) -> Result<String, String> {
24
20
let input = try!( syn:: parse_macro_input ( source) ) ;
25
21
fromsql:: expand_derive_fromsql ( & input)
26
22
}
27
-
28
- pub fn expand_derive ( source : & str ) -> Result < String , String > {
29
- let mut input = try!( syn:: parse_macro_input ( source) ) ;
30
- let ( tosql, fromsql) = strip_derives ( & mut input) ;
31
-
32
- let tosql = if tosql {
33
- try!( tosql:: expand_derive_tosql ( & input) )
34
- } else {
35
- "" . to_owned ( )
36
- } ;
37
- let fromsql = if fromsql {
38
- try!( fromsql:: expand_derive_fromsql ( & input) )
39
- } else {
40
- "" . to_owned ( )
41
- } ;
42
-
43
- strip_overrides ( & mut input) ;
44
-
45
- let mut tokens = Tokens :: new ( ) ;
46
- input. to_tokens ( & mut tokens) ;
47
-
48
- Ok ( format ! ( "{}{}{}" , tokens, tosql, fromsql) )
49
- }
50
-
51
- fn strip_derives ( input : & mut MacroInput ) -> ( bool , bool ) {
52
- let mut tosql = false ;
53
- let mut fromsql = false ;
54
-
55
- let mut other_attrs = vec ! [ ] ;
56
- for mut attr in input. attrs . drain ( ..) {
57
- {
58
- let mut items = match attr. value {
59
- MetaItem :: List ( ref name, ref mut items) if name == "derive" => items,
60
- _ => {
61
- other_attrs. push ( attr) ;
62
- continue ;
63
- }
64
- } ;
65
-
66
- items. retain ( |i| {
67
- match * i {
68
- MetaItem :: Word ( ref name) if name == "ToSql" => {
69
- tosql = true ;
70
- false
71
- }
72
- MetaItem :: Word ( ref name) if name == "FromSql" => {
73
- fromsql = true ;
74
- false
75
- }
76
- _ => true ,
77
- }
78
- } ) ;
79
-
80
- if items. is_empty ( ) {
81
- continue ;
82
- }
83
- }
84
-
85
- other_attrs. push ( attr) ;
86
- }
87
-
88
- input. attrs = other_attrs;
89
- ( tosql, fromsql)
90
- }
91
-
92
- fn strip_overrides ( input : & mut MacroInput ) {
93
- Overrides :: strip ( & mut input. attrs ) ;
94
-
95
- match input. body {
96
- Body :: Enum ( ref mut variants) => {
97
- for variant in variants {
98
- Overrides :: strip ( & mut variant. attrs ) ;
99
- }
100
- }
101
- Body :: Struct ( VariantData :: Struct ( ref mut fields) ) |
102
- Body :: Struct ( VariantData :: Tuple ( ref mut fields) ) => {
103
- for field in fields {
104
- Overrides :: strip ( & mut field. attrs ) ;
105
- }
106
- }
107
- Body :: Struct ( VariantData :: Unit ) => { }
108
- }
109
- }
0 commit comments