@@ -19,20 +19,21 @@ extern crate syn;
19
19
extern crate data_encoding;
20
20
21
21
#[ cfg( not( feature = "stable" ) ) ]
22
- use proc_macro:: { Spacing , TokenNode , TokenStream , TokenTree , TokenTreeIter } ;
22
+ use proc_macro:: token_stream:: IntoIter ;
23
+ #[ cfg( not( feature = "stable" ) ) ]
24
+ use proc_macro:: { TokenStream , TokenTree } ;
23
25
use std:: collections:: HashMap ;
24
26
#[ cfg( feature = "stable" ) ]
25
- use syn:: { Lit , Token , TokenTree } ;
26
- #[ cfg( feature = "stable" ) ]
27
27
use syn:: parse:: IResult ;
28
+ #[ cfg( feature = "stable" ) ]
29
+ use syn:: { Lit , Token , TokenTree } ;
28
30
29
31
use data_encoding:: { BitOrder , Encoding , Specification , Translate , Wrap } ;
30
32
31
33
#[ cfg( not( feature = "stable" ) ) ]
32
- fn parse_op ( tokens : & mut TokenTreeIter , op : char , key : & str ) {
34
+ fn parse_op ( tokens : & mut IntoIter , op : char , key : & str ) {
33
35
match tokens. next ( ) {
34
- Some ( TokenTree { span : _, kind : TokenNode :: Op ( x, Spacing :: Alone ) } )
35
- if x == op => ( ) ,
36
+ Some ( TokenTree :: Op ( x) ) if x. op ( ) == op => ( ) ,
36
37
_ => panic ! ( "expected {:?} after {}" , op, key) ,
37
38
}
38
39
}
@@ -45,17 +46,17 @@ fn parse_op<'a>(input: &'a str, op: Token, key: &str) -> &'a str {
45
46
}
46
47
47
48
#[ cfg( not( feature = "stable" ) ) ]
48
- fn parse_map ( mut tokens : TokenTreeIter ) -> HashMap < String , TokenNode > {
49
+ fn parse_map ( mut tokens : IntoIter ) -> HashMap < String , TokenTree > {
49
50
let mut map = HashMap :: new ( ) ;
50
51
while let Some ( key) = tokens. next ( ) {
51
- let key = match key. kind {
52
- TokenNode :: Term ( term) => term. as_str ( ) . to_string ( ) ,
52
+ let key = match key {
53
+ TokenTree :: Term ( term) => term. as_str ( ) . to_string ( ) ,
53
54
_ => panic ! ( "expected key got {}" , key) ,
54
55
} ;
55
56
parse_op ( & mut tokens, ':' , & key) ;
56
57
let value = match tokens. next ( ) {
57
58
None => panic ! ( "expected value for {}" , key) ,
58
- Some ( value) => value. kind ,
59
+ Some ( value) => value,
59
60
} ;
60
61
parse_op ( & mut tokens, ',' , & key) ;
61
62
let _ = map. insert ( key, value) ;
@@ -92,13 +93,13 @@ fn parse_map(mut input: &str) -> HashMap<String, Token> {
92
93
}
93
94
94
95
#[ cfg( not( feature = "stable" ) ) ]
95
- fn get_string ( map : & mut HashMap < String , TokenNode > , key : & str ) -> String {
96
+ fn get_string ( map : & mut HashMap < String , TokenTree > , key : & str ) -> String {
96
97
let node = match map. remove ( key) {
97
98
None => return String :: new ( ) ,
98
99
Some ( node) => node,
99
100
} ;
100
101
let literal = match node {
101
- TokenNode :: Literal ( literal) => literal,
102
+ TokenTree :: Literal ( literal) => literal,
102
103
_ => panic ! ( "expected literal for {}" , key) ,
103
104
} ;
104
105
match syn:: parse:: string ( & literal. to_string ( ) ) {
@@ -116,13 +117,13 @@ fn get_string(map: &mut HashMap<String, Token>, key: &str) -> String {
116
117
}
117
118
118
119
#[ cfg( not( feature = "stable" ) ) ]
119
- fn get_usize ( map : & mut HashMap < String , TokenNode > , key : & str ) -> usize {
120
+ fn get_usize ( map : & mut HashMap < String , TokenTree > , key : & str ) -> usize {
120
121
let node = match map. remove ( key) {
121
122
None => return 0 ,
122
123
Some ( node) => node,
123
124
} ;
124
125
let literal = match node {
125
- TokenNode :: Literal ( literal) => literal,
126
+ TokenTree :: Literal ( literal) => literal,
126
127
_ => panic ! ( "expected literal for {}" , key) ,
127
128
} ;
128
129
match literal. to_string ( ) . parse ( ) {
@@ -140,19 +141,17 @@ fn get_usize(map: &mut HashMap<String, Token>, key: &str) -> usize {
140
141
}
141
142
142
143
#[ cfg( not( feature = "stable" ) ) ]
143
- fn get_padding ( map : & mut HashMap < String , TokenNode > ) -> Option < char > {
144
+ fn get_padding ( map : & mut HashMap < String , TokenTree > ) -> Option < char > {
144
145
let node = match map. remove ( "padding" ) {
145
146
None => return None ,
146
147
Some ( node) => node,
147
148
} ;
148
149
let literal = match node {
149
- TokenNode :: Term ( term) if term. as_str ( ) == "None" => return None ,
150
- TokenNode :: Literal ( literal) => literal,
150
+ TokenTree :: Term ( term) if term. as_str ( ) == "None" => return None ,
151
+ TokenTree :: Literal ( literal) => literal,
151
152
_ => panic ! ( "expected literal for padding" ) ,
152
153
} ;
153
- Some ( syn:: parse:: character ( & literal. to_string ( ) ) . expect (
154
- "expected char for padding" ,
155
- ) )
154
+ Some ( syn:: parse:: character ( & literal. to_string ( ) ) . expect ( "expected char for padding" ) )
156
155
}
157
156
#[ cfg( feature = "stable" ) ]
158
157
fn get_padding ( map : & mut HashMap < String , Token > ) -> Option < char > {
@@ -165,18 +164,16 @@ fn get_padding(map: &mut HashMap<String, Token>) -> Option<char> {
165
164
}
166
165
167
166
#[ cfg( not( feature = "stable" ) ) ]
168
- fn get_bool ( map : & mut HashMap < String , TokenNode > , key : & str ) -> Option < bool > {
167
+ fn get_bool ( map : & mut HashMap < String , TokenTree > , key : & str ) -> Option < bool > {
169
168
let node = match map. remove ( key) {
170
169
None => return None ,
171
170
Some ( node) => node,
172
171
} ;
173
172
let term = match node {
174
- TokenNode :: Term ( term) => term,
173
+ TokenTree :: Term ( term) => term,
175
174
_ => panic ! ( "expected literal for padding" ) ,
176
175
} ;
177
- Some ( syn:: parse:: boolean ( term. as_str ( ) ) . expect (
178
- "expected bool for padding" ,
179
- ) )
176
+ Some ( syn:: parse:: boolean ( term. as_str ( ) ) . expect ( "expected bool for padding" ) )
180
177
}
181
178
#[ cfg( feature = "stable" ) ]
182
179
fn get_bool ( map : & mut HashMap < String , Token > , key : & str ) -> Option < bool > {
@@ -188,20 +185,16 @@ fn get_bool(map: &mut HashMap<String, Token>, key: &str) -> Option<bool> {
188
185
}
189
186
190
187
#[ cfg( not( feature = "stable" ) ) ]
191
- fn get_bit_order ( map : & mut HashMap < String , TokenNode > ) -> BitOrder {
188
+ fn get_bit_order ( map : & mut HashMap < String , TokenTree > ) -> BitOrder {
192
189
let node = match map. remove ( "bit_order" ) {
193
190
None => return BitOrder :: MostSignificantFirst ,
194
191
Some ( node) => node,
195
192
} ;
196
193
let msb = "MostSignificantFirst" ;
197
194
let lsb = "LeastSignificantFirst" ;
198
195
match node {
199
- TokenNode :: Term ( term) if term. as_str ( ) == msb => {
200
- BitOrder :: MostSignificantFirst
201
- }
202
- TokenNode :: Term ( term) if term. as_str ( ) == lsb => {
203
- BitOrder :: LeastSignificantFirst
204
- }
196
+ TokenTree :: Term ( term) if term. as_str ( ) == msb => BitOrder :: MostSignificantFirst ,
197
+ TokenTree :: Term ( term) if term. as_str ( ) == lsb => BitOrder :: LeastSignificantFirst ,
205
198
_ => panic ! ( "expected {} or {} for bit_order" , msb, lsb) ,
206
199
}
207
200
}
@@ -211,12 +204,8 @@ fn get_bit_order(map: &mut HashMap<String, Token>) -> BitOrder {
211
204
let lsb = "LeastSignificantFirst" ;
212
205
match map. remove ( "bit_order" ) {
213
206
None => return BitOrder :: MostSignificantFirst ,
214
- Some ( Token :: Ident ( ref ident) ) if ident. as_ref ( ) == msb => {
215
- BitOrder :: MostSignificantFirst
216
- }
217
- Some ( Token :: Ident ( ref ident) ) if ident. as_ref ( ) == lsb => {
218
- BitOrder :: LeastSignificantFirst
219
- }
207
+ Some ( Token :: Ident ( ref ident) ) if ident. as_ref ( ) == msb => BitOrder :: MostSignificantFirst ,
208
+ Some ( Token :: Ident ( ref ident) ) if ident. as_ref ( ) == lsb => BitOrder :: LeastSignificantFirst ,
220
209
Some ( _) => panic ! ( "expected {} or {} for bit_order" , msb, lsb) ,
221
210
}
222
211
}
@@ -228,13 +217,12 @@ fn check_present<T>(hash_map: &HashMap<String, T>, key: &str) {
228
217
}
229
218
230
219
#[ cfg( not( feature = "stable" ) ) ]
231
- fn get_encoding ( mut hash_map : & mut HashMap < String , TokenNode > ) -> Encoding {
220
+ fn get_encoding ( mut hash_map : & mut HashMap < String , TokenTree > ) -> Encoding {
232
221
check_present ( & hash_map, "symbols" ) ;
233
222
let spec = Specification {
234
223
symbols : get_string ( & mut hash_map, "symbols" ) ,
235
224
bit_order : get_bit_order ( & mut hash_map) ,
236
- check_trailing_bits : get_bool ( & mut hash_map, "check_trailing_bits" )
237
- . unwrap_or ( true ) ,
225
+ check_trailing_bits : get_bool ( & mut hash_map, "check_trailing_bits" ) . unwrap_or ( true ) ,
238
226
padding : get_padding ( & mut hash_map) ,
239
227
ignore : get_string ( & mut hash_map, "ignore" ) ,
240
228
wrap : Wrap {
@@ -254,8 +242,7 @@ fn get_encoding(mut hash_map: &mut HashMap<String, Token>) -> Encoding {
254
242
let spec = Specification {
255
243
symbols : get_string ( & mut hash_map, "symbols" ) ,
256
244
bit_order : get_bit_order ( & mut hash_map) ,
257
- check_trailing_bits : get_bool ( & mut hash_map, "check_trailing_bits" )
258
- . unwrap_or ( true ) ,
245
+ check_trailing_bits : get_bool ( & mut hash_map, "check_trailing_bits" ) . unwrap_or ( true ) ,
259
246
padding : get_padding ( & mut hash_map) ,
260
247
ignore : get_string ( & mut hash_map, "ignore" ) ,
261
248
wrap : Wrap {
0 commit comments