1
- use crate :: { ClusterInfo , EnumeratedValues , Peripheral , RegisterInfo , RegisterProperties } ;
1
+ use crate :: {
2
+ ClusterInfo , EnumeratedValues , FieldInfo , Peripheral , RegisterInfo , RegisterProperties ,
3
+ } ;
2
4
3
5
/// Fill empty fields of structure with values of other structure
4
6
pub trait DeriveFrom {
@@ -14,7 +16,7 @@ impl DeriveFrom for ClusterInfo {
14
16
. derive_from ( & other. default_register_properties ) ;
15
17
derived. header_struct_name = derived
16
18
. header_struct_name
17
- . or ( other. header_struct_name . clone ( ) ) ;
19
+ . or_else ( || other. header_struct_name . clone ( ) ) ;
18
20
if derived. children . is_empty ( ) {
19
21
derived. children = other. children . clone ( ) ;
20
22
}
@@ -25,7 +27,7 @@ impl DeriveFrom for ClusterInfo {
25
27
impl DeriveFrom for EnumeratedValues {
26
28
fn derive_from ( & self , other : & Self ) -> Self {
27
29
let mut derived = self . clone ( ) ;
28
- derived. usage = derived. usage . or ( other. usage . clone ( ) ) ;
30
+ derived. usage = derived. usage . or_else ( || other. usage . clone ( ) ) ;
29
31
if derived. values . is_empty ( ) {
30
32
derived. values = other. values . clone ( ) ;
31
33
}
@@ -36,12 +38,12 @@ impl DeriveFrom for EnumeratedValues {
36
38
impl DeriveFrom for Peripheral {
37
39
fn derive_from ( & self , other : & Self ) -> Self {
38
40
let mut derived = self . clone ( ) ;
39
- derived. group_name = derived. group_name . or ( other. group_name . clone ( ) ) ;
40
- derived. description = derived. description . or ( other. description . clone ( ) ) ;
41
+ derived. group_name = derived. group_name . or_else ( || other. group_name . clone ( ) ) ;
42
+ derived. description = derived. description . or_else ( || other. description . clone ( ) ) ;
41
43
derived. default_register_properties = derived
42
44
. default_register_properties
43
45
. derive_from ( & other. default_register_properties ) ;
44
- derived. registers = derived. registers . or ( other. registers . clone ( ) ) ;
46
+ derived. registers = derived. registers . or_else ( || other. registers . clone ( ) ) ;
45
47
if derived. interrupt . is_empty ( ) {
46
48
derived. interrupt = other. interrupt . clone ( ) ;
47
49
}
@@ -52,12 +54,12 @@ impl DeriveFrom for Peripheral {
52
54
impl DeriveFrom for RegisterInfo {
53
55
fn derive_from ( & self , other : & RegisterInfo ) -> RegisterInfo {
54
56
let mut derived = self . clone ( ) ;
55
- derived. description = derived. description . or ( other. description . clone ( ) ) ;
57
+ derived. description = derived. description . or_else ( || other. description . clone ( ) ) ;
56
58
derived. size = derived. size . or ( other. size ) ;
57
59
derived. access = derived. access . or ( other. access ) ;
58
60
derived. reset_value = derived. reset_value . or ( other. reset_value ) ;
59
61
derived. reset_mask = derived. reset_mask . or ( other. reset_mask ) ;
60
- derived. fields = derived. fields . or ( other. fields . clone ( ) ) ;
62
+ derived. fields = derived. fields . or_else ( || other. fields . clone ( ) ) ;
61
63
derived. write_constraint = derived. write_constraint . or ( other. write_constraint ) ;
62
64
derived. modified_write_values = derived
63
65
. modified_write_values
@@ -76,3 +78,19 @@ impl DeriveFrom for RegisterProperties {
76
78
derived
77
79
}
78
80
}
81
+
82
+ impl DeriveFrom for FieldInfo {
83
+ fn derive_from ( & self , other : & Self ) -> Self {
84
+ let mut derived = self . clone ( ) ;
85
+ derived. description = derived. description . or_else ( || other. description . clone ( ) ) ;
86
+ derived. access = derived. access . or ( other. access ) ;
87
+ if derived. enumerated_values . is_empty ( ) {
88
+ derived. enumerated_values = other. enumerated_values . clone ( ) ;
89
+ }
90
+ derived. write_constraint = derived. write_constraint . or ( other. write_constraint ) ;
91
+ derived. modified_write_values = derived
92
+ . modified_write_values
93
+ . or ( other. modified_write_values ) ;
94
+ derived
95
+ }
96
+ }
0 commit comments