Skip to content

Commit 8462718

Browse files
committed
remove unnedded fields clone
1 parent 4bf881f commit 8462718

File tree

2 files changed

+29
-40
lines changed

2 files changed

+29
-40
lines changed

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ quote = "1.0"
4545
proc-macro2 = "1.0"
4646
anyhow = "1.0"
4747
thiserror = "1.0"
48-
serde_json = "1.0.75"
48+
serde_json = "1.0.79"
4949
serde_yaml = "0.8.23"
5050

5151
[dependencies.svd-parser]
5252
features = ["derive-from"]
53-
version = "0.13.1"
53+
version = "0.13.2"
5454

5555
[dependencies.svd-rs]
5656
features = ["serde"]
57-
version = "0.13.1"
57+
version = "0.13.2"
5858

5959
[dependencies.syn]
6060
version = "1.0"

src/generate/register.rs

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,8 @@ pub fn render(
124124
if let Some(cur_fields) = register.fields.as_ref() {
125125
// filter out all reserved fields, as we should not generate code for
126126
// them
127-
let cur_fields: Vec<Field> = cur_fields
128-
.clone()
129-
.into_iter()
127+
let cur_fields: Vec<&Field> = cur_fields
128+
.iter()
130129
.filter(|field| field.name.to_lowercase() != "reserved")
131130
.collect();
132131

@@ -285,8 +284,8 @@ pub fn render(
285284

286285
#[allow(clippy::too_many_arguments)]
287286
pub fn fields(
288-
fields: &[Field],
289-
parent: &Register,
287+
fields: &[&Field],
288+
register: &Register,
290289
all_registers: &[&Register],
291290
peripheral: &Peripheral,
292291
all_peripherals: &[Peripheral],
@@ -335,7 +334,7 @@ pub fn fields(
335334
let lookup_results = lookup(
336335
evs,
337336
fields,
338-
parent,
337+
register,
339338
all_registers,
340339
peripheral,
341340
all_peripherals,
@@ -1083,7 +1082,7 @@ pub struct Base<'a> {
10831082

10841083
fn lookup<'a>(
10851084
evs: &'a [EnumeratedValues],
1086-
fields: &'a [Field],
1085+
fields: &'a [&'a Field],
10871086
register: &'a Register,
10881087
all_registers: &'a [&'a Register],
10891088
peripheral: &'a Peripheral,
@@ -1149,7 +1148,7 @@ fn lookup_filter<'a>(
11491148
fn lookup_in_fields<'f>(
11501149
base_evs: &str,
11511150
base_field: &str,
1152-
fields: &'f [Field],
1151+
fields: &'f [&'f Field],
11531152
register: &Register,
11541153
) -> Result<(&'f EnumeratedValues, Option<Base<'f>>)> {
11551154
if let Some(base_field) = fields.iter().find(|f| f.name == base_field) {
@@ -1172,13 +1171,7 @@ fn lookup_in_peripheral<'p>(
11721171
peripheral: &'p Peripheral,
11731172
) -> Result<(&'p EnumeratedValues, Option<Base<'p>>)> {
11741173
if let Some(register) = all_registers.iter().find(|r| r.name == base_register) {
1175-
if let Some(field) = register
1176-
.fields
1177-
.as_deref()
1178-
.unwrap_or(&[])
1179-
.iter()
1180-
.find(|f| f.name == base_field)
1181-
{
1174+
if let Some(field) = register.get_field(base_field) {
11821175
lookup_in_field(base_evs, Some(base_register), base_peripheral, field)
11831176
} else {
11841177
Err(anyhow!(
@@ -1228,7 +1221,7 @@ fn lookup_in_register<'r>(
12281221
) -> Result<(&'r EnumeratedValues, Option<Base<'r>>)> {
12291222
let mut matches = vec![];
12301223

1231-
for f in register.fields.as_deref().unwrap_or(&[]) {
1224+
for f in register.fields() {
12321225
if let Some(evs) = f
12331226
.enumerated_values
12341227
.iter()
@@ -1238,31 +1231,27 @@ fn lookup_in_register<'r>(
12381231
}
12391232
}
12401233

1241-
match matches.first() {
1242-
None => Err(anyhow!(
1234+
match &matches[..] {
1235+
[] => Err(anyhow!(
12431236
"EnumeratedValues {} not found in register {}",
12441237
base_evs,
12451238
register.name
12461239
)),
1247-
Some(&(evs, field)) => {
1248-
if matches.len() == 1 {
1249-
Ok((
1250-
evs,
1251-
Some(Base {
1252-
field,
1253-
register: None,
1254-
peripheral: None,
1255-
}),
1256-
))
1257-
} else {
1258-
let fields = matches.iter().map(|(f, _)| &f.name).collect::<Vec<_>>();
1259-
Err(anyhow!(
1260-
"Fields {:?} have an \
1261-
enumeratedValues named {}",
1262-
fields,
1263-
base_evs
1264-
))
1265-
}
1240+
[(evs, field)] => Ok((
1241+
evs,
1242+
Some(Base {
1243+
field,
1244+
register: None,
1245+
peripheral: None,
1246+
}),
1247+
)),
1248+
matches => {
1249+
let fields = matches.iter().map(|(f, _)| &f.name).collect::<Vec<_>>();
1250+
Err(anyhow!(
1251+
"Fields {:?} have an enumeratedValues named {}",
1252+
fields,
1253+
base_evs
1254+
))
12661255
}
12671256
}
12681257
}

0 commit comments

Comments
 (0)