From 51105dfdcac4e46ec4ae43f2e375a7da5b5b7818 Mon Sep 17 00:00:00 2001 From: Edward Barnard Date: Sat, 26 Dec 2015 19:46:57 +0000 Subject: Improve deserializer errors --- src/de.rs | 59 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 27 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/de.rs b/src/de.rs index 814933b..2fd9daf 100644 --- a/src/de.rs +++ b/src/de.rs @@ -36,52 +36,52 @@ macro_rules! try_next { #[derive(Debug)] pub enum DeserializeError { - None, + Syntax, + EndOfStream, + UnknownField, + MissingField, + Reader(Error), } impl From for DeserializeError { - fn from(_: Error) -> DeserializeError { - DeserializeError::None + fn from(err: Error) -> DeserializeError { + DeserializeError::Reader(err) } } impl SerdeError for DeserializeError { fn syntax(_msg: &str) -> Self { - panic!("stx"); - DeserializeError::None + DeserializeError::Syntax } fn end_of_stream() -> Self { - panic!("eos"); - DeserializeError::None + DeserializeError::EndOfStream } fn unknown_field(_field: &str) -> Self { - panic!("uf"); - DeserializeError::None + DeserializeError::UnknownField } fn missing_field(_field: &'static str) -> Self { - panic!("mf"); - DeserializeError::None + DeserializeError::MissingField } } -pub struct Deserializer - where I: IntoIterator> +pub struct Deserializer + where I: IntoIterator> { events: Peekable<::IntoIter>, } -impl Deserializer where I: IntoIterator> +impl Deserializer where I: IntoIterator> { - pub fn new(iter: I) -> Deserializer { + pub fn new(iter: I) -> Deserializer { Deserializer { events: iter.into_iter().peekable() } } } -impl SerdeDeserializer for Deserializer - where I: IntoIterator> +impl SerdeDeserializer for Deserializer + where I: IntoIterator> { type Error = DeserializeError; @@ -167,7 +167,7 @@ impl SerdeDeserializer for Deserializer } } -impl VariantVisitor for Deserializer where I: IntoIterator> +impl VariantVisitor for Deserializer where I: IntoIterator> { type Error = DeserializeError; @@ -204,20 +204,17 @@ impl VariantVisitor for Deserializer where I: IntoIterator - where E: 'a, - I: 'a + IntoIterator> +struct MapSeq<'a, I> + where I: 'a + IntoIterator> { - de: &'a mut Deserializer, + de: &'a mut Deserializer, remaining: Option, finished: bool, } -impl<'a, I, E> MapSeq<'a, I, E> - where E: 'a, - I: 'a + IntoIterator> +impl<'a, I> MapSeq<'a, I> where I: 'a + IntoIterator> { - fn new(de: &'a mut Deserializer, len: Option) -> MapSeq<'a, I, E> { + fn new(de: &'a mut Deserializer, len: Option) -> MapSeq<'a, I> { MapSeq { de: de, remaining: len, @@ -226,9 +223,8 @@ impl<'a, I, E> MapSeq<'a, I, E> } } -impl<'a, I, E> SeqVisitor for MapSeq<'a, I, E> - where E: 'a, - I: 'a + IntoIterator> +impl<'a, I> SeqVisitor for MapSeq<'a, I> + where I: 'a + IntoIterator> { type Error = DeserializeError; @@ -258,9 +254,8 @@ impl<'a, I, E> SeqVisitor for MapSeq<'a, I, E> } } -impl<'a, I, E> MapVisitor for MapSeq<'a, I, E> - where E: 'a, - I: 'a + IntoIterator> +impl<'a, I> MapVisitor for MapSeq<'a, I> + where I: 'a + IntoIterator> { type Error = DeserializeError; -- cgit v1.2.3