Skip to content

Commit a7df5fc

Browse files
committed
Handle overrides in element group derivation
1 parent 60a3b60 commit a7df5fc

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

svd-rs/CHANGELOG.md

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

88
## [Unreleased]
99

10+
- Allow overriding `dimElementGroup` fields when deriving.
11+
1012
## [v0.14.12] - 2025-03-11
1113

1214
- Bump MSRV to 1.70.0

svd-rs/src/derive_from.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
//! Implementations of DeriveFrom, setting non-explicit fields.
22
use crate::{
3-
ClusterInfo, EnumeratedValues, FieldInfo, MaybeArray, PeripheralInfo, RegisterInfo,
3+
ClusterInfo,
4+
DimElement,
5+
EnumeratedValues,
6+
FieldInfo,
7+
MaybeArray,
8+
PeripheralInfo,
9+
RegisterInfo,
410
RegisterProperties,
511
};
612

@@ -110,6 +116,20 @@ impl DeriveFrom for FieldInfo {
110116
}
111117
}
112118

119+
impl DeriveFrom for DimElement {
120+
fn derive_from(&self, other: &Self) -> Self {
121+
let mut derived = self.clone();
122+
derived.dim = other.dim;
123+
derived.dim_increment = other.dim_increment;
124+
derived.dim_index = derived.dim_index.or_else(|| other.dim_index.clone());
125+
derived.dim_name = derived.dim_name.or_else(|| other.dim_name.clone());
126+
derived.dim_array_index = derived
127+
.dim_array_index
128+
.or_else(|| other.dim_array_index.clone());
129+
derived
130+
}
131+
}
132+
113133
impl<T> DeriveFrom for MaybeArray<T>
114134
where
115135
T: DeriveFrom + crate::Name,
@@ -128,9 +148,12 @@ where
128148
Self::Single(info.derive_from(other_info))
129149
}
130150
}
131-
(Self::Array(info, dim), Self::Single(other_info) | Self::Array(other_info, _)) => {
151+
(Self::Array(info, dim), Self::Single(other_info)) => {
132152
Self::Array(info.derive_from(other_info), dim.clone())
133153
}
154+
(Self::Array(info, dim), Self::Array(other_info, other_dim)) => {
155+
Self::Array(info.derive_from(other_info), dim.derive_from(other_dim))
156+
}
134157
}
135158
}
136159
}

0 commit comments

Comments
 (0)