@@ -12,8 +12,12 @@ pub fn derive(input: &Input) -> TokenStream {
12
12
let fields_names = input. fields . iter ( )
13
13
. map ( |field| field. ident . clone ( ) . unwrap ( ) )
14
14
. collect :: < Vec < _ > > ( ) ;
15
- let fields_names_1 = & fields_names;
16
- let fields_names_2 = & fields_names;
15
+ let unnested_fields_names = input. unnested_fields . iter ( )
16
+ . map ( |field| field. ident . clone ( ) . unwrap ( ) )
17
+ . collect :: < Vec < _ > > ( ) ;
18
+ let nested_fields_names = input. nested_fields . iter ( )
19
+ . map ( |field| field. ident . clone ( ) . unwrap ( ) )
20
+ . collect :: < Vec < _ > > ( ) ;
17
21
let first_field_name = & fields_names[ 0 ] ;
18
22
19
23
quote ! {
@@ -33,14 +37,16 @@ pub fn derive(input: &Input) -> TokenStream {
33
37
#[ inline]
34
38
unsafe fn get_unchecked( self , soa: & ' a #vec_name) -> Self :: RefOutput {
35
39
#ref_name {
36
- #( #fields_names_1: soa. #fields_names_2. get_unchecked( self ) , ) *
40
+ #( #unnested_fields_names: soa. #unnested_fields_names. get_unchecked( self ) , ) *
41
+ #( #nested_fields_names: self . get_unchecked( & soa. #nested_fields_names) , ) *
37
42
}
38
43
}
39
44
40
45
#[ inline]
41
46
fn index( self , soa: & ' a #vec_name) -> Self :: RefOutput {
42
47
#ref_name {
43
- #( #fields_names_1: & soa. #fields_names_2[ self ] , ) *
48
+ #( #unnested_fields_names: & soa. #unnested_fields_names[ self ] , ) *
49
+ #( #nested_fields_names: self . index( & soa. #nested_fields_names) , ) *
44
50
}
45
51
}
46
52
}
@@ -60,14 +66,16 @@ pub fn derive(input: &Input) -> TokenStream {
60
66
#[ inline]
61
67
unsafe fn get_unchecked_mut( self , soa: & ' a mut #vec_name) -> Self :: MutOutput {
62
68
#ref_mut_name {
63
- #( #fields_names_1: soa. #fields_names_2. get_unchecked_mut( self ) , ) *
69
+ #( #unnested_fields_names: soa. #unnested_fields_names. get_unchecked_mut( self ) , ) *
70
+ #( #nested_fields_names: self . get_unchecked_mut( & mut soa. #nested_fields_names) , ) *
64
71
}
65
72
}
66
73
67
74
#[ inline]
68
75
fn index_mut( self , soa: & ' a mut #vec_name) -> Self :: MutOutput {
69
76
#ref_mut_name {
70
- #( #fields_names_1: & mut soa. #fields_names_2[ self ] , ) *
77
+ #( #unnested_fields_names: & mut soa. #unnested_fields_names[ self ] , ) *
78
+ #( #nested_fields_names: self . index_mut( & mut soa. #nested_fields_names) , ) *
71
79
}
72
80
}
73
81
}
@@ -90,14 +98,16 @@ pub fn derive(input: &Input) -> TokenStream {
90
98
#[ inline]
91
99
unsafe fn get_unchecked( self , soa: & ' a #vec_name) -> Self :: RefOutput {
92
100
#slice_name {
93
- #( #fields_names_1: soa. #fields_names_2. get_unchecked( self . clone( ) ) , ) *
101
+ #( #unnested_fields_names: soa. #unnested_fields_names. get_unchecked( self . clone( ) ) , ) *
102
+ #( #nested_fields_names: self . clone( ) . get_unchecked( & soa. #nested_fields_names) , ) *
94
103
}
95
104
}
96
105
97
106
#[ inline]
98
107
fn index( self , soa: & ' a #vec_name) -> Self :: RefOutput {
99
108
#slice_name {
100
- #( #fields_names_1: & soa. #fields_names_2[ self . clone( ) ] , ) *
109
+ #( #unnested_fields_names: & soa. #unnested_fields_names[ self . clone( ) ] , ) *
110
+ #( #nested_fields_names: self . clone( ) . index( & soa. #nested_fields_names) , ) *
101
111
}
102
112
}
103
113
}
@@ -117,14 +127,16 @@ pub fn derive(input: &Input) -> TokenStream {
117
127
#[ inline]
118
128
unsafe fn get_unchecked_mut( self , soa: & ' a mut #vec_name) -> Self :: MutOutput {
119
129
#slice_mut_name {
120
- #( #fields_names_1: soa. #fields_names_2. get_unchecked_mut( self . clone( ) ) , ) *
130
+ #( #unnested_fields_names: soa. #unnested_fields_names. get_unchecked_mut( self . clone( ) ) , ) *
131
+ #( #nested_fields_names: self . clone( ) . get_unchecked_mut( & mut soa. #nested_fields_names) , ) *
121
132
}
122
133
}
123
134
124
135
#[ inline]
125
136
fn index_mut( self , soa: & ' a mut #vec_name) -> Self :: MutOutput {
126
137
#slice_mut_name {
127
- #( #fields_names_1: & mut soa. #fields_names_2[ self . clone( ) ] , ) *
138
+ #( #unnested_fields_names: & mut soa. #unnested_fields_names[ self . clone( ) ] , ) *
139
+ #( #nested_fields_names: self . clone( ) . index_mut( & mut soa. #nested_fields_names) , ) *
128
140
}
129
141
}
130
142
}
@@ -354,14 +366,16 @@ pub fn derive(input: &Input) -> TokenStream {
354
366
#[ inline]
355
367
unsafe fn get_unchecked( self , slice: #slice_name<' a>) -> Self :: RefOutput {
356
368
#ref_name {
357
- #( #fields_names_1: slice. #fields_names_2. get_unchecked( self ) , ) *
369
+ #( #unnested_fields_names: slice. #unnested_fields_names. get_unchecked( self ) , ) *
370
+ #( #nested_fields_names: self . get_unchecked( slice. #nested_fields_names) , ) *
358
371
}
359
372
}
360
373
361
374
#[ inline]
362
375
fn index( self , slice: #slice_name<' a>) -> Self :: RefOutput {
363
376
#ref_name {
364
- #( #fields_names_1: & slice. #fields_names_2[ self ] , ) *
377
+ #( #unnested_fields_names: & slice. #unnested_fields_names[ self ] , ) *
378
+ #( #nested_fields_names: self . index( slice. #nested_fields_names) , ) *
365
379
}
366
380
}
367
381
}
@@ -381,14 +395,16 @@ pub fn derive(input: &Input) -> TokenStream {
381
395
#[ inline]
382
396
unsafe fn get_unchecked_mut( self , slice: #slice_mut_name<' a>) -> Self :: MutOutput {
383
397
#ref_mut_name {
384
- #( #fields_names_1: slice. #fields_names_2. get_unchecked_mut( self ) , ) *
398
+ #( #unnested_fields_names: slice. #unnested_fields_names. get_unchecked_mut( self ) , ) *
399
+ #( #nested_fields_names: self . get_unchecked_mut( slice. #nested_fields_names) , ) *
385
400
}
386
401
}
387
402
388
403
#[ inline]
389
404
fn index_mut( self , slice: #slice_mut_name<' a>) -> Self :: MutOutput {
390
405
#ref_mut_name {
391
- #( #fields_names_1: & mut slice. #fields_names_2[ self ] , ) *
406
+ #( #unnested_fields_names: & mut slice. #unnested_fields_names[ self ] , ) *
407
+ #( #nested_fields_names: self . index_mut( slice. #nested_fields_names) , ) *
392
408
}
393
409
}
394
410
}
@@ -411,14 +427,16 @@ pub fn derive(input: &Input) -> TokenStream {
411
427
#[ inline]
412
428
unsafe fn get_unchecked( self , slice: #slice_name<' a>) -> Self :: RefOutput {
413
429
#slice_name {
414
- #( #fields_names_1: slice. #fields_names_2. get_unchecked( self . clone( ) ) , ) *
430
+ #( #unnested_fields_names: slice. #unnested_fields_names. get_unchecked( self . clone( ) ) , ) *
431
+ #( #nested_fields_names: self . clone( ) . get_unchecked( slice. #nested_fields_names) , ) *
415
432
}
416
433
}
417
434
418
435
#[ inline]
419
436
fn index( self , slice: #slice_name<' a>) -> Self :: RefOutput {
420
437
#slice_name {
421
- #( #fields_names_1: & slice. #fields_names_2[ self . clone( ) ] , ) *
438
+ #( #unnested_fields_names: & slice. #unnested_fields_names[ self . clone( ) ] , ) *
439
+ #( #nested_fields_names: self . clone( ) . index( slice. #nested_fields_names) , ) *
422
440
}
423
441
}
424
442
}
@@ -438,14 +456,16 @@ pub fn derive(input: &Input) -> TokenStream {
438
456
#[ inline]
439
457
unsafe fn get_unchecked_mut( self , slice: #slice_mut_name<' a>) -> Self :: MutOutput {
440
458
#slice_mut_name {
441
- #( #fields_names_1: slice. #fields_names_2. get_unchecked_mut( self . clone( ) ) , ) *
459
+ #( #unnested_fields_names: slice. #unnested_fields_names. get_unchecked_mut( self . clone( ) ) , ) *
460
+ #( #nested_fields_names: self . clone( ) . get_unchecked_mut( slice. #nested_fields_names) , ) *
442
461
}
443
462
}
444
463
445
464
#[ inline]
446
465
fn index_mut( self , slice: #slice_mut_name<' a>) -> Self :: MutOutput {
447
466
#slice_mut_name {
448
- #( #fields_names_1: & mut slice. #fields_names_2[ self . clone( ) ] , ) *
467
+ #( #unnested_fields_names: & mut slice. #unnested_fields_names[ self . clone( ) ] , ) *
468
+ #( #nested_fields_names: self . clone( ) . index_mut( slice. #nested_fields_names) , ) *
449
469
}
450
470
}
451
471
}
0 commit comments