Skip to content

Commit f89c08a

Browse files
bors[bot]Emilgardisryankurte
committed
Merge #64
64: Make register description optional as per svd spec r=ryankurte a=Emilgardis Fixes #59 Co-authored-by: Emil Gardström <[email protected]> Co-authored-by: Ryan <[email protected]>
2 parents 1888f10 + 73abdc1 commit f89c08a

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,23 @@ pub fn run_test<
102102
tests: &[(T, &str)],
103103
) {
104104
for t in tests {
105-
let tree1 = Element::parse(t.1.as_bytes()).unwrap();
106-
let elem = T::parse(&tree1).unwrap();
105+
let mut tree1 = Element::parse(t.1.as_bytes()).unwrap();
106+
let mut elem = T::parse(&tree1).unwrap();
107+
// Hack to make assert be order agnostic
108+
tree1.children.sort_by(|e1,e2| e1.name.cmp(&e2.name));
109+
tree1.children.iter_mut().for_each(|e| {
110+
e.children.sort_by(|e1,e2| e1.name.cmp(&e2.name));
111+
});
107112
assert_eq!(
108113
elem, t.0,
109114
"Error parsing xml` (mismatch between parsed and expected)"
110115
);
111-
let tree2 = elem.encode().unwrap();
116+
let mut tree2 = elem.encode().unwrap();
117+
// Hack to make assert be order agnostic
118+
tree2.children.sort_by(|e1,e2| e1.name.cmp(&e2.name));
119+
tree2.children.iter_mut().for_each(|e| {
120+
e.children.sort_by(|e1,e2| e1.name.cmp(&e2.name));
121+
});
112122
assert_eq!(
113123
tree1, tree2,
114124
"Error encoding xml (mismatch between encoded and original)"

src/svd/registerinfo.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub struct RegisterInfo {
2424
pub alternate_group: Option<String>,
2525
pub alternate_register: Option<String>,
2626
pub derived_from: Option<String>,
27-
pub description: String,
27+
pub description: Option<String>,
2828
pub address_offset: u32,
2929
pub size: Option<u32>,
3030
pub access: Option<Access>,
@@ -59,8 +59,8 @@ impl RegisterInfo {
5959
name,
6060
alternate_group: tree.get_child_text_opt("alternateGroup")?,
6161
alternate_register: tree.get_child_text_opt("alternateRegister")?,
62+
description: tree.get_child_text_opt("description")?,
6263
derived_from: tree.attributes.get("derivedFrom").map(|s| s.to_owned()),
63-
description: tree.get_child_text("description")?,
6464
address_offset: tree.get_child_u32("addressOffset")?,
6565
size: parse::optional::<u32>("size", tree)?,
6666
access: parse::optional::<Access>("access", tree)?,
@@ -105,15 +105,22 @@ impl Encode for RegisterInfo {
105105
attributes: HashMap::new(),
106106
children: vec![
107107
new_element("name", Some(self.name.clone())),
108-
new_element("description", Some(self.description.clone())),
109108
new_element(
110109
"addressOffset",
111110
Some(format!("0x{:x}", self.address_offset)),
112111
),
113112
],
114113
text: None,
115114
};
116-
115+
match self.description {
116+
Some(ref v) => {
117+
elem.children.push(new_element(
118+
"description",
119+
Some(v.clone()),
120+
));
121+
}
122+
None => (),
123+
}
117124
match self.alternate_group {
118125
Some(ref v) => {
119126
elem.children.push(new_element(
@@ -225,7 +232,7 @@ mod tests {
225232
alternate_group: Some(String::from("alternate group")),
226233
alternate_register: Some(String::from("alternate register")),
227234
derived_from: Some(String::from("derived from")),
228-
description: String::from("Write Control Register"),
235+
description: Some(String::from("Write Control Register")),
229236
address_offset: 8,
230237
size: Some(32),
231238
access: Some(Access::ReadWrite),

0 commit comments

Comments
 (0)