1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use super::{new_node, Element, Encode, EncodeChildren, EncodeError, XMLNode};
use crate::svd::{Field, RegisterInfo};
impl Encode for RegisterInfo {
type Error = EncodeError;
fn encode(&self) -> Result<Element, EncodeError> {
let mut elem = Element::new("register");
elem.children.push(new_node("name", self.name.clone()));
if let Some(v) = &self.display_name {
elem.children.push(new_node("displayName", v.clone()));
}
if let Some(v) = &self.description {
elem.children.push(new_node("description", v.clone()));
}
if let Some(v) = &self.alternate_group {
elem.children
.push(new_node("alternateGroup", v.to_string()));
}
if let Some(v) = &self.alternate_register {
elem.children
.push(new_node("alternateRegister", v.to_string()));
}
elem.children.push(new_node(
"addressOffset",
format!("0x{:X}", self.address_offset),
));
elem.children.extend(self.properties.encode()?);
if let Some(v) = &self.modified_write_values {
elem.children.push(v.encode_node()?);
}
if let Some(v) = &self.write_constraint {
elem.children.push(v.encode_node()?);
}
if let Some(v) = &self.fields {
let children = v
.iter()
.map(Field::encode_node)
.collect::<Result<Vec<_>, EncodeError>>()?;
if !children.is_empty() {
let mut fields = Element::new("fields");
fields.children = children;
elem.children.push(XMLNode::Element(fields));
}
}
if let Some(v) = &self.derived_from {
elem.attributes
.insert(String::from("derivedFrom"), v.to_string());
}
Ok(elem)
}
}