1
1
//! Provides [expand] method to convert arrays, clusters and derived items in regular instances
2
2
3
3
use anyhow:: { anyhow, Result } ;
4
- use std:: collections:: HashMap ;
5
- use std:: fmt;
6
- use std:: mem:: take;
4
+ use std:: { collections:: HashMap , fmt, mem:: take, ops:: Deref } ;
7
5
use svd_rs:: {
8
6
array:: names, cluster, field, peripheral, register, Cluster , ClusterInfo , DeriveFrom , Device ,
9
7
EnumeratedValues , Field , Peripheral , Register , RegisterCluster , RegisterProperties ,
@@ -63,11 +61,11 @@ impl PartialEq<str> for BlockPath {
63
61
}
64
62
let mut parts = other. split ( '.' ) ;
65
63
if let Some ( part1) = parts. next ( ) {
66
- if self . peripheral != part1 {
64
+ if self . peripheral . deref ( ) != part1 {
67
65
return false ;
68
66
}
69
67
for p in parts. zip ( self . path . iter ( ) ) {
70
- if p. 0 != p. 1 {
68
+ if p. 0 != p. 1 . deref ( ) {
71
69
return false ;
72
70
}
73
71
}
@@ -120,7 +118,7 @@ impl RegisterPath {
120
118
impl PartialEq < str > for RegisterPath {
121
119
fn eq ( & self , other : & str ) -> bool {
122
120
if let Some ( ( block, reg) ) = other. rsplit_once ( '.' ) {
123
- self . name == reg && & self . block == block
121
+ self . name . deref ( ) == reg && & self . block == block
124
122
} else {
125
123
false
126
124
}
@@ -180,7 +178,7 @@ impl FieldPath {
180
178
impl PartialEq < str > for FieldPath {
181
179
fn eq ( & self , other : & str ) -> bool {
182
180
if let Some ( ( reg, field) ) = other. rsplit_once ( '.' ) {
183
- self . name == field && & self . register == reg
181
+ self . name . deref ( ) == field && & self . register == reg
184
182
} else {
185
183
false
186
184
}
@@ -224,7 +222,7 @@ impl EnumPath {
224
222
impl PartialEq < str > for EnumPath {
225
223
fn eq ( & self , other : & str ) -> bool {
226
224
if let Some ( ( field, evs) ) = other. rsplit_once ( '.' ) {
227
- self . name == evs && & self . field == field
225
+ self . name . deref ( ) == evs && & self . field == field
228
226
} else {
229
227
false
230
228
}
@@ -263,7 +261,7 @@ impl<'a> Index<'a> {
263
261
self . peripherals . insert ( path, p) ;
264
262
}
265
263
}
266
- let path = BlockPath :: new ( & p. name ) ;
264
+ let path = BlockPath :: new ( p. name . deref ( ) ) ;
267
265
for r in p. registers ( ) {
268
266
self . add_register ( & path, r) ;
269
267
}
@@ -286,7 +284,7 @@ impl<'a> Index<'a> {
286
284
self . clusters . insert ( cpath, c) ;
287
285
}
288
286
}
289
- let cpath = path. new_cluster ( & c. name ) ;
287
+ let cpath = path. new_cluster ( c. name . deref ( ) ) ;
290
288
for r in c. registers ( ) {
291
289
self . add_register ( & cpath, r) ;
292
290
}
@@ -305,7 +303,7 @@ impl<'a> Index<'a> {
305
303
self . registers . insert ( rpath, r) ;
306
304
}
307
305
}
308
- let rpath = path. new_register ( & r. name ) ;
306
+ let rpath = path. new_register ( r. name . deref ( ) ) ;
309
307
for f in r. fields ( ) {
310
308
self . add_field ( & rpath, f) ;
311
309
}
@@ -317,16 +315,16 @@ impl<'a> Index<'a> {
317
315
let fpath = path. new_field ( name) ;
318
316
for evs in & f. enumerated_values {
319
317
if let Some ( name) = evs. name . as_ref ( ) {
320
- self . evs . insert ( fpath. new_enum ( name) , evs) ;
318
+ self . evs . insert ( fpath. new_enum ( name. deref ( ) ) , evs) ;
321
319
}
322
320
}
323
321
self . fields . insert ( fpath, f) ;
324
322
}
325
323
}
326
- let fpath = path. new_field ( & f. name ) ;
324
+ let fpath = path. new_field ( f. name . deref ( ) ) ;
327
325
for evs in & f. enumerated_values {
328
326
if let Some ( name) = evs. name . as_ref ( ) {
329
- self . evs . insert ( fpath. new_enum ( name) , evs) ;
327
+ self . evs . insert ( fpath. new_enum ( name. deref ( ) ) , evs) ;
330
328
}
331
329
}
332
330
self . fields . insert ( fpath, f) ;
@@ -365,7 +363,7 @@ fn expand_cluster_array(
365
363
if let Some ( dpath) = dpath {
366
364
cpath = derive_cluster ( & mut c, & dpath, path, index) ?;
367
365
}
368
- let cpath = cpath. unwrap_or_else ( || path. new_cluster ( & c. name ) ) ;
366
+ let cpath = cpath. unwrap_or_else ( || path. new_cluster ( c. name . deref ( ) ) ) ;
369
367
370
368
for rc in take ( & mut c. children ) {
371
369
expand_register_cluster ( & mut c. children , rc, & cpath, index) ?;
@@ -499,7 +497,7 @@ fn expand_register_array(
499
497
if let Some ( dpath) = dpath {
500
498
rpath = derive_register ( & mut r, & dpath, path, index) ?;
501
499
}
502
- let rpath = rpath. unwrap_or_else ( || path. new_register ( & r. name ) ) ;
500
+ let rpath = rpath. unwrap_or_else ( || path. new_register ( r. name . deref ( ) ) ) ;
503
501
504
502
if let Some ( field) = r. fields . as_mut ( ) {
505
503
for f in take ( field) {
@@ -529,7 +527,7 @@ fn expand_field(
529
527
if let Some ( dpath) = dpath {
530
528
fpath = derive_field ( & mut f, & dpath, rpath, index) ?;
531
529
}
532
- let fpath = fpath. unwrap_or_else ( || rpath. new_field ( & f. name ) ) ;
530
+ let fpath = fpath. unwrap_or_else ( || rpath. new_field ( f. name . deref ( ) ) ) ;
533
531
534
532
for ev in & mut f. enumerated_values {
535
533
let dpath = ev. derived_from . take ( ) ;
@@ -564,7 +562,7 @@ pub fn derive_enumerated_values(
564
562
if let Some ( r) = index. registers . get ( rdpath) {
565
563
let mut found = None ;
566
564
for f in r. fields ( ) {
567
- let epath = EnumPath :: new ( rdpath. new_field ( & f. name ) , dname) ;
565
+ let epath = EnumPath :: new ( rdpath. new_field ( f. name . deref ( ) ) , dname) ;
568
566
if let Some ( d) = index. evs . get ( & epath) {
569
567
found = Some ( ( d, epath) ) ;
570
568
break ;
@@ -645,7 +643,7 @@ pub fn expand(indevice: &Device) -> Result<Device> {
645
643
if let Some ( dpath) = dpath {
646
644
path = derive_peripheral ( & mut p, & dpath, & index) ?;
647
645
}
648
- let path = path. unwrap_or_else ( || BlockPath :: new ( & p. name ) ) ;
646
+ let path = path. unwrap_or_else ( || BlockPath :: new ( p. name . deref ( ) ) ) ;
649
647
if let Some ( regs) = p. registers . as_mut ( ) {
650
648
for rc in take ( regs) {
651
649
expand_register_cluster ( regs, rc, & path, & index) ?;
0 commit comments