Skip to content

Commit 63044d2

Browse files
committed
fix usage
1 parent 4d0c2dd commit 63044d2

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

svd-rs/CHANGELOG.md

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

88
## Unreleased
99

10+
- `EnumeratedValues.usage()` now return `None` if it is derived, fix bug in usage check
1011
- Use generic `SingleArray` enum for types which can be either collected into SVD arrays or have only one instance
1112
- `Name` trait for structures that has `name` field
1213
- improves in iterators

svd-rs/src/enumeratedvalues.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,12 @@ impl EnumeratedValues {
152152
Ok(())
153153
}
154154
/// Get the usage of these enumerated values.
155-
pub fn usage(&self) -> Usage {
156-
self.usage.unwrap_or_default()
155+
pub fn usage(&self) -> Option<Usage> {
156+
if self.derived_from.is_some() {
157+
None
158+
} else {
159+
Some(self.usage.unwrap_or_default())
160+
}
157161
}
158162

159163
/// Get `enumeratedValue` by name

svd-rs/src/fieldinfo.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,12 @@ impl FieldInfo {
295295
if lvl.is_strict() {
296296
match self.enumerated_values.as_slice() {
297297
[] | [_] => {}
298-
[ev1, ev2] if (ev1.usage() == Usage::Read && ev2.usage() == Usage::Write) => {}
299-
[ev1, ev2] if (ev2.usage() == Usage::Read && ev1.usage() == Usage::Write) => {}
298+
[ev1, ev2]
299+
if matches!(ev1.usage(), None | Some(Usage::Read))
300+
&& matches!(ev2.usage(), None | Some(Usage::Write)) => {}
301+
[ev1, ev2]
302+
if matches!(ev2.usage(), None | Some(Usage::Read))
303+
&& matches!(ev1.usage(), None | Some(Usage::Write)) => {}
300304
_ => return Err(Error::IncompatibleEnumeratedValues.into()),
301305
}
302306
}
@@ -325,7 +329,10 @@ impl FieldInfo {
325329
/// Get enumeratedValues cluster by usage
326330
pub fn get_enumerated_values(&self, usage: Usage) -> Option<&EnumeratedValues> {
327331
match self.enumerated_values.len() {
328-
1 | 2 => self.enumerated_values.iter().find(|ev| ev.usage() == usage),
332+
1 | 2 => self
333+
.enumerated_values
334+
.iter()
335+
.find(|ev| ev.usage() == Some(usage)),
329336
_ => None,
330337
}
331338
}
@@ -336,7 +343,7 @@ impl FieldInfo {
336343
1 | 2 => self
337344
.enumerated_values
338345
.iter_mut()
339-
.find(|ev| ev.usage() == usage),
346+
.find(|ev| ev.usage() == Some(usage)),
340347
_ => None,
341348
}
342349
}

0 commit comments

Comments
 (0)