@@ -39,7 +39,10 @@ pub fn render(
3939 let mut r_impl_items = vec ! [ ] ;
4040 let mut w_impl_items = vec ! [ ] ;
4141
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 {
4346 reg_impl_items. push ( quote ! {
4447 /// Modifies the contents of the register
4548 #[ inline]
@@ -53,7 +56,7 @@ pub fn render(
5356 } ) ;
5457 }
5558
56- if access == Access :: ReadOnly || access == Access :: ReadWrite {
59+ if can_read {
5760 reg_impl_items. push ( quote ! {
5861 /// Reads the contents of the register
5962 #[ inline]
@@ -78,7 +81,7 @@ pub fn render(
7881 } ) ;
7982 }
8083
81- if access == Access :: WriteOnly || access == Access :: ReadWrite {
84+ if can_write {
8285 reg_impl_items. push ( quote ! {
8386 /// Writes to the register
8487 #[ inline]
@@ -157,15 +160,15 @@ pub fn render(
157160 }
158161 }
159162
160- if access == Access :: ReadOnly || access == Access :: ReadWrite {
163+ if can_read {
161164 mod_items. push ( quote ! {
162165 impl R {
163166 #( #r_impl_items) *
164167 }
165168 } ) ;
166169 }
167170
168- if access == Access :: WriteOnly || access == Access :: ReadWrite {
171+ if can_write {
169172 mod_items. push ( quote ! {
170173 impl W {
171174 #( #w_impl_items) *
@@ -266,9 +269,9 @@ pub fn fields(
266269 let fs = fields. iter ( ) . map ( F :: from) . collect :: < Result < Vec < _ > > > ( ) ?;
267270
268271 // TODO enumeratedValues
269- if access == Access :: ReadOnly || access == Access :: ReadWrite {
272+ if [ Access :: ReadOnly , Access :: ReadWriteOnce , Access :: ReadWrite ] . contains ( & access ) {
270273 for f in & fs {
271- if f. access == Some ( Access :: WriteOnly ) {
274+ if f. access == Some ( Access :: WriteOnly ) || f . access == Some ( Access :: WriteOnce ) {
272275 continue ;
273276 }
274277
@@ -556,7 +559,7 @@ pub fn fields(
556559 }
557560 }
558561
559- if access == Access :: WriteOnly || access == Access :: ReadWrite {
562+ if access != Access :: ReadOnly {
560563 for f in & fs {
561564 if f. access == Some ( Access :: ReadOnly ) {
562565 continue ;
0 commit comments