use super::SchemaError::{self, UnexpectedValue};
use serde_json::{Map, Number, Value};
pub(crate) trait TryValue {
fn try_str(&self) -> Result<&str, SchemaError>;
fn try_array(&self) -> Result<&Vec<Value>, SchemaError>;
fn try_number(&self) -> Result<&Number, SchemaError>;
fn try_bool(&self) -> Result<bool, SchemaError>;
fn try_object(&self) -> Result<&Map<String, Value>, SchemaError>;
}
impl TryValue for Value {
fn try_str(&self) -> Result<&str, SchemaError> {
self.as_str().ok_or(UnexpectedValue { expected: "string", value: self })
}
fn try_array(&self) -> Result<&Vec<Value>, SchemaError> {
self.as_array().ok_or(UnexpectedValue { expected: "array", value: self })
}
fn try_number(&self) -> Result<&Number, SchemaError> {
self.as_number().ok_or(UnexpectedValue { expected: "number", value: self })
}
fn try_bool(&self) -> Result<bool, SchemaError> {
self.as_bool().ok_or(UnexpectedValue { expected: "boolean", value: self })
}
fn try_object(&self) -> Result<&Map<String, Value>, SchemaError> {
self.as_object().ok_or(UnexpectedValue { expected: "object", value: self })
}
}