Skip to content

Commit 9612843

Browse files
Michael MileusnichMichael Mileusnich
authored andcommitted
removed some clones
1 parent 59dc66e commit 9612843

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

src/variable_versions/ipfix.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,15 @@ pub struct Set {
100100
#[derive(Debug, PartialEq, Clone, Serialize, Nom)]
101101
#[nom(ExtraArgs(parser: &mut IPFixParser, set_id: u16))]
102102
pub struct Data {
103-
#[nom(
104-
Parse = "{ |i| parse_fields::<Template>(i, parser.templates.get(&set_id).cloned()) }"
105-
)]
103+
#[nom(Parse = "{ |i| parse_fields::<Template>(i, parser.templates.get(&set_id)) }")]
106104
pub data_fields: Vec<BTreeMap<IPFixField, FieldValue>>,
107105
}
108106

109107
#[derive(Debug, PartialEq, Clone, Serialize, Nom)]
110108
#[nom(ExtraArgs(parser: &mut IPFixParser, set_id: u16))]
111109
pub struct OptionsData {
112110
#[nom(
113-
Parse = "{ |i| parse_fields::<OptionsTemplate>(i, parser.options_templates.get(&set_id).cloned()) }"
111+
Parse = "{ |i| parse_fields::<OptionsTemplate>(i, parser.options_templates.get(&set_id)) }"
114112
)]
115113
pub data_fields: Vec<BTreeMap<IPFixField, FieldValue>>,
116114
}
@@ -209,27 +207,28 @@ impl CommonTemplateFields for OptionsTemplate {
209207
/// Takes a byte stream and a cached template.
210208
/// Fields get matched to static types.
211209
/// Returns BTree of IPFix Types & Fields or IResult Error.
212-
fn parse_fields<T: CommonTemplateFields>(
213-
i: &[u8],
214-
template: Option<T>,
215-
) -> IResult<&[u8], Vec<BTreeMap<IPFixField, FieldValue>>> {
210+
fn parse_fields<'a, T: CommonTemplateFields>(
211+
i: &'a [u8],
212+
template: Option<&T>,
213+
) -> IResult<&'a [u8], Vec<BTreeMap<IPFixField, FieldValue>>> {
216214
let template = match template {
217215
Some(t) => t,
218216
None => {
219217
// dbg!("Could not fetch any v10 templates!");
220218
return Err(NomErr::Error(NomError::new(i, ErrorKind::Fail)));
221219
}
222220
};
221+
let template_fields = template.get_fields();
223222
// If no fields there are no fields to parse
224-
if template.get_fields().is_empty() {
223+
if template_fields.is_empty() {
225224
// dbg!("Template without fields!");
226225
return Err(NomErr::Error(NomError::new(i, ErrorKind::Fail)));
227226
};
228227
let mut fields = vec![];
229228
let mut remaining = i;
230229
while !remaining.is_empty() {
231230
let mut data_field = BTreeMap::new();
232-
for template_field in template.get_fields().iter() {
231+
for template_field in template_fields.iter() {
233232
let field_type: FieldDataType = template_field.field_type.into();
234233
// Enterprise Number
235234
if template_field.enterprise_number.is_some() {
@@ -349,7 +348,7 @@ impl NetflowByteParserVariable for IPFixParser {
349348
.checked_sub(remaining.len())
350349
.unwrap_or(total_left);
351350
total_left -= parsed;
352-
sets.push(v10_set.clone());
351+
sets.push(v10_set);
353352
}
354353

355354
let v10_parsed = IPFix {

src/variable_versions/v9.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ fn get_total_options_length(flow_set_id: u16, length: u16, parser: &mut V9Parser
276276
}
277277

278278
#[derive(Debug, PartialEq, Clone, Serialize, Nom)]
279-
#[nom(ExtraArgs(field: OptionsTemplateScopeField))]
279+
#[nom(ExtraArgs(field: &OptionsTemplateScopeField))]
280280
pub struct ScopeDataField {
281281
/// System
282282
#[nom(
@@ -328,23 +328,23 @@ pub struct Data {
328328
/// themselves, as well as the combined lengths of any included data records.
329329
pub length: u16,
330330
// Data Fields
331-
#[nom(Parse = "{ |i| parse_fields(i, parser.templates.get(&flow_set_id).cloned()) }")]
331+
#[nom(Parse = "{ |i| parse_fields(i, parser.templates.get(&flow_set_id)) }")]
332332
pub data_fields: Vec<BTreeMap<V9Field, FieldValue>>,
333333
}
334334

335335
#[derive(Debug, PartialEq, Clone, Serialize, Nom)]
336-
#[nom(ExtraArgs(field: TemplateField))]
336+
#[nom(ExtraArgs(field: &TemplateField))]
337337
pub struct OptionDataField {
338338
#[nom(Value(field.field_type))]
339339
pub field_type: V9Field,
340340
#[nom(Map = "|i: &[u8]| i.to_vec()", Take = "field.field_length")]
341341
pub field_value: Vec<u8>,
342342
}
343343

344-
fn parse_fields(
345-
i: &[u8],
346-
template: Option<Template>,
347-
) -> IResult<&[u8], Vec<BTreeMap<V9Field, FieldValue>>> {
344+
fn parse_fields<'a>(
345+
i: &'a [u8],
346+
template: Option<&Template>,
347+
) -> IResult<&'a [u8], Vec<BTreeMap<V9Field, FieldValue>>> {
348348
let template = match template {
349349
Some(t) => t,
350350
None => {
@@ -457,7 +457,7 @@ fn parse_options_data_fields(
457457
let mut fields = vec![];
458458
let mut remaining = i;
459459
for field in template.option_fields.iter() {
460-
let (i, v9_data_field) = OptionDataField::parse(remaining, field.clone())?;
460+
let (i, v9_data_field) = OptionDataField::parse(remaining, field)?;
461461
remaining = i;
462462
fields.push(v9_data_field)
463463
}
@@ -476,7 +476,7 @@ fn parse_scope_data_fields(
476476
let mut fields = vec![];
477477
let mut remaining = i;
478478
for field in template.scope_fields.iter() {
479-
let (i, v9_data_field) = ScopeDataField::parse(remaining, field.clone())?;
479+
let (i, v9_data_field) = ScopeDataField::parse(remaining, field)?;
480480
remaining = i;
481481
fields.push(v9_data_field)
482482
}

0 commit comments

Comments
 (0)