"rustc-std-workspace-core",
]
+[[package]]
+name = "fs-err"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcd1163ae48bda72a20ae26d66a04d3094135cadab911cff418ae5e33f253431"
+
[[package]]
name = "fs_extra"
version = "1.1.0"
name = "jsondocck"
version = "0.1.0"
dependencies = [
+ "fs-err",
"getopts",
"jsonpath_lib",
"lazy_static",
use crate::error::CkError;
use serde_json::Value;
use std::collections::HashMap;
+use std::io;
use std::path::{Path, PathBuf};
-use std::{fs, io};
+
+use fs_err as fs;
#[derive(Debug)]
pub struct Cache {
self.last_path = Some(resolve.clone());
resolve
} else {
- self.last_path.as_ref().unwrap().clone()
+ self.last_path
+ .as_ref()
+ // FIXME: Point to a line number
+ .expect("No last path set. Make sure to specify a full path before using `-`")
+ .clone()
}
}
let val = cache.get_value(&command.args[0])?;
let results = select(&val, &command.args[1]).unwrap();
let pat = string_to_value(&command.args[2], cache);
- results.len() == 1 && results[0] == pat.as_ref()
+ let is = results.len() == 1 && results[0] == pat.as_ref();
+ if !command.negated && !is {
+ return Err(CkError::FailedCheck(
+ format!(
+ "{} matched to {:?}, but expected {:?}",
+ &command.args[1],
+ results,
+ pat.as_ref()
+ ),
+ command,
+ ));
+ } else {
+ is
+ }
}
CommandKind::Set => {
// @set <name> = <path> <jsonpath>
fn string_to_value<'a>(s: &str, cache: &'a Cache) -> Cow<'a, Value> {
if s.starts_with("$") {
- Cow::Borrowed(&cache.variables[&s[1..]])
+ Cow::Borrowed(&cache.variables.get(&s[1..]).unwrap_or_else(|| {
+ // FIXME(adotinthevoid): Show line number
+ panic!("No variable: `{}`. Current state: `{:?}`", &s[1..], cache.variables)
+ }))
} else {
Cow::Owned(serde_json::from_str(s).unwrap())
}