@@ -39,7 +39,10 @@ pub fn render(
39
39
let mut r_impl_items = vec ! [ ] ;
40
40
let mut w_impl_items = vec ! [ ] ;
41
41
42
- if access == Access :: ReadWrite {
42
+ let can_read = [ Access :: ReadOnly , Access :: ReadWriteOnce , Access :: ReadWrite ] . contains ( & access) ;
43
+ let can_write = access != Access :: ReadOnly ;
44
+
45
+ if access == Access :: ReadWrite || access == Access :: ReadWriteOnce {
43
46
reg_impl_items. push ( quote ! {
44
47
/// Modifies the contents of the register
45
48
#[ inline]
@@ -53,7 +56,7 @@ pub fn render(
53
56
} ) ;
54
57
}
55
58
56
- if access == Access :: ReadOnly || access == Access :: ReadWrite {
59
+ if can_read {
57
60
reg_impl_items. push ( quote ! {
58
61
/// Reads the contents of the register
59
62
#[ inline]
@@ -78,7 +81,7 @@ pub fn render(
78
81
} ) ;
79
82
}
80
83
81
- if access == Access :: WriteOnly || access == Access :: ReadWrite {
84
+ if can_write {
82
85
reg_impl_items. push ( quote ! {
83
86
/// Writes to the register
84
87
#[ inline]
@@ -157,15 +160,15 @@ pub fn render(
157
160
}
158
161
}
159
162
160
- if access == Access :: ReadOnly || access == Access :: ReadWrite {
163
+ if can_read {
161
164
mod_items. push ( quote ! {
162
165
impl R {
163
166
#( #r_impl_items) *
164
167
}
165
168
} ) ;
166
169
}
167
170
168
- if access == Access :: WriteOnly || access == Access :: ReadWrite {
171
+ if can_write {
169
172
mod_items. push ( quote ! {
170
173
impl W {
171
174
#( #w_impl_items) *
@@ -266,9 +269,9 @@ pub fn fields(
266
269
let fs = fields. iter ( ) . map ( F :: from) . collect :: < Result < Vec < _ > > > ( ) ?;
267
270
268
271
// TODO enumeratedValues
269
- if access == Access :: ReadOnly || access == Access :: ReadWrite {
272
+ if [ Access :: ReadOnly , Access :: ReadWriteOnce , Access :: ReadWrite ] . contains ( & access ) {
270
273
for f in & fs {
271
- if f. access == Some ( Access :: WriteOnly ) {
274
+ if f. access == Some ( Access :: WriteOnly ) || f . access == Some ( Access :: WriteOnce ) {
272
275
continue ;
273
276
}
274
277
@@ -556,7 +559,7 @@ pub fn fields(
556
559
}
557
560
}
558
561
559
- if access == Access :: WriteOnly || access == Access :: ReadWrite {
562
+ if access != Access :: ReadOnly {
560
563
for f in & fs {
561
564
if f. access == Some ( Access :: ReadOnly ) {
562
565
continue ;
0 commit comments