@@ -762,10 +762,9 @@ pub fn fields(
762
762
763
763
// generate enum VALUE_READ_TY_A { ... each variants ... } and and From<fty> for VALUE_READ_TY_A.
764
764
if let Some ( def) = def. as_ref ( ) {
765
- add_from_variants_with_default (
765
+ add_from_variants (
766
766
mod_items,
767
- & variants,
768
- def,
767
+ variants. iter ( ) . chain ( std:: iter:: once ( def) ) ,
769
768
& value_read_ty,
770
769
& fty,
771
770
& description,
@@ -775,7 +774,7 @@ pub fn fields(
775
774
} else {
776
775
add_from_variants (
777
776
mod_items,
778
- & variants,
777
+ variants. iter ( ) ,
779
778
& value_read_ty,
780
779
& fty,
781
780
& description,
@@ -1051,7 +1050,7 @@ pub fn fields(
1051
1050
} else {
1052
1051
add_from_variants (
1053
1052
mod_items,
1054
- & variants,
1053
+ variants. iter ( ) ,
1055
1054
& value_write_ty,
1056
1055
& fty,
1057
1056
& description,
@@ -1357,9 +1356,9 @@ fn add_with_no_variants(
1357
1356
}
1358
1357
}
1359
1358
1360
- fn add_from_variants (
1359
+ fn add_from_variants < ' a > (
1361
1360
mod_items : & mut TokenStream ,
1362
- variants : & [ Variant ] ,
1361
+ variants : impl Iterator < Item = & ' a Variant > ,
1363
1362
pc : & Ident ,
1364
1363
fty : & Ident ,
1365
1364
desc : & str ,
@@ -1372,7 +1371,7 @@ fn add_from_variants(
1372
1371
} ;
1373
1372
1374
1373
let mut vars = TokenStream :: new ( ) ;
1375
- for v in variants. iter ( ) . map ( |v| {
1374
+ for v in variants. map ( |v| {
1376
1375
let desc = util:: escape_special_chars ( & util:: respace ( & format ! ( "{}: {}" , v. value, v. doc) ) ) ;
1377
1376
let pcv = & v. pc ;
1378
1377
let pcval = & unsuffixed ( v. value ) ;
@@ -1488,62 +1487,3 @@ fn enums_to_map(evs: &EnumeratedValues) -> BTreeMap<u64, &EnumeratedValue> {
1488
1487
fn minimal_hole ( map : & BTreeMap < u64 , & EnumeratedValue > , width : u32 ) -> Option < u64 > {
1489
1488
( 0 ..( 1u64 << width) ) . find ( |& v| !map. contains_key ( & v) )
1490
1489
}
1491
-
1492
- fn add_from_variants_with_default (
1493
- mod_items : & mut TokenStream ,
1494
- variants : & [ Variant ] ,
1495
- default : & Variant ,
1496
- pc : & Ident ,
1497
- fty : & Ident ,
1498
- desc : & str ,
1499
- reset_value : Option < u64 > ,
1500
- ) {
1501
- let mut vars = TokenStream :: new ( ) ;
1502
- let mut arms = TokenStream :: new ( ) ;
1503
- for ( v, c) in variants. iter ( ) . chain ( std:: iter:: once ( default) ) . map ( |v| {
1504
- let desc = util:: escape_special_chars ( & util:: respace ( & format ! ( "{}: {}" , v. value, v. doc) ) ) ;
1505
- let pcv = & v. pc ;
1506
- let pcval = & util:: unsuffixed ( v. value ) ;
1507
- (
1508
- quote ! {
1509
- #[ doc = #desc]
1510
- #pcv = #pcval,
1511
- } ,
1512
- quote ! {
1513
- #pc:: #pcv => #pcval,
1514
- } ,
1515
- )
1516
- } ) {
1517
- vars. extend ( v) ;
1518
- arms. extend ( c) ;
1519
- }
1520
-
1521
- let desc = if let Some ( rv) = reset_value {
1522
- format ! ( "{desc}\n \n Value on reset: {rv}" )
1523
- } else {
1524
- desc. to_string ( )
1525
- } ;
1526
-
1527
- mod_items. extend ( quote ! {
1528
- #[ doc = #desc]
1529
- #[ derive( Clone , Copy , Debug , PartialEq ) ]
1530
- pub enum #pc {
1531
- #vars
1532
- }
1533
- impl From <#pc> for #fty {
1534
- #[ inline( always) ]
1535
- fn from( variant: #pc) -> Self {
1536
- match variant {
1537
- #arms
1538
- }
1539
- }
1540
- }
1541
- } ) ;
1542
- if fty != "bool" {
1543
- mod_items. extend ( quote ! {
1544
- impl crate :: FieldSpec for #pc {
1545
- type Ux = #fty;
1546
- }
1547
- } ) ;
1548
- }
1549
- }
0 commit comments