macro_rules! expect_type {
($value:expr) => (
expect_string!(expect_property!($value, "type", "Missing 'type' field"))
)
}
macro_rules! expect_string {
($value:expr) => (try!(
match $value.as_string() {
Some(v) => Ok(v),
None => Err({use Error; Error::ExpectedStringValue})
}
))
}
macro_rules! expect_f64 {
($value:expr) => (try!(
match $value.as_f64() {
Some(v) => Ok(v),
None => Err({use Error; Error::ExpectedF64Value})
}
))
}
macro_rules! expect_array {
($value:expr) => (try!(
match $value.as_array() {
Some(v) => Ok(v),
None => Err({use Error; Error::ExpectedArrayValue})
}
))
}
macro_rules! expect_object {
($value:expr) => (try!(
match $value.as_object() {
Some(v) => Ok(v),
None => Err({use Error; Error::ExpectedObjectValue})
}
))
}
macro_rules! expect_property {
($obj:expr, $name:expr, $desc:expr) => (
match $obj.get($name) {
Some(v) => v,
None => return Err({use Error; Error::ExpectedProperty}),
};
)
}