use serde_json::Value; pub fn value_as_string(value: Option<&'_ Value>) -> String { value.unwrap_or(&Value::Null).to_string() } #[allow(unused)] pub fn assert_json_array_len(value: &Value, len: usize) { match value { Value::Array(array) => assert_eq!( len, array.len(), "wrong amount of parameters {} != {}", len, array.len() ), _ => unreachable!(), } } #[macro_export] macro_rules! assert_value { ($value:expr=> $( $path:literal = $expected:literal, $error:literal)* ) => {{ $( let p = &*format!("/{}", $path.replace(".", "/").replace("[", "").replace("]", "")); let actual = $crate::common::value_as_string(Some($value.pointer(p).unwrap_or(&serde_json::Value::Null))); assert_eq!(actual, $expected, "{}: {} expected to be: {} but was: {}", $error, $path, $expected, actual); )* }}; ($value:expr=> $( $path:literal = $expected:expr, $error:literal)*) => { { $( let p = &*format!("/{}", $path.replace(".", "/").replace("[", "").replace("]", "")); let actual = $value.pointer(p).unwrap_or(&serde_json::Value::Null); assert!(actual == &$expected, "{}: {} expected to be: {:?} but was: {:?}", $error, $path, $expected, actual); )* } } }