Simplify Error Handling.
This commit is contained in:
parent
ba22a69d96
commit
4c949a455d
1 changed files with 21 additions and 29 deletions
|
@ -197,23 +197,16 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
|
||||||
// @has <path> <jsonpath> = check path exists
|
// @has <path> <jsonpath> = check path exists
|
||||||
2 => {
|
2 => {
|
||||||
let val = cache.get_value(&command.args[0])?;
|
let val = cache.get_value(&command.args[0])?;
|
||||||
|
let results = select(&val, &command.args[1]).unwrap();
|
||||||
match select(&val, &command.args[1]) {
|
!results.is_empty()
|
||||||
Ok(results) => !results.is_empty(),
|
|
||||||
Err(_) => false,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// @has <path> <jsonpath> <value> = check *any* item matched by path equals value
|
// @has <path> <jsonpath> <value> = check *any* item matched by path equals value
|
||||||
3 => {
|
3 => {
|
||||||
let val = cache.get_value(&command.args[0])?;
|
let val = cache.get_value(&command.args[0])?;
|
||||||
match select(&val, &command.args[1]) {
|
let results = select(&val, &command.args[1]).unwrap();
|
||||||
Ok(results) => {
|
|
||||||
let pat = string_to_value(&command.args[2], cache);
|
let pat = string_to_value(&command.args[2], cache);
|
||||||
results.contains(&pat.as_ref())
|
results.contains(&pat.as_ref())
|
||||||
}
|
}
|
||||||
Err(_) => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,38 +216,37 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
|
||||||
let expected: usize = command.args[2].parse().unwrap();
|
let expected: usize = command.args[2].parse().unwrap();
|
||||||
|
|
||||||
let val = cache.get_value(&command.args[0])?;
|
let val = cache.get_value(&command.args[0])?;
|
||||||
match select(&val, &command.args[1]) {
|
let results = select(&val, &command.args[1]).unwrap();
|
||||||
Ok(results) => results.len() == expected,
|
results.len() == expected
|
||||||
Err(_) => false,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CommandKind::Is => {
|
CommandKind::Is => {
|
||||||
// @has <path> <jsonpath> <value> = check *exactly one* item matched by path, and it equals value
|
// @has <path> <jsonpath> <value> = check *exactly one* item matched by path, and it equals value
|
||||||
assert_eq!(command.args.len(), 3);
|
assert_eq!(command.args.len(), 3);
|
||||||
let val = cache.get_value(&command.args[0])?;
|
let val = cache.get_value(&command.args[0])?;
|
||||||
match select(&val, &command.args[1]) {
|
let results = select(&val, &command.args[1]).unwrap();
|
||||||
Ok(results) => {
|
|
||||||
let pat = string_to_value(&command.args[2], cache);
|
let pat = string_to_value(&command.args[2], cache);
|
||||||
results.len() == 1 && results[0] == pat.as_ref()
|
results.len() == 1 && results[0] == pat.as_ref()
|
||||||
}
|
}
|
||||||
Err(_) => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// FIXME, Figure out semantics for @!set
|
|
||||||
CommandKind::Set => {
|
CommandKind::Set => {
|
||||||
// @set <name> = <path> <jsonpath>
|
// @set <name> = <path> <jsonpath>
|
||||||
assert_eq!(command.args.len(), 4);
|
assert_eq!(command.args.len(), 4);
|
||||||
assert_eq!(command.args[1], "=", "Expected an `=`");
|
assert_eq!(command.args[1], "=", "Expected an `=`");
|
||||||
let val = cache.get_value(&command.args[2])?;
|
let val = cache.get_value(&command.args[2])?;
|
||||||
|
let results = select(&val, &command.args[3]).unwrap();
|
||||||
match select(&val, &command.args[3]) {
|
|
||||||
Ok(results) => {
|
|
||||||
assert_eq!(results.len(), 1);
|
assert_eq!(results.len(), 1);
|
||||||
|
match results.len() {
|
||||||
|
0 => false,
|
||||||
|
1 => {
|
||||||
let r = cache.variables.insert(command.args[0].clone(), results[0].clone());
|
let r = cache.variables.insert(command.args[0].clone(), results[0].clone());
|
||||||
assert!(r.is_none(), "Name collision: {} is duplicated", command.args[0]);
|
assert!(r.is_none(), "Name collision: {} is duplicated", command.args[0]);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
Err(_) => false,
|
_ => {
|
||||||
|
panic!(
|
||||||
|
"Got multiple results in `@set` for `{}`: {:?}",
|
||||||
|
&command.args[3], results
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue