diff --git a/svd-rs/CHANGELOG.md b/svd-rs/CHANGELOG.md index be2236a..9ca570e 100644 --- a/svd-rs/CHANGELOG.md +++ b/svd-rs/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +- Allow overriding `dimElementGroup` fields when deriving. + ## [v0.14.12] - 2025-03-11 - Bump MSRV to 1.70.0 diff --git a/svd-rs/src/derive_from.rs b/svd-rs/src/derive_from.rs index 9578852..eaef2e0 100644 --- a/svd-rs/src/derive_from.rs +++ b/svd-rs/src/derive_from.rs @@ -1,6 +1,12 @@ //! Implementations of DeriveFrom, setting non-explicit fields. use crate::{ - ClusterInfo, EnumeratedValues, FieldInfo, MaybeArray, PeripheralInfo, RegisterInfo, + ClusterInfo, + DimElement, + EnumeratedValues, + FieldInfo, + MaybeArray, + PeripheralInfo, + RegisterInfo, RegisterProperties, }; @@ -110,6 +116,24 @@ impl DeriveFrom for FieldInfo { } } +impl DeriveFrom for DimElement { + fn derive_from(&self, other: &Self) -> Self { + let Self { + dim: _, // mandatory + dim_increment: _, // mandatory + dim_index, + dim_name, + dim_array_index, + } = other; + + let mut derived = self.clone(); + derived.dim_index = derived.dim_index.or_else(|| dim_index.clone()); + derived.dim_name = derived.dim_name.or_else(|| dim_name.clone()); + derived.dim_array_index = derived.dim_array_index.or_else(|| dim_array_index.clone()); + derived + } +} + impl DeriveFrom for MaybeArray where T: DeriveFrom + crate::Name, @@ -128,9 +152,12 @@ where Self::Single(info.derive_from(other_info)) } } - (Self::Array(info, dim), Self::Single(other_info) | Self::Array(other_info, _)) => { + (Self::Array(info, dim), Self::Single(other_info)) => { Self::Array(info.derive_from(other_info), dim.clone()) } + (Self::Array(info, dim), Self::Array(other_info, other_dim)) => { + Self::Array(info.derive_from(other_info), dim.derive_from(other_dim)) + } } } }