From 0a862a7e5f38e1455c80fc937ce53e635082dabd Mon Sep 17 00:00:00 2001 From: Alain Emilia Anna Zscheile Date: Mon, 2 Dec 2024 22:58:37 +0100 Subject: [PATCH] refactor(specctra/structure): get rid of code duplication in Vec --- src/specctra/structure.rs | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/specctra/structure.rs b/src/specctra/structure.rs index cc56ebb..40cce8c 100644 --- a/src/specctra/structure.rs +++ b/src/specctra/structure.rs @@ -395,19 +395,9 @@ pub struct Point { // Custom impl for the case described above impl ReadDsn for Vec { fn read_dsn(tokenizer: &mut ListTokenizer) -> Result { - let mut array = Vec::::new(); - loop { - let input = tokenizer.consume_token()?; - if let ListToken::Leaf { value: ref x } = input.token { - let x = x - .parse::() - .map_err(|_| ParseError::Expected("f64").add_context(input.context))?; - let y = tokenizer.read_value::()?; - array.push(Point { x, y }); - } else { - tokenizer.return_token(input); - break; - } + let mut array = Vec::new(); + while let Some(x) = tokenizer.read_value::>()? { + array.push(x); } Ok(array) } @@ -416,16 +406,16 @@ impl ReadDsn for Vec { impl ReadDsn for Option { fn read_dsn(tokenizer: &mut ListTokenizer) -> Result { let input = tokenizer.consume_token()?; - if let ListToken::Leaf { value: ref x } = input.token { + Ok(if let ListToken::Leaf { value: ref x } = input.token { let x = x .parse::() .map_err(|_| ParseError::Expected("f64").add_context(input.context))?; let y = tokenizer.read_value::()?; - Ok(Some(Point { x, y })) + Some(Point { x, y }) } else { tokenizer.return_token(input); - Ok(None) - } + None + }) } }