Skip to content

Commit 3a3821c

Browse files
committed
missing derived_from
1 parent 350b8e9 commit 3a3821c

File tree

5 files changed

+17
-3
lines changed

5 files changed

+17
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
99

1010
- [breaking-change] `Defaults` field renamed on `RegisterProperties`
1111
and added into `Peripheral` and `ClusterInfo`
12+
- Added `derived_from` into `field` and `ClusterInfo`
1213
- Updated dependencies, use `Edition 2018`
1314
- Added missing `zeroToToggle`
1415
- Added serializing/deserializing with `serde`

src/svd/clusterinfo.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use crate::svd::{
1818
#[derive(Clone, Debug, PartialEq)]
1919
pub struct ClusterInfo {
2020
pub name: String,
21+
pub derived_from: Option<String>,
2122
pub description: String,
2223
pub header_struct_name: Option<String>,
2324
pub address_offset: u32,
@@ -34,6 +35,7 @@ impl Parse for ClusterInfo {
3435
fn parse(tree: &Element) -> Result<ClusterInfo, SVDError> {
3536
Ok(ClusterInfo {
3637
name: tree.get_child_text("name")?, // TODO: Handle naming of cluster
38+
derived_from: tree.attributes.get("derivedFrom").map(|s| s.to_owned()),
3739
description: tree.get_child_text("description")?,
3840
header_struct_name: tree.get_child_text_opt("headerStructName")?,
3941
address_offset: tree.get_child_u32("addressOffset")?,
@@ -57,6 +59,10 @@ impl Encode for ClusterInfo {
5759
fn encode(&self) -> Result<Element, SVDError> {
5860
let mut e = new_element("cluster", None);
5961

62+
if let Some(v) = &self.derived_from {
63+
e.attributes.insert(String::from("derivedFrom"), format!("{}", v));
64+
}
65+
6066
e.children.push(new_element(
6167
"description",
6268
Some(self.description.clone()),

src/svd/enumeratedvalues.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ impl Parse for EnumeratedValues {
3838
Ok(EnumeratedValues {
3939
name: tree.get_child_text_opt("name")?,
4040
usage: parse::optional::<Usage>("usage", tree)?,
41-
derived_from: tree.attributes
42-
.get(&"derivedFrom".to_owned())
43-
.map(|s| s.to_owned()),
41+
derived_from: tree.attributes.get("derivedFrom").map(|s| s.to_owned()),
4442
values: {
4543
let values: Result<Vec<_>, _> = tree.children
4644
.iter()

src/svd/field.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use crate::svd::{
2525
#[derive(Clone, Debug, PartialEq)]
2626
pub struct Field {
2727
pub name: String,
28+
pub derived_from: Option<String>,
2829
pub description: Option<String>,
2930
pub bit_range: BitRange,
3031
pub access: Option<Access>,
@@ -59,6 +60,7 @@ impl Field {
5960
fn _parse(tree: &Element, name: String) -> Result<Field, SVDError> {
6061
Ok(Field {
6162
name,
63+
derived_from: tree.attributes.get("derivedFrom").map(|s| s.to_owned()),
6264
description: tree.get_child_text_opt("description")?,
6365
bit_range: BitRange::parse(tree)?,
6466
access: parse::optional::<Access>("access", tree)?,
@@ -103,6 +105,10 @@ impl Encode for Field {
103105
text: None,
104106
};
105107

108+
if let Some(v) = &self.derived_from {
109+
elem.attributes.insert(String::from("derivedFrom"), format!("{}", v));
110+
}
111+
106112
// Add bit range
107113
elem.children
108114
.append(&mut self.bit_range.encode()?);
@@ -146,6 +152,7 @@ mod tests {
146152
(
147153
Field {
148154
name: String::from("MODE"),
155+
derived_from: None,
149156
description: Some(String::from("Read Mode")),
150157
bit_range: BitRange {
151158
offset: 24,
@@ -197,6 +204,7 @@ mod tests {
197204
(
198205
Field {
199206
name: String::from("MODE"),
207+
derived_from: None,
200208
description: None,
201209
bit_range: BitRange {
202210
offset: 24,

src/svd/registerinfo.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ mod tests {
220220
reset_mask: Some(0x00000023),
221221
fields: Some(vec![Field {
222222
name: String::from("WREN"),
223+
derived_from: None,
223224
description: Some(String::from(
224225
"Enable Write/Erase Controller",
225226
)),

0 commit comments

Comments
 (0)