Factor out value deserializers

This commit is contained in:
Erick Tryzelaar
2015-03-31 12:56:17 -07:00
parent bfe7a04c4d
commit 54009e0991
4 changed files with 432 additions and 20 deletions
+2 -20
View File
@@ -603,26 +603,8 @@ impl<'a, Iter> de::MapVisitor for MapVisitor<'a, Iter>
fn missing_field<V>(&mut self, _field: &'static str) -> Result<V, Error>
where V: de::Deserialize,
{
// See if the type can deserialize from a unit.
struct UnitDeserializer;
impl de::Deserializer for UnitDeserializer {
type Error = Error;
fn visit<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
where V: de::Visitor,
{
visitor.visit_unit()
}
fn visit_option<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
where V: de::Visitor,
{
visitor.visit_none()
}
}
Ok(try!(de::Deserialize::deserialize(&mut UnitDeserializer)))
let mut de = de::value::ValueDeserializer::deserializer(());
Ok(try!(de::Deserialize::deserialize(&mut de)))
}
}
+16
View File
@@ -145,6 +145,22 @@ impl error::FromError<io::Error> for Error {
}
}
impl error::FromError<de::value::Error> for Error {
fn from_error(error: de::value::Error) -> Error {
match error {
de::value::Error::SyntaxError => {
de::Error::syntax_error()
}
de::value::Error::EndOfStreamError => {
de::Error::end_of_stream_error()
}
de::value::Error::MissingFieldError(field) => {
de::Error::missing_field_error(field)
}
}
}
}
impl de::Error for Error {
fn syntax_error() -> Error {
Error::SyntaxError(ErrorCode::ExpectedSomeValue, 0, 0)