@@ -15,6 +15,23 @@ use syn::*;
15
15
use inflections:: Inflect ;
16
16
use svd:: { Access , Defaults , Peripheral , Register } ;
17
17
18
+ /// Trait that sanitizes name avoiding rust keywords and the like.
19
+ trait SanitizeName {
20
+ /// Sanitize a name; avoiding Rust keywords and the like.
21
+ fn sanitize ( & self ) -> String ;
22
+ }
23
+
24
+ impl SanitizeName for String {
25
+ fn sanitize ( & self ) -> String {
26
+ match self . as_str ( ) {
27
+ "fn" => "fn_" . to_owned ( ) ,
28
+ "match" => "match_" . to_owned ( ) ,
29
+ "mod" => "mod_" . to_owned ( ) ,
30
+ _ => self . to_owned ( ) ,
31
+ }
32
+ }
33
+ }
34
+
18
35
pub fn gen_peripheral ( p : & Peripheral , d : & Defaults ) -> Vec < Tokens > {
19
36
assert ! ( p. derived_from. is_none( ) , "DerivedFrom not supported" ) ;
20
37
@@ -224,7 +241,7 @@ pub fn gen_register_r(r: &Register, d: &Defaults) -> Vec<Tokens> {
224
241
continue ;
225
242
}
226
243
227
- let name = Ident :: new ( field. name . to_snake_case ( ) ) ;
244
+ let name = Ident :: new ( field. name . to_snake_case ( ) . sanitize ( ) ) ;
228
245
let offset = field. bit_range . offset as u8 ;
229
246
230
247
let width = field. bit_range . width ;
@@ -313,7 +330,7 @@ pub fn gen_register_w(r: &Register, d: &Defaults) -> Vec<Tokens> {
313
330
continue ;
314
331
}
315
332
316
- let name = Ident :: new ( field. name . to_snake_case ( ) ) ;
333
+ let name = Ident :: new ( field. name . to_snake_case ( ) . sanitize ( ) ) ;
317
334
let offset = field. bit_range . offset as u8 ;
318
335
319
336
let width = field. bit_range . width ;
0 commit comments