Skip to content

Commit 56392bb

Browse files
committed
Add trait to sanitize name. This prevents generated software from
colliding with Rust keywords.
1 parent 695208f commit 56392bb

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/lib.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,23 @@ use syn::*;
1515
use inflections::Inflect;
1616
use svd::{Access, Defaults, Peripheral, Register};
1717

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+
1835
pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
1936
assert!(p.derived_from.is_none(), "DerivedFrom not supported");
2037

@@ -224,7 +241,7 @@ pub fn gen_register_r(r: &Register, d: &Defaults) -> Vec<Tokens> {
224241
continue;
225242
}
226243

227-
let name = Ident::new(field.name.to_snake_case());
244+
let name = Ident::new(field.name.to_snake_case().sanitize());
228245
let offset = field.bit_range.offset as u8;
229246

230247
let width = field.bit_range.width;
@@ -313,7 +330,7 @@ pub fn gen_register_w(r: &Register, d: &Defaults) -> Vec<Tokens> {
313330
continue;
314331
}
315332

316-
let name = Ident::new(field.name.to_snake_case());
333+
let name = Ident::new(field.name.to_snake_case().sanitize());
317334
let offset = field.bit_range.offset as u8;
318335

319336
let width = field.bit_range.width;

0 commit comments

Comments
 (0)