Add Error::unknown_field_error

This commit is contained in:
Erick Tryzelaar
2015-04-12 00:30:20 -07:00
parent 1da47c0870
commit e0eff942b1
11 changed files with 33 additions and 5 deletions
+2
View File
@@ -34,6 +34,8 @@ impl serde::de::Error for Error {
fn end_of_stream_error() -> Error { Error::EndOfStreamError } fn end_of_stream_error() -> Error { Error::EndOfStreamError }
fn unknown_field_error(_: &str) -> Error { Error::SyntaxError }
fn missing_field_error(_: &'static str) -> Error { Error::SyntaxError } fn missing_field_error(_: &'static str) -> Error { Error::SyntaxError }
} }
+2
View File
@@ -27,6 +27,8 @@ impl serde::de::Error for Error {
fn end_of_stream_error() -> Error { Error::EndOfStream } fn end_of_stream_error() -> Error { Error::EndOfStream }
fn unknown_field_error(_: &str) -> Error { Error::SyntaxError }
fn missing_field_error(_: &'static str) -> Error { fn missing_field_error(_: &'static str) -> Error {
Error::MissingField Error::MissingField
} }
+2
View File
@@ -45,6 +45,8 @@ impl serde::de::Error for Error {
fn end_of_stream_error() -> Error { Error::EndOfStream } fn end_of_stream_error() -> Error { Error::EndOfStream }
fn unknown_field_error(_: &str) -> Error { Error::SyntaxError }
fn missing_field_error(_: &'static str) -> Error { fn missing_field_error(_: &'static str) -> Error {
Error::MissingField Error::MissingField
} }
+2
View File
@@ -25,6 +25,8 @@ impl serde::de::Error for Error {
fn end_of_stream_error() -> Error { Error::EndOfStreamError } fn end_of_stream_error() -> Error { Error::EndOfStreamError }
fn unknown_field_error(_: &str) -> Error { Error::SyntaxError }
fn missing_field_error(_: &'static str) -> Error { Error::SyntaxError } fn missing_field_error(_: &'static str) -> Error { Error::SyntaxError }
} }
+1 -1
View File
@@ -575,7 +575,7 @@ fn deserialize_field_visitor(
{ {
match value { match value {
$field_arms $field_arms
_ => Err(::serde::de::Error::syntax_error()), _ => Err(::serde::de::Error::unknown_field_error(value)),
} }
} }
} }
+3 -1
View File
@@ -12,7 +12,9 @@ pub trait Error {
fn end_of_stream_error() -> Self; fn end_of_stream_error() -> Self;
fn missing_field_error(&'static str) -> Self; fn unknown_field_error(field: &str) -> Self;
fn missing_field_error(field: &'static str) -> Self;
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
+2
View File
@@ -18,12 +18,14 @@ use de;
pub enum Error { pub enum Error {
SyntaxError, SyntaxError,
EndOfStreamError, EndOfStreamError,
UnknownFieldError(String),
MissingFieldError(&'static str), MissingFieldError(&'static str),
} }
impl de::Error for Error { impl de::Error for Error {
fn syntax_error() -> Self { Error::SyntaxError } fn syntax_error() -> Self { Error::SyntaxError }
fn end_of_stream_error() -> Self { Error::EndOfStreamError } fn end_of_stream_error() -> Self { Error::EndOfStreamError }
fn unknown_field_error(field: &str) -> Self { Error::UnknownFieldError(field.to_string()) }
fn missing_field_error(field: &'static str) -> Self { Error::MissingFieldError(field) } fn missing_field_error(field: &'static str) -> Self { Error::MissingFieldError(field) }
} }
+10 -1
View File
@@ -5,7 +5,7 @@ use std::io;
use de; use de;
/// The errors that can arise while parsing a JSON stream. /// The errors that can arise while parsing a JSON stream.
#[derive(Copy, Clone, PartialEq)] #[derive(Clone, PartialEq)]
pub enum ErrorCode { pub enum ErrorCode {
EOFWhileParsingList, EOFWhileParsingList,
EOFWhileParsingObject, EOFWhileParsingObject,
@@ -28,6 +28,7 @@ pub enum ErrorCode {
InvalidUnicodeCodePoint, InvalidUnicodeCodePoint,
KeyMustBeAString, KeyMustBeAString,
LoneLeadingSurrogateInHexEscape, LoneLeadingSurrogateInHexEscape,
UnknownField(String),
MissingField(&'static str), MissingField(&'static str),
NotFourDigit, NotFourDigit,
NotUtf8, NotUtf8,
@@ -65,6 +66,7 @@ impl fmt::Debug for ErrorCode {
ErrorCode::InvalidUnicodeCodePoint => "invalid unicode code point".fmt(f), ErrorCode::InvalidUnicodeCodePoint => "invalid unicode code point".fmt(f),
ErrorCode::KeyMustBeAString => "key must be a string".fmt(f), ErrorCode::KeyMustBeAString => "key must be a string".fmt(f),
ErrorCode::LoneLeadingSurrogateInHexEscape => "lone leading surrogate in hex escape".fmt(f), ErrorCode::LoneLeadingSurrogateInHexEscape => "lone leading surrogate in hex escape".fmt(f),
ErrorCode::UnknownField(ref field) => write!(f, "unknown field \"{}\"", field),
ErrorCode::MissingField(ref field) => write!(f, "missing field \"{}\"", field), ErrorCode::MissingField(ref field) => write!(f, "missing field \"{}\"", field),
ErrorCode::NotFourDigit => "invalid \\u escape (not four digits)".fmt(f), ErrorCode::NotFourDigit => "invalid \\u escape (not four digits)".fmt(f),
ErrorCode::NotUtf8 => "contents not utf-8".fmt(f), ErrorCode::NotUtf8 => "contents not utf-8".fmt(f),
@@ -154,6 +156,9 @@ impl From<de::value::Error> for Error {
de::value::Error::EndOfStreamError => { de::value::Error::EndOfStreamError => {
de::Error::end_of_stream_error() de::Error::end_of_stream_error()
} }
de::value::Error::UnknownFieldError(field) => {
Error::SyntaxError(ErrorCode::UnknownField(field), 0, 0)
}
de::value::Error::MissingFieldError(field) => { de::value::Error::MissingFieldError(field) => {
de::Error::missing_field_error(field) de::Error::missing_field_error(field)
} }
@@ -170,6 +175,10 @@ impl de::Error for Error {
Error::SyntaxError(ErrorCode::EOFWhileParsingValue, 0, 0) Error::SyntaxError(ErrorCode::EOFWhileParsingValue, 0, 0)
} }
fn unknown_field_error(field: &str) -> Error {
Error::SyntaxError(ErrorCode::UnknownField(field.to_string()), 0, 0)
}
fn missing_field_error(field: &'static str) -> Error { fn missing_field_error(field: &'static str) -> Error {
Error::MissingFieldError(field) Error::MissingFieldError(field)
} }
+2
View File
@@ -18,6 +18,8 @@ impl serde::de::Error for Error {
fn end_of_stream_error() -> Error { Error } fn end_of_stream_error() -> Error { Error }
fn unknown_field_error(_field: &str) -> Error { Error }
fn missing_field_error(_field: &'static str) -> Error { Error } fn missing_field_error(_field: &'static str) -> Error { Error }
} }
+6 -1
View File
@@ -59,10 +59,11 @@ impl<'a> TokenDeserializer {
} }
} }
#[derive(Copy, Clone, PartialEq, Debug)] #[derive(Clone, PartialEq, Debug)]
enum Error { enum Error {
SyntaxError, SyntaxError,
EndOfStreamError, EndOfStreamError,
UnknownFieldError(String),
MissingFieldError(&'static str), MissingFieldError(&'static str),
InvalidName(&'static str), InvalidName(&'static str),
} }
@@ -72,6 +73,10 @@ impl de::Error for Error {
fn end_of_stream_error() -> Error { Error::EndOfStreamError } fn end_of_stream_error() -> Error { Error::EndOfStreamError }
fn unknown_field_error(field: &str) -> Error {
Error::UnknownFieldError(field.to_string())
}
fn missing_field_error(field: &'static str) -> Error { fn missing_field_error(field: &'static str) -> Error {
Error::MissingFieldError(field) Error::MissingFieldError(field)
} }
+1 -1
View File
@@ -935,7 +935,7 @@ fn test_parse_enum_errors() {
("{}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 2)), ("{}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 2)),
("{\"Dog\":", Error::SyntaxError(ErrorCode::EOFWhileParsingValue, 1, 8)), ("{\"Dog\":", Error::SyntaxError(ErrorCode::EOFWhileParsingValue, 1, 8)),
("{\"Dog\":}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 8)), ("{\"Dog\":}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 8)),
("{\"unknown\":[]}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 11)), ("{\"unknown\":[]}", Error::SyntaxError(ErrorCode::UnknownField("unknown".to_string()), 1, 11)),
("{\"Dog\":{}}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 9)), ("{\"Dog\":{}}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 9)),
("{\"Frog\":{}}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 10)), ("{\"Frog\":{}}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 10)),
("{\"Cat\":[]}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 9)), ("{\"Cat\":[]}", Error::SyntaxError(ErrorCode::ExpectedSomeValue, 1, 9)),