From b7346a8c8e7038deaa03419c8c8277962f5f37ea Mon Sep 17 00:00:00 2001 From: jcamiel Date: Mon, 27 Nov 2023 16:05:45 +0100 Subject: [PATCH] Implement copy on jsonpath::Pos. --- .../hurl/src/jsonpath/parser/combinators.rs | 6 ++--- packages/hurl/src/jsonpath/parser/mod.rs | 2 +- packages/hurl/src/jsonpath/parser/parse.rs | 24 +++++++++---------- .../hurl/src/jsonpath/parser/primitives.rs | 16 ++++++------- packages/hurl/src/jsonpath/parser/reader.rs | 2 +- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/hurl/src/jsonpath/parser/combinators.rs b/packages/hurl/src/jsonpath/parser/combinators.rs index b1fda0b89..d69abc60b 100644 --- a/packages/hurl/src/jsonpath/parser/combinators.rs +++ b/packages/hurl/src/jsonpath/parser/combinators.rs @@ -20,11 +20,11 @@ use super::reader::Reader; use super::{ParseFunc, ParseResult}; pub fn zero_or_more(f: ParseFunc, p: &mut Reader) -> ParseResult> { - let _start = p.state.clone(); + let _start = p.state; let mut v: Vec = Vec::new(); loop { - let initial_state = p.state.clone(); + let initial_state = p.state; if p.is_eof() { return Ok(v); } @@ -50,7 +50,7 @@ pub fn zero_or_more(f: ParseFunc, p: &mut Reader) -> ParseResult> { /// Typically this should be recoverable pub fn choice(fs: &[ParseFunc], reader: &mut Reader) -> ParseResult { for (pos, f) in fs.iter().enumerate() { - let start = reader.state.clone(); + let start = reader.state; if pos == fs.len() - 1 { return f(reader); } diff --git a/packages/hurl/src/jsonpath/parser/mod.rs b/packages/hurl/src/jsonpath/parser/mod.rs index 477c8393f..172a30139 100644 --- a/packages/hurl/src/jsonpath/parser/mod.rs +++ b/packages/hurl/src/jsonpath/parser/mod.rs @@ -19,7 +19,7 @@ use error::Error; use reader::Reader; -#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] pub struct Pos { pub line: usize, pub column: usize, diff --git a/packages/hurl/src/jsonpath/parser/parse.rs b/packages/hurl/src/jsonpath/parser/parse.rs index cff55f900..bc9eb5bf8 100644 --- a/packages/hurl/src/jsonpath/parser/parse.rs +++ b/packages/hurl/src/jsonpath/parser/parse.rs @@ -33,7 +33,7 @@ fn query(reader: &mut Reader) -> ParseResult { let selectors = zero_or_more(selector, reader)?; if !reader.is_eof() { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: "eof".to_string(), @@ -61,7 +61,7 @@ fn selector(reader: &mut Reader) -> ParseResult { } fn selector_array_index_or_array_indices(reader: &mut Reader) -> Result { - let initial_state = reader.state.clone(); + let initial_state = reader.state; try_left_bracket(reader)?; let mut indexes = vec![]; let i = match natural(reader) { @@ -76,7 +76,7 @@ fn selector_array_index_or_array_indices(reader: &mut Reader) -> Result { @@ -99,7 +99,7 @@ fn selector_array_index_or_array_indices(reader: &mut Reader) -> Result Result { fn selector_array_slice(reader: &mut Reader) -> Result { try_left_bracket(reader)?; - let state = reader.state.clone(); + let state = reader.state; let start = match integer(reader) { Err(_) => { - reader.state = state.clone(); + reader.state = state; None } Ok(v) => Some(v), @@ -138,7 +138,7 @@ fn selector_array_slice(reader: &mut Reader) -> Result { }, }); }; - let state = reader.state.clone(); + let state = reader.state; let end = match integer(reader) { Err(_) => { reader.state = state; @@ -162,7 +162,7 @@ fn selector_object_key_bracket(reader: &mut Reader) -> Result { try_left_bracket(reader)?; match string_value(reader) { Err(_) => Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: true, inner: ParseError::Expecting { value: "value string".to_string(), @@ -178,7 +178,7 @@ fn selector_object_key_bracket(reader: &mut Reader) -> Result { fn selector_object_key(reader: &mut Reader) -> Result { if !reader.try_literal(".") { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: true, inner: ParseError::Expecting { value: "[ or .".to_string(), @@ -189,7 +189,7 @@ fn selector_object_key(reader: &mut Reader) -> Result { let s = reader.read_while(|c| c.is_alphanumeric() || *c == '_' || *c == '-'); if s.is_empty() { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: "empty value".to_string(), @@ -216,7 +216,7 @@ fn selector_recursive_key(reader: &mut Reader) -> Result { } fn try_left_bracket(reader: &mut Reader) -> Result<(), Error> { - let start = reader.state.clone(); + let start = reader.state; if literal(".[", reader).is_err() { reader.state = start; try_literal("[", reader)?; @@ -236,7 +236,7 @@ fn predicate(reader: &mut Reader) -> ParseResult { // @.key>=value GreaterThanOrEqual(Key, Value) literal("@.", reader)?; // assume key value for the time being let key = key_path(reader)?; - let state = reader.state.clone(); + let state = reader.state; let func = match predicate_func(reader) { Ok(f) => f, Err(_) => { diff --git a/packages/hurl/src/jsonpath/parser/primitives.rs b/packages/hurl/src/jsonpath/parser/primitives.rs index e44e3d3f4..c7990f4ab 100644 --- a/packages/hurl/src/jsonpath/parser/primitives.rs +++ b/packages/hurl/src/jsonpath/parser/primitives.rs @@ -20,7 +20,7 @@ use super::error::{Error, ParseError}; use super::{ParseResult, Reader}; pub fn natural(reader: &mut Reader) -> ParseResult { - let start = reader.state.clone(); + let start = reader.state; if reader.is_eof() { return Err(Error { @@ -42,7 +42,7 @@ pub fn natural(reader: &mut Reader) -> ParseResult { }); } - let save = reader.state.clone(); + let save = reader.state; let s = reader.read_while(|c| c.is_ascii_digit()); // if the first digit is zero, you should not have any more digits @@ -103,7 +103,7 @@ pub fn string_value(reader: &mut Reader) -> Result { match reader.read() { None => { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: String::from("'"), @@ -119,7 +119,7 @@ pub fn string_value(reader: &mut Reader) -> Result { } _ => { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: String::from("'"), @@ -148,7 +148,7 @@ pub fn key_name(reader: &mut Reader) -> Result { c } else { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: "key".to_string(), @@ -158,7 +158,7 @@ pub fn key_name(reader: &mut Reader) -> Result { } None => { return Err(Error { - pos: reader.state.pos.clone(), + pos: reader.state.pos, recoverable: false, inner: ParseError::Expecting { value: "key".to_string(), @@ -187,7 +187,7 @@ pub fn literal(s: &str, reader: &mut Reader) -> ParseResult<()> { // does not return a value // non recoverable reader // => use combinator recover to make it recoverable - let start = reader.state.clone(); + let start = reader.state; if reader.clone().is_eof() { return Err(Error { pos: start.pos, @@ -198,7 +198,7 @@ pub fn literal(s: &str, reader: &mut Reader) -> ParseResult<()> { }); } for c in s.chars() { - let _state = reader.state.clone(); + let _state = reader.state; match reader.read() { None => { return Err(Error { diff --git a/packages/hurl/src/jsonpath/parser/reader.rs b/packages/hurl/src/jsonpath/parser/reader.rs index 56def3a4b..efdda3ba6 100644 --- a/packages/hurl/src/jsonpath/parser/reader.rs +++ b/packages/hurl/src/jsonpath/parser/reader.rs @@ -26,7 +26,7 @@ pub struct Reader { pub state: ReaderState, } -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct ReaderState { pub cursor: usize, pub pos: Pos,