mirror of
https://github.com/Orange-OpenSource/hurl.git
synced 2024-09-21 10:49:45 +03:00
Implement copy on jsonpath::Pos.
This commit is contained in:
parent
a8e7fe92ba
commit
b7346a8c8e
@ -20,11 +20,11 @@ use super::reader::Reader;
|
||||
use super::{ParseFunc, ParseResult};
|
||||
|
||||
pub fn zero_or_more<T>(f: ParseFunc<T>, p: &mut Reader) -> ParseResult<Vec<T>> {
|
||||
let _start = p.state.clone();
|
||||
let _start = p.state;
|
||||
|
||||
let mut v: Vec<T> = 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<T>(f: ParseFunc<T>, p: &mut Reader) -> ParseResult<Vec<T>> {
|
||||
/// Typically this should be recoverable
|
||||
pub fn choice<T>(fs: &[ParseFunc<T>], reader: &mut Reader) -> ParseResult<T> {
|
||||
for (pos, f) in fs.iter().enumerate() {
|
||||
let start = reader.state.clone();
|
||||
let start = reader.state;
|
||||
if pos == fs.len() - 1 {
|
||||
return f(reader);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -33,7 +33,7 @@ fn query(reader: &mut Reader) -> ParseResult<Query> {
|
||||
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<Selector> {
|
||||
}
|
||||
|
||||
fn selector_array_index_or_array_indices(reader: &mut Reader) -> Result<Selector, Error> {
|
||||
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<Selector
|
||||
};
|
||||
indexes.push(i);
|
||||
loop {
|
||||
let state = reader.state.clone();
|
||||
let state = reader.state;
|
||||
if try_literal(",", reader).is_ok() {
|
||||
let i = match natural(reader) {
|
||||
Err(e) => {
|
||||
@ -99,7 +99,7 @@ fn selector_array_index_or_array_indices(reader: &mut Reader) -> Result<Selector
|
||||
if let Err(e) = try_literal("]", reader) {
|
||||
reader.state = initial_state;
|
||||
return Err(Error {
|
||||
pos: reader.state.pos.clone(),
|
||||
pos: reader.state.pos,
|
||||
recoverable: true,
|
||||
inner: e.inner,
|
||||
});
|
||||
@ -121,10 +121,10 @@ fn selector_array_wildcard(reader: &mut Reader) -> Result<Selector, Error> {
|
||||
|
||||
fn selector_array_slice(reader: &mut Reader) -> Result<Selector, Error> {
|
||||
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<Selector, Error> {
|
||||
},
|
||||
});
|
||||
};
|
||||
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<Selector, Error> {
|
||||
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<Selector, Error> {
|
||||
fn selector_object_key(reader: &mut Reader) -> Result<Selector, Error> {
|
||||
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<Selector, Error> {
|
||||
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<Selector, Error> {
|
||||
}
|
||||
|
||||
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<Predicate> {
|
||||
// @.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(_) => {
|
||||
|
@ -20,7 +20,7 @@ use super::error::{Error, ParseError};
|
||||
use super::{ParseResult, Reader};
|
||||
|
||||
pub fn natural(reader: &mut Reader) -> ParseResult<usize> {
|
||||
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<usize> {
|
||||
});
|
||||
}
|
||||
|
||||
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<String, Error> {
|
||||
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<String, Error> {
|
||||
}
|
||||
_ => {
|
||||
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<String, Error> {
|
||||
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<String, Error> {
|
||||
}
|
||||
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 {
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user