query_value_result

Macro query_value_result 

Source
macro_rules! query_value_result {
    ($(mut)? $value:tt $(query:tt)* $(?? $default:expr)?) => { ... };
    ($(mut)? $value:tt $(query:tt)* -> $as:ident $(?? $default:expr)?) => { ... };
    ($(mut)? $value:tt $(query:tt)* >> ($deser_to:ty) $(?? $default:expr)?) => { ... };
}
Expand description

A Result-returning variant of query_value!.

See the documentation of query_value! macro for detailed usage.

If your query fails, this macro returns a valq::Error describing the failure reason.

use serde::Deserialize;
use serde_json::json;
use valq::{query_value_result, Error};

let obj = json!({"foo": {"bar": 42}});

// Error::ValueNotFoundAtPath: querying non-existent path
let result = query_value_result!(obj.foo.baz);
assert!(matches!(result, Err(Error::ValueNotFoundAtPath(_))));

// Error::AsCastFailed: type casting failure
let result = query_value_result!(obj.foo.bar -> str);
assert!(matches!(result, Err(Error::AsCastFailed(_))));

// Error::DeserializationFailed: deserialization failure
let result = query_value_result!(obj.foo >> (Vec<u8>));
assert!(matches!(result, Err(Error::DeserializationFailed(_))));