Skip to content

Commit b7e987e

Browse files
bors[bot]burrbull
andauthored
Merge #161
161: peripheral array r=Emilgardis a=burrbull Closes #41 Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents 4a8ab87 + 97fc7ad commit b7e987e

19 files changed

+559
-394
lines changed

svd-encoder/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## Unreleased
9+
10+
- Add array support for peripherals
11+
812
## [v0.11.0] - 2021-10-02
913
- Splitted from `svd-parser`
1014

svd-encoder/src/cluster.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ impl Encode for Cluster {
77

88
fn encode(&self) -> Result<Element, EncodeError> {
99
match self {
10-
Cluster::Single(i) => i.encode(),
11-
Cluster::Array(i, a) => {
10+
Self::Single(i) => i.encode(),
11+
Self::Array(i, a) => {
1212
let mut e = Element::new("cluster");
1313
e.merge(&a.encode()?);
1414
e.merge(&i.encode()?);

svd-encoder/src/field.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ impl Encode for Field {
77

88
fn encode(&self) -> Result<Element, EncodeError> {
99
match self {
10-
Field::Single(info) => info.encode(),
11-
Field::Array(info, array_info) => {
10+
Self::Single(info) => info.encode(),
11+
Self::Array(info, array_info) => {
1212
let mut base = Element::new("field");
1313
base.merge(&array_info.encode()?);
1414
base.merge(&info.encode()?);

svd-encoder/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ mod fieldinfo;
7878
mod interrupt;
7979
mod modifiedwritevalues;
8080
mod peripheral;
81+
mod peripheralinfo;
8182
mod register;
8283
mod registercluster;
8384
mod registerinfo;

svd-encoder/src/peripheral.rs

Lines changed: 9 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,19 @@
1-
use super::{new_node, Element, Encode, EncodeChildren, EncodeError, XMLNode};
1+
use super::{Element, ElementMerge, Encode, EncodeError};
22

3-
use crate::svd::{Interrupt, Peripheral};
3+
use crate::svd::Peripheral;
44

55
impl Encode for Peripheral {
66
type Error = EncodeError;
77

88
fn encode(&self) -> Result<Element, EncodeError> {
9-
let mut elem = Element::new("peripheral");
10-
elem.children.push(new_node("name", self.name.clone()));
11-
12-
if let Some(v) = &self.display_name {
13-
elem.children.push(new_node("displayName", v.to_string()));
14-
}
15-
16-
if let Some(v) = &self.version {
17-
elem.children.push(new_node("version", v.to_string()));
18-
}
19-
20-
if let Some(v) = &self.description {
21-
elem.children.push(new_node("description", v.to_string()));
22-
}
23-
24-
if let Some(v) = &self.group_name {
25-
elem.children.push(new_node("groupName", v.to_string()));
26-
}
27-
elem.children.push(new_node(
28-
"baseAddress",
29-
format!("0x{:.08X}", self.base_address),
30-
));
31-
32-
elem.children
33-
.extend(self.default_register_properties.encode()?);
34-
35-
if let Some(v) = &self.address_block {
36-
for ab in v {
37-
elem.children.push(ab.encode_node()?);
9+
match self {
10+
Self::Single(info) => info.encode(),
11+
Self::Array(info, array_info) => {
12+
let mut base = Element::new("peripheral");
13+
base.merge(&array_info.encode()?);
14+
base.merge(&info.encode()?);
15+
Ok(base)
3816
}
3917
}
40-
41-
let interrupts: Result<Vec<_>, _> =
42-
self.interrupt.iter().map(Interrupt::encode_node).collect();
43-
44-
elem.children.append(&mut interrupts?);
45-
46-
if let Some(v) = &self.registers {
47-
let children: Result<Vec<_>, _> = v.iter().map(|e| e.encode_node()).collect();
48-
49-
elem.children.push({
50-
let mut e = Element::new("registers");
51-
e.children = children?;
52-
XMLNode::Element(e)
53-
});
54-
}
55-
56-
if let Some(v) = &self.derived_from {
57-
elem.attributes
58-
.insert(String::from("derivedFrom"), v.to_string());
59-
}
60-
61-
Ok(elem)
6218
}
6319
}

svd-encoder/src/peripheralinfo.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
use super::{new_node, Element, Encode, EncodeChildren, EncodeError, XMLNode};
2+
3+
use crate::svd::{Interrupt, PeripheralInfo};
4+
5+
impl Encode for PeripheralInfo {
6+
type Error = EncodeError;
7+
8+
fn encode(&self) -> Result<Element, EncodeError> {
9+
let mut elem = Element::new("peripheral");
10+
elem.children.push(new_node("name", self.name.clone()));
11+
12+
if let Some(v) = &self.display_name {
13+
elem.children.push(new_node("displayName", v.to_string()));
14+
}
15+
16+
if let Some(v) = &self.version {
17+
elem.children.push(new_node("version", v.to_string()));
18+
}
19+
20+
if let Some(v) = &self.description {
21+
elem.children.push(new_node("description", v.to_string()));
22+
}
23+
24+
if let Some(v) = &self.group_name {
25+
elem.children.push(new_node("groupName", v.to_string()));
26+
}
27+
elem.children.push(new_node(
28+
"baseAddress",
29+
format!("0x{:.08X}", self.base_address),
30+
));
31+
32+
elem.children
33+
.extend(self.default_register_properties.encode()?);
34+
35+
if let Some(v) = &self.address_block {
36+
for ab in v {
37+
elem.children.push(ab.encode_node()?);
38+
}
39+
}
40+
41+
let interrupts: Result<Vec<_>, _> =
42+
self.interrupt.iter().map(Interrupt::encode_node).collect();
43+
44+
elem.children.append(&mut interrupts?);
45+
46+
if let Some(v) = &self.registers {
47+
let children: Result<Vec<_>, _> = v.iter().map(|e| e.encode_node()).collect();
48+
49+
elem.children.push({
50+
let mut e = Element::new("registers");
51+
e.children = children?;
52+
XMLNode::Element(e)
53+
});
54+
}
55+
56+
if let Some(v) = &self.derived_from {
57+
elem.attributes
58+
.insert(String::from("derivedFrom"), v.to_string());
59+
}
60+
61+
Ok(elem)
62+
}
63+
}

svd-encoder/src/register.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ impl Encode for Register {
77

88
fn encode(&self) -> Result<Element, EncodeError> {
99
match self {
10-
Register::Single(info) => info.encode(),
11-
Register::Array(info, array_info) => {
10+
Self::Single(info) => info.encode(),
11+
Self::Array(info, array_info) => {
1212
let mut base = Element::new("register");
1313
base.merge(&array_info.encode()?);
1414
base.merge(&info.encode()?);

svd-parser/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## Unreleased
9+
10+
- Add array support for peripherals
11+
812
## [v0.11.0] - 2021-10-02
913

1014
Previous versions in common [changelog][../CHANGELOG.md].

svd-parser/src/cluster.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ impl Parse for Cluster {
2626
}
2727
}
2828

29-
Ok(Cluster::Array(info, array_info))
29+
Ok(Self::Array(info, array_info))
3030
} else {
31-
Ok(Cluster::Single(info))
31+
Ok(Self::Single(info))
3232
}
3333
}
3434
}

svd-parser/src/field.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ impl Parse for Field {
2626
.at(tree.id()));
2727
}
2828
}
29-
Ok(Field::Array(info, array_info))
29+
Ok(Self::Array(info, array_info))
3030
} else {
31-
Ok(Field::Single(info))
31+
Ok(Self::Single(info))
3232
}
3333
}
3434
}

0 commit comments

Comments
 (0)