11//! Provides [expand] method to convert arrays, clusters and derived items in regular instances
22
33use 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 } ;
75use svd_rs:: {
86 array:: names, cluster, field, peripheral, register, Cluster , ClusterInfo , DeriveFrom , Device ,
97 EnumeratedValues , Field , Peripheral , Register , RegisterCluster , RegisterProperties ,
@@ -63,11 +61,11 @@ impl PartialEq<str> for BlockPath {
6361 }
6462 let mut parts = other. split ( '.' ) ;
6563 if let Some ( part1) = parts. next ( ) {
66- if self . peripheral != part1 {
64+ if self . peripheral . deref ( ) != part1 {
6765 return false ;
6866 }
6967 for p in parts. zip ( self . path . iter ( ) ) {
70- if p. 0 != p. 1 {
68+ if p. 0 != p. 1 . deref ( ) {
7169 return false ;
7270 }
7371 }
@@ -120,7 +118,7 @@ impl RegisterPath {
120118impl PartialEq < str > for RegisterPath {
121119 fn eq ( & self , other : & str ) -> bool {
122120 if let Some ( ( block, reg) ) = other. rsplit_once ( '.' ) {
123- self . name == reg && & self . block == block
121+ self . name . deref ( ) == reg && & self . block == block
124122 } else {
125123 false
126124 }
@@ -180,7 +178,7 @@ impl FieldPath {
180178impl PartialEq < str > for FieldPath {
181179 fn eq ( & self , other : & str ) -> bool {
182180 if let Some ( ( reg, field) ) = other. rsplit_once ( '.' ) {
183- self . name == field && & self . register == reg
181+ self . name . deref ( ) == field && & self . register == reg
184182 } else {
185183 false
186184 }
@@ -224,7 +222,7 @@ impl EnumPath {
224222impl PartialEq < str > for EnumPath {
225223 fn eq ( & self , other : & str ) -> bool {
226224 if let Some ( ( field, evs) ) = other. rsplit_once ( '.' ) {
227- self . name == evs && & self . field == field
225+ self . name . deref ( ) == evs && & self . field == field
228226 } else {
229227 false
230228 }
@@ -263,7 +261,7 @@ impl<'a> Index<'a> {
263261 self . peripherals . insert ( path, p) ;
264262 }
265263 }
266- let path = BlockPath :: new ( & p. name ) ;
264+ let path = BlockPath :: new ( p. name . deref ( ) ) ;
267265 for r in p. registers ( ) {
268266 self . add_register ( & path, r) ;
269267 }
@@ -286,7 +284,7 @@ impl<'a> Index<'a> {
286284 self . clusters . insert ( cpath, c) ;
287285 }
288286 }
289- let cpath = path. new_cluster ( & c. name ) ;
287+ let cpath = path. new_cluster ( c. name . deref ( ) ) ;
290288 for r in c. registers ( ) {
291289 self . add_register ( & cpath, r) ;
292290 }
@@ -305,7 +303,7 @@ impl<'a> Index<'a> {
305303 self . registers . insert ( rpath, r) ;
306304 }
307305 }
308- let rpath = path. new_register ( & r. name ) ;
306+ let rpath = path. new_register ( r. name . deref ( ) ) ;
309307 for f in r. fields ( ) {
310308 self . add_field ( & rpath, f) ;
311309 }
@@ -317,16 +315,16 @@ impl<'a> Index<'a> {
317315 let fpath = path. new_field ( name) ;
318316 for evs in & f. enumerated_values {
319317 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) ;
321319 }
322320 }
323321 self . fields . insert ( fpath, f) ;
324322 }
325323 }
326- let fpath = path. new_field ( & f. name ) ;
324+ let fpath = path. new_field ( f. name . deref ( ) ) ;
327325 for evs in & f. enumerated_values {
328326 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) ;
330328 }
331329 }
332330 self . fields . insert ( fpath, f) ;
@@ -365,7 +363,7 @@ fn expand_cluster_array(
365363 if let Some ( dpath) = dpath {
366364 cpath = derive_cluster ( & mut c, & dpath, path, index) ?;
367365 }
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 ( ) ) ) ;
369367
370368 for rc in take ( & mut c. children ) {
371369 expand_register_cluster ( & mut c. children , rc, & cpath, index) ?;
@@ -499,7 +497,7 @@ fn expand_register_array(
499497 if let Some ( dpath) = dpath {
500498 rpath = derive_register ( & mut r, & dpath, path, index) ?;
501499 }
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 ( ) ) ) ;
503501
504502 if let Some ( field) = r. fields . as_mut ( ) {
505503 for f in take ( field) {
@@ -529,7 +527,7 @@ fn expand_field(
529527 if let Some ( dpath) = dpath {
530528 fpath = derive_field ( & mut f, & dpath, rpath, index) ?;
531529 }
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 ( ) ) ) ;
533531
534532 for ev in & mut f. enumerated_values {
535533 let dpath = ev. derived_from . take ( ) ;
@@ -564,7 +562,7 @@ pub fn derive_enumerated_values(
564562 if let Some ( r) = index. registers . get ( rdpath) {
565563 let mut found = None ;
566564 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) ;
568566 if let Some ( d) = index. evs . get ( & epath) {
569567 found = Some ( ( d, epath) ) ;
570568 break ;
@@ -645,7 +643,7 @@ pub fn expand(indevice: &Device) -> Result<Device> {
645643 if let Some ( dpath) = dpath {
646644 path = derive_peripheral ( & mut p, & dpath, & index) ?;
647645 }
648- let path = path. unwrap_or_else ( || BlockPath :: new ( & p. name ) ) ;
646+ let path = path. unwrap_or_else ( || BlockPath :: new ( p. name . deref ( ) ) ) ;
649647 if let Some ( regs) = p. registers . as_mut ( ) {
650648 for rc in take ( regs) {
651649 expand_register_cluster ( regs, rc, & path, & index) ?;
0 commit comments