Skip to content

Commit 70699c3

Browse files
authored
Merge pull request #39 from dtolnay/up
Update to serde 0.8
2 parents 086d68d + b7b5bcf commit 70699c3

File tree

5 files changed

+484
-149
lines changed

5 files changed

+484
-149
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ libc = "0.1"
1717
rand = "0.3"
1818
rust-crypto = "0.2.31"
1919
rustc-serialize = "0.3"
20-
serde = "0.7"
20+
serde = "0.8"
2121
time = "0.1"
2222
linked-hash-map = "0.0.9"
2323

src/decoder/serde.rs

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,43 @@ impl Decoder {
145145
}
146146
}
147147

148+
macro_rules! forward_to_deserialize {
149+
($(
150+
$name:ident ( $( $arg:ident : $ty:ty ),* );
151+
)*) => {
152+
$(
153+
forward_to_deserialize!{
154+
func: $name ( $( $arg: $ty ),* );
155+
}
156+
)*
157+
};
158+
159+
(func: deserialize_enum ( $( $arg:ident : $ty:ty ),* );) => {
160+
fn deserialize_enum<V>(
161+
&mut self,
162+
$(_: $ty,)*
163+
_visitor: V,
164+
) -> ::std::result::Result<V::Value, Self::Error>
165+
where V: ::serde::de::EnumVisitor
166+
{
167+
Err(::serde::de::Error::invalid_type(::serde::de::Type::Enum))
168+
}
169+
};
170+
171+
(func: $name:ident ( $( $arg:ident : $ty:ty ),* );) => {
172+
#[inline]
173+
fn $name<V>(
174+
&mut self,
175+
$(_: $ty,)*
176+
visitor: V,
177+
) -> ::std::result::Result<V::Value, Self::Error>
178+
where V: ::serde::de::Visitor
179+
{
180+
self.deserialize(visitor)
181+
}
182+
};
183+
}
184+
148185
impl Deserializer for Decoder {
149186
type Error = DecoderError;
150187

@@ -244,6 +281,36 @@ impl Deserializer for Decoder {
244281
{
245282
visitor.visit_newtype_struct(self)
246283
}
284+
285+
forward_to_deserialize!{
286+
deserialize_bool();
287+
deserialize_usize();
288+
deserialize_u8();
289+
deserialize_u16();
290+
deserialize_u32();
291+
deserialize_u64();
292+
deserialize_isize();
293+
deserialize_i8();
294+
deserialize_i16();
295+
deserialize_i32();
296+
deserialize_i64();
297+
deserialize_f32();
298+
deserialize_f64();
299+
deserialize_char();
300+
deserialize_str();
301+
deserialize_string();
302+
deserialize_unit();
303+
deserialize_seq();
304+
deserialize_seq_fixed_size(len: usize);
305+
deserialize_bytes();
306+
deserialize_map();
307+
deserialize_unit_struct(name: &'static str);
308+
deserialize_tuple_struct(name: &'static str, len: usize);
309+
deserialize_struct(name: &'static str, fields: &'static [&'static str]);
310+
deserialize_struct_field();
311+
deserialize_tuple(len: usize);
312+
deserialize_ignored_any();
313+
}
247314
}
248315

249316
struct VariantDecoder<'a> {
@@ -335,6 +402,39 @@ impl<'a> Deserializer for SeqDecoder<'a> {
335402
visitor.visit_seq(self)
336403
}
337404
}
405+
406+
forward_to_deserialize!{
407+
deserialize_bool();
408+
deserialize_usize();
409+
deserialize_u8();
410+
deserialize_u16();
411+
deserialize_u32();
412+
deserialize_u64();
413+
deserialize_isize();
414+
deserialize_i8();
415+
deserialize_i16();
416+
deserialize_i32();
417+
deserialize_i64();
418+
deserialize_f32();
419+
deserialize_f64();
420+
deserialize_char();
421+
deserialize_str();
422+
deserialize_string();
423+
deserialize_unit();
424+
deserialize_option();
425+
deserialize_seq();
426+
deserialize_seq_fixed_size(len: usize);
427+
deserialize_bytes();
428+
deserialize_map();
429+
deserialize_unit_struct(name: &'static str);
430+
deserialize_newtype_struct(name: &'static str);
431+
deserialize_tuple_struct(name: &'static str, len: usize);
432+
deserialize_struct(name: &'static str, fields: &'static [&'static str]);
433+
deserialize_struct_field();
434+
deserialize_tuple(len: usize);
435+
deserialize_enum(name: &'static str, variants: &'static [&'static str]);
436+
deserialize_ignored_any();
437+
}
338438
}
339439

340440
impl<'a> SeqVisitor for SeqDecoder<'a> {
@@ -428,6 +528,38 @@ impl<'a> MapVisitor for MapDecoder<'a> {
428528
{
429529
visitor.visit_none()
430530
}
531+
532+
forward_to_deserialize!{
533+
deserialize_bool();
534+
deserialize_usize();
535+
deserialize_u8();
536+
deserialize_u16();
537+
deserialize_u32();
538+
deserialize_u64();
539+
deserialize_isize();
540+
deserialize_i8();
541+
deserialize_i16();
542+
deserialize_i32();
543+
deserialize_i64();
544+
deserialize_f32();
545+
deserialize_f64();
546+
deserialize_char();
547+
deserialize_str();
548+
deserialize_string();
549+
deserialize_unit();
550+
deserialize_newtype_struct(name: &'static str);
551+
deserialize_seq();
552+
deserialize_seq_fixed_size(len: usize);
553+
deserialize_bytes();
554+
deserialize_map();
555+
deserialize_unit_struct(name: &'static str);
556+
deserialize_tuple_struct(name: &'static str, len: usize);
557+
deserialize_struct(name: &'static str, fields: &'static [&'static str]);
558+
deserialize_struct_field();
559+
deserialize_tuple(len: usize);
560+
deserialize_enum(name: &'static str, variants: &'static [&'static str]);
561+
deserialize_ignored_any();
562+
}
431563
}
432564

433565
Ok(try!(Deserialize::deserialize(&mut UnitDecoder)))
@@ -447,4 +579,37 @@ impl<'a> Deserializer for MapDecoder<'a> {
447579
{
448580
visitor.visit_map(self)
449581
}
582+
583+
forward_to_deserialize!{
584+
deserialize_bool();
585+
deserialize_usize();
586+
deserialize_u8();
587+
deserialize_u16();
588+
deserialize_u32();
589+
deserialize_u64();
590+
deserialize_isize();
591+
deserialize_i8();
592+
deserialize_i16();
593+
deserialize_i32();
594+
deserialize_i64();
595+
deserialize_f32();
596+
deserialize_f64();
597+
deserialize_char();
598+
deserialize_str();
599+
deserialize_string();
600+
deserialize_unit();
601+
deserialize_option();
602+
deserialize_seq();
603+
deserialize_seq_fixed_size(len: usize);
604+
deserialize_bytes();
605+
deserialize_map();
606+
deserialize_unit_struct(name: &'static str);
607+
deserialize_newtype_struct(name: &'static str);
608+
deserialize_tuple_struct(name: &'static str, len: usize);
609+
deserialize_struct(name: &'static str, fields: &'static [&'static str]);
610+
deserialize_struct_field();
611+
deserialize_tuple(len: usize);
612+
deserialize_enum(name: &'static str, variants: &'static [&'static str]);
613+
deserialize_ignored_any();
614+
}
450615
}

src/encoder/error.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
use std::{io, error, fmt};
22
use byteorder;
33
use serde::ser;
4-
use super::serde::State;
4+
use bson::Bson;
55

66
/// Possible errors that can arise during encoding.
77
#[derive(Debug)]
88
pub enum EncoderError {
99
IoError(io::Error),
10-
InvalidMapKeyType(State),
11-
InvalidState(State),
12-
EmptyState,
10+
InvalidMapKeyType(Bson),
1311
Unknown(String),
1412
}
1513

@@ -29,9 +27,7 @@ impl fmt::Display for EncoderError {
2927
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
3028
match self {
3129
&EncoderError::IoError(ref inner) => inner.fmt(fmt),
32-
&EncoderError::InvalidMapKeyType(ref inner) => write!(fmt, "Invalid map key type: {:?}", inner),
33-
&EncoderError::InvalidState(ref inner) => write!(fmt, "Invalid state emitted: {:?}", inner),
34-
&EncoderError::EmptyState => write!(fmt, "No state emitted"),
30+
&EncoderError::InvalidMapKeyType(ref bson) => write!(fmt, "Invalid map key type: {:?}", bson),
3531
&EncoderError::Unknown(ref inner) => inner.fmt(fmt),
3632
}
3733
}
@@ -42,8 +38,6 @@ impl error::Error for EncoderError {
4238
match self {
4339
&EncoderError::IoError(ref inner) => inner.description(),
4440
&EncoderError::InvalidMapKeyType(_) => "Invalid map key type",
45-
&EncoderError::InvalidState(_) => "Invalid state emitted",
46-
&EncoderError::EmptyState => "No state emitted",
4741
&EncoderError::Unknown(ref inner) => inner,
4842
}
4943
}

0 commit comments

Comments
 (0)