@@ -30,11 +30,11 @@ pub fn parse_items(
30
30
let mut apis = Vec :: new ( ) ;
31
31
for item in items {
32
32
match item {
33
- Item :: Struct ( item) => match parse_struct ( cx, item, namespace. clone ( ) ) {
33
+ Item :: Struct ( item) => match parse_struct ( cx, item, namespace) {
34
34
Ok ( strct) => apis. push ( strct) ,
35
35
Err ( err) => cx. push ( err) ,
36
36
} ,
37
- Item :: Enum ( item) => match parse_enum ( cx, item, namespace. clone ( ) ) {
37
+ Item :: Enum ( item) => match parse_enum ( cx, item, namespace) {
38
38
Ok ( enm) => apis. push ( enm) ,
39
39
Err ( err) => cx. push ( err) ,
40
40
} ,
@@ -52,7 +52,7 @@ pub fn parse_items(
52
52
apis
53
53
}
54
54
55
- fn parse_struct ( cx : & mut Errors , item : ItemStruct , mut namespace : Namespace ) -> Result < Api > {
55
+ fn parse_struct ( cx : & mut Errors , item : ItemStruct , namespace : & Namespace ) -> Result < Api > {
56
56
let generics = & item. generics ;
57
57
if !generics. params . is_empty ( ) || generics. where_clause . is_some ( ) {
58
58
let struct_token = item. struct_token ;
@@ -67,6 +67,7 @@ fn parse_struct(cx: &mut Errors, item: ItemStruct, mut namespace: Namespace) ->
67
67
68
68
let mut doc = Doc :: new ( ) ;
69
69
let mut derives = Vec :: new ( ) ;
70
+ let mut namespace = namespace. clone ( ) ;
70
71
attrs:: parse (
71
72
cx,
72
73
& item. attrs ,
@@ -78,34 +79,36 @@ fn parse_struct(cx: &mut Errors, item: ItemStruct, mut namespace: Namespace) ->
78
79
} ,
79
80
) ;
80
81
81
- let fields = match item. fields {
82
+ let named_fields = match item. fields {
82
83
Fields :: Named ( fields) => fields,
83
84
Fields :: Unit => return Err ( Error :: new_spanned ( item, "unit structs are not supported" ) ) ,
84
85
Fields :: Unnamed ( _) => {
85
86
return Err ( Error :: new_spanned ( item, "tuple structs are not supported" ) ) ;
86
87
}
87
88
} ;
88
89
90
+ let fields = named_fields
91
+ . named
92
+ . into_iter ( )
93
+ . map ( |field| {
94
+ Ok ( Var {
95
+ ident : field. ident . unwrap ( ) ,
96
+ ty : parse_type ( & field. ty , & namespace) ?,
97
+ } )
98
+ } )
99
+ . collect :: < Result < _ > > ( ) ?;
100
+
89
101
Ok ( Api :: Struct ( Struct {
90
102
doc,
91
103
derives,
92
104
struct_token : item. struct_token ,
93
- name : Pair :: new ( namespace. clone ( ) , item. ident ) ,
94
- brace_token : fields. brace_token ,
95
- fields : fields
96
- . named
97
- . into_iter ( )
98
- . map ( |field| {
99
- Ok ( Var {
100
- ident : field. ident . unwrap ( ) ,
101
- ty : parse_type ( & field. ty , & namespace) ?,
102
- } )
103
- } )
104
- . collect :: < Result < _ > > ( ) ?,
105
+ name : Pair :: new ( namespace, item. ident ) ,
106
+ brace_token : named_fields. brace_token ,
107
+ fields,
105
108
} ) )
106
109
}
107
110
108
- fn parse_enum ( cx : & mut Errors , item : ItemEnum , mut namespace : Namespace ) -> Result < Api > {
111
+ fn parse_enum ( cx : & mut Errors , item : ItemEnum , namespace : & Namespace ) -> Result < Api > {
109
112
let generics = & item. generics ;
110
113
if !generics. params . is_empty ( ) || generics. where_clause . is_some ( ) {
111
114
let enum_token = item. enum_token ;
@@ -120,6 +123,7 @@ fn parse_enum(cx: &mut Errors, item: ItemEnum, mut namespace: Namespace) -> Resu
120
123
121
124
let mut doc = Doc :: new ( ) ;
122
125
let mut repr = None ;
126
+ let mut namespace = namespace. clone ( ) ;
123
127
attrs:: parse (
124
128
cx,
125
129
& item. attrs ,
@@ -214,13 +218,12 @@ fn parse_foreign_mod(
214
218
for foreign in & foreign_mod. items {
215
219
match foreign {
216
220
ForeignItem :: Type ( foreign) => {
217
- match parse_extern_type ( cx, foreign, lang, trusted, namespace. clone ( ) ) {
221
+ match parse_extern_type ( cx, foreign, lang, trusted, namespace) {
218
222
Ok ( ety) => items. push ( ety) ,
219
223
Err ( err) => cx. push ( err) ,
220
224
}
221
225
}
222
- ForeignItem :: Fn ( foreign) => match parse_extern_fn ( cx, foreign, lang, namespace. clone ( ) )
223
- {
226
+ ForeignItem :: Fn ( foreign) => match parse_extern_fn ( cx, foreign, lang, namespace) {
224
227
Ok ( efn) => items. push ( efn) ,
225
228
Err ( err) => cx. push ( err) ,
226
229
} ,
@@ -231,7 +234,7 @@ fn parse_foreign_mod(
231
234
}
232
235
}
233
236
ForeignItem :: Verbatim ( tokens) => {
234
- match parse_extern_verbatim ( cx, tokens, lang, namespace. clone ( ) ) {
237
+ match parse_extern_verbatim ( cx, tokens, lang, namespace) {
235
238
Ok ( api) => items. push ( api) ,
236
239
Err ( err) => cx. push ( err) ,
237
240
}
@@ -283,9 +286,10 @@ fn parse_extern_type(
283
286
foreign_type : & ForeignItemType ,
284
287
lang : Lang ,
285
288
trusted : bool ,
286
- mut namespace : Namespace ,
289
+ namespace : & Namespace ,
287
290
) -> Result < Api > {
288
291
let mut doc = Doc :: new ( ) ;
292
+ let mut namespace = namespace. clone ( ) ;
289
293
attrs:: parse (
290
294
cx,
291
295
& foreign_type. attrs ,
@@ -315,7 +319,7 @@ fn parse_extern_fn(
315
319
cx : & mut Errors ,
316
320
foreign_fn : & ForeignItemFn ,
317
321
lang : Lang ,
318
- mut namespace : Namespace ,
322
+ namespace : & Namespace ,
319
323
) -> Result < Api > {
320
324
let generics = & foreign_fn. sig . generics ;
321
325
if !generics. params . is_empty ( ) || generics. where_clause . is_some ( ) {
@@ -334,6 +338,7 @@ fn parse_extern_fn(
334
338
let mut doc = Doc :: new ( ) ;
335
339
let mut cxx_name = None ;
336
340
let mut rust_name = None ;
341
+ let mut namespace = namespace. clone ( ) ;
337
342
attrs:: parse (
338
343
cx,
339
344
& foreign_fn. attrs ,
@@ -438,7 +443,7 @@ fn parse_extern_verbatim(
438
443
cx : & mut Errors ,
439
444
tokens : & TokenStream ,
440
445
lang : Lang ,
441
- mut namespace : Namespace ,
446
+ namespace : & Namespace ,
442
447
) -> Result < Api > {
443
448
// type Alias = crate::path::to::Type;
444
449
let parse = |input : ParseStream | -> Result < TypeAlias > {
@@ -455,6 +460,7 @@ fn parse_extern_verbatim(
455
460
let ty: RustType = input. parse ( ) ?;
456
461
let semi_token: Token ! [ ; ] = input. parse ( ) ?;
457
462
let mut doc = Doc :: new ( ) ;
463
+ let mut namespace = namespace. clone ( ) ;
458
464
attrs:: parse (
459
465
cx,
460
466
& attrs,
0 commit comments