mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-06-22 20:31:37 +00:00
re-indent
This commit is contained in:
@ -247,73 +247,62 @@ impl<'a> ExprTerm<'a> {
|
|||||||
_ => ExprTerm::Bool(cmp_fn.default())
|
_ => ExprTerm::Bool(cmp_fn.default())
|
||||||
}
|
}
|
||||||
ExprTerm::Json(fk1, vec1) if other.is_string() => {
|
ExprTerm::Json(fk1, vec1) if other.is_string() => {
|
||||||
match &other {
|
let s2 = if let ExprTerm::String(s2) = &other { s2 } else { unreachable!() };
|
||||||
ExprTerm::String(s2) => {
|
|
||||||
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
|
||||||
match v1 {
|
|
||||||
Value::String(s1) => cmp_fn.cmp_string(s1, s2),
|
|
||||||
Value::Object(map1) => {
|
|
||||||
if let Some(FilterKey::String(k)) = fk1 {
|
|
||||||
if let Some(Value::String(s1)) = map1.get(k) {
|
|
||||||
return cmp_fn.cmp_string(s1, s2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmp_fn.default()
|
|
||||||
}
|
|
||||||
_ => cmp_fn.default()
|
|
||||||
}
|
|
||||||
}).map(|v| *v).collect();
|
|
||||||
|
|
||||||
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
||||||
|
match v1 {
|
||||||
|
Value::String(s1) => cmp_fn.cmp_string(s1, s2),
|
||||||
|
Value::Object(map1) => {
|
||||||
|
if let Some(FilterKey::String(k)) = fk1 {
|
||||||
|
if let Some(Value::String(s1)) = map1.get(k) {
|
||||||
|
return cmp_fn.cmp_string(s1, s2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cmp_fn.default()
|
||||||
|
}
|
||||||
|
_ => cmp_fn.default()
|
||||||
}
|
}
|
||||||
_ => unreachable!()
|
}).map(|v| *v).collect();
|
||||||
}
|
|
||||||
|
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
||||||
}
|
}
|
||||||
ExprTerm::Json(fk1, vec1) if other.is_number() => {
|
ExprTerm::Json(fk1, vec1) if other.is_number() => {
|
||||||
match &other {
|
let n2 = if let ExprTerm::Number(n2) = &other { n2 } else { unreachable!() };
|
||||||
ExprTerm::Number(n2) => {
|
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
||||||
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
match v1 {
|
||||||
match v1 {
|
Value::Number(n1) => cmp_fn.cmp_f64(&to_f64(n1), &to_f64(n2)),
|
||||||
Value::Number(n1) => cmp_fn.cmp_f64(&to_f64(n1), &to_f64(n2)),
|
Value::Object(map1) => {
|
||||||
Value::Object(map1) => {
|
if let Some(FilterKey::String(k)) = fk1 {
|
||||||
if let Some(FilterKey::String(k)) = fk1 {
|
if let Some(Value::Number(n1)) = map1.get(k) {
|
||||||
if let Some(Value::Number(n1)) = map1.get(k) {
|
return cmp_fn.cmp_f64(&to_f64(n1), &to_f64(n2));
|
||||||
return cmp_fn.cmp_f64(&to_f64(n1), &to_f64(n2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmp_fn.default()
|
|
||||||
}
|
}
|
||||||
_ => cmp_fn.default()
|
|
||||||
}
|
}
|
||||||
}).map(|v| *v).collect();
|
cmp_fn.default()
|
||||||
|
}
|
||||||
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
_ => cmp_fn.default()
|
||||||
}
|
}
|
||||||
_ => unreachable!()
|
}).map(|v| *v).collect();
|
||||||
}
|
|
||||||
|
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
||||||
}
|
}
|
||||||
ExprTerm::Json(fk1, vec1) if other.is_bool() => {
|
ExprTerm::Json(fk1, vec1) if other.is_bool() => {
|
||||||
match &other {
|
let b2 = if let ExprTerm::Bool(b2) = &other { b2 } else { unreachable!() };
|
||||||
ExprTerm::Bool(b2) => {
|
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
||||||
let ret: Vec<&Value> = vec1.iter().filter(|v1| {
|
match v1 {
|
||||||
match v1 {
|
Value::Bool(b1) => cmp_fn.cmp_bool(b1, b2),
|
||||||
Value::Bool(b1) => cmp_fn.cmp_bool(b1, b2),
|
Value::Object(map1) => {
|
||||||
Value::Object(map1) => {
|
if let Some(FilterKey::String(k)) = fk1 {
|
||||||
if let Some(FilterKey::String(k)) = fk1 {
|
if let Some(Value::Bool(b1)) = map1.get(k) {
|
||||||
if let Some(Value::Bool(b1)) = map1.get(k) {
|
return cmp_fn.cmp_bool(b1, b2);
|
||||||
return cmp_fn.cmp_bool(b1, b2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cmp_fn.default()
|
|
||||||
}
|
}
|
||||||
_ => cmp_fn.default()
|
|
||||||
}
|
}
|
||||||
}).map(|v| *v).collect();
|
cmp_fn.default()
|
||||||
|
}
|
||||||
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
_ => cmp_fn.default()
|
||||||
}
|
}
|
||||||
_ => unreachable!()
|
}).map(|v| *v).collect();
|
||||||
}
|
|
||||||
|
if ret.is_empty() { ExprTerm::Bool(cmp_fn.default()) } else { ExprTerm::Json(None, ret) }
|
||||||
}
|
}
|
||||||
ExprTerm::Json(_, vec1) if other.is_json() => {
|
ExprTerm::Json(_, vec1) if other.is_json() => {
|
||||||
match &other {
|
match &other {
|
||||||
@ -395,23 +384,19 @@ impl<'a> ExprTerm<'a> {
|
|||||||
|
|
||||||
fn walk_all_with_str<'a>(vec: &Vec<&'a Value>, tmp: &mut Vec<&'a Value>, key: &str, is_filter: bool) {
|
fn walk_all_with_str<'a>(vec: &Vec<&'a Value>, tmp: &mut Vec<&'a Value>, key: &str, is_filter: bool) {
|
||||||
if is_filter {
|
if is_filter {
|
||||||
walk(vec, tmp, &|v| {
|
walk(vec, tmp, &|v| match v {
|
||||||
match v {
|
Value::Object(map) if map.contains_key(key) => {
|
||||||
Value::Object(map) if map.contains_key(key) => {
|
Some(vec![v])
|
||||||
Some(vec![v])
|
|
||||||
}
|
|
||||||
_ => None
|
|
||||||
}
|
}
|
||||||
|
_ => None
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
walk(vec, tmp, &|v| {
|
walk(vec, tmp, &|v| match v {
|
||||||
match v {
|
Value::Object(map) => match map.get(key) {
|
||||||
Value::Object(map) => match map.get(key) {
|
Some(v) => Some(vec![v]),
|
||||||
Some(v) => Some(vec![v]),
|
|
||||||
_ => None
|
|
||||||
}
|
|
||||||
_ => None
|
_ => None
|
||||||
}
|
}
|
||||||
|
_ => None
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -584,31 +569,29 @@ impl<'a> Selector<'a> {
|
|||||||
|
|
||||||
fn in_filter<F: Fn(&Vec<&'a Value>, &mut Vec<&'a Value>) -> FilterKey>(&mut self, fun: F) {
|
fn in_filter<F: Fn(&Vec<&'a Value>, &mut Vec<&'a Value>) -> FilterKey>(&mut self, fun: F) {
|
||||||
match self.terms.pop() {
|
match self.terms.pop() {
|
||||||
Some(peek) => {
|
Some(peek) => match peek {
|
||||||
match peek {
|
Some(v) => {
|
||||||
Some(v) => {
|
debug!("in_filter 1.: {:?}", v);
|
||||||
debug!("in_filter 1.: {:?}", v);
|
|
||||||
|
|
||||||
match v {
|
match v {
|
||||||
ExprTerm::Json(_, vec) => {
|
ExprTerm::Json(_, vec) => {
|
||||||
let mut tmp = Vec::new();
|
|
||||||
let filter_key = fun(&vec, &mut tmp);
|
|
||||||
self.terms.push(Some(ExprTerm::Json(Some(filter_key), tmp)));
|
|
||||||
}
|
|
||||||
_ => unreachable!()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
_ => {
|
|
||||||
debug!("in_filter 2.: {:?}", &self.current);
|
|
||||||
|
|
||||||
if let Some(current) = &self.current {
|
|
||||||
let mut tmp = Vec::new();
|
let mut tmp = Vec::new();
|
||||||
let filter_key = fun(current, &mut tmp);
|
let filter_key = fun(&vec, &mut tmp);
|
||||||
self.terms.push(Some(ExprTerm::Json(Some(filter_key), tmp)));
|
self.terms.push(Some(ExprTerm::Json(Some(filter_key), tmp)));
|
||||||
}
|
}
|
||||||
|
_ => unreachable!()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
debug!("in_filter 2.: {:?}", &self.current);
|
||||||
|
|
||||||
|
if let Some(current) = &self.current {
|
||||||
|
let mut tmp = Vec::new();
|
||||||
|
let filter_key = fun(current, &mut tmp);
|
||||||
|
self.terms.push(Some(ExprTerm::Json(Some(filter_key), tmp)));
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -922,8 +905,8 @@ impl<'a> NodeVisitor for Selector<'a> {
|
|||||||
|
|
||||||
if let Some(ParseToken::Array) = self.tokens.pop() {
|
if let Some(ParseToken::Array) = self.tokens.pop() {
|
||||||
let mut tmp = Vec::new();
|
let mut tmp = Vec::new();
|
||||||
for vec in &self.current {
|
if let Some(current) = &self.current {
|
||||||
for v in vec {
|
for v in current {
|
||||||
if let Value::Array(vec) = v {
|
if let Value::Array(vec) = v {
|
||||||
let from = if let Some(from) = from {
|
let from = if let Some(from) = from {
|
||||||
abs_index(from, vec.len())
|
abs_index(from, vec.len())
|
||||||
@ -945,7 +928,6 @@ impl<'a> NodeVisitor for Selector<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.current = Some(tmp);
|
self.current = Some(tmp);
|
||||||
} else {
|
} else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
@ -958,8 +940,8 @@ impl<'a> NodeVisitor for Selector<'a> {
|
|||||||
|
|
||||||
if let Some(ParseToken::Array) = self.tokens.pop() {
|
if let Some(ParseToken::Array) = self.tokens.pop() {
|
||||||
let mut tmp = Vec::new();
|
let mut tmp = Vec::new();
|
||||||
for vec in &self.current {
|
if let Some(current) = &self.current {
|
||||||
for v in vec {
|
for v in current {
|
||||||
if let Value::Array(vec) = v {
|
if let Value::Array(vec) = v {
|
||||||
for i in indices {
|
for i in indices {
|
||||||
if let Some(v) = vec.get(abs_index(i, vec.len())) {
|
if let Some(v) = vec.get(abs_index(i, vec.len())) {
|
||||||
@ -982,20 +964,15 @@ impl<'a> NodeVisitor for Selector<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait Modifiable {
|
||||||
|
fn delete_from_selected(&mut self, value: &mut Value);
|
||||||
|
}
|
||||||
|
|
||||||
//pub trait Transform<'a> {
|
impl<'a> Modifiable for Selector<'a> {
|
||||||
// fn map<F>(&mut self, mut fun: F) -> &mut Self where F: FnMut(&'a mut Value);
|
fn delete_from_selected(&mut self, value: &mut Value) {
|
||||||
//}
|
match &self.current {
|
||||||
//
|
Some(current) => {}
|
||||||
//impl<'a> Transform<'a> for Selector<'a> {
|
_ => {}
|
||||||
// fn map<F>(&mut self, mut fun: F) -> &mut Self where F: FnMut(&'a mut Value) {
|
}
|
||||||
// match &mut self.current {
|
}
|
||||||
// Some(current) => {
|
}
|
||||||
// current.iter_mut().for_each(|ref mut v| fun(v))
|
|
||||||
// }
|
|
||||||
// _ => {}
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// self
|
|
||||||
// }
|
|
||||||
//}
|
|
Reference in New Issue
Block a user