From 7b5b29a9c31282b9dd15802ec020e25a27fe0991 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Sat, 2 Apr 2016 15:18:24 -0700 Subject: [PATCH 1/2] Update to serde 0.7 --- tarpc/Cargo.toml | 12 ++++++------ tarpc/src/macros.rs | 9 +++++---- tarpc/src/protocol/mod.rs | 19 +++++++++---------- tarpc/src/protocol/packet.rs | 16 ++++++++-------- tarpc/src/protocol/server.rs | 4 ++-- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/tarpc/Cargo.toml b/tarpc/Cargo.toml index c2453d9..43e6235 100644 --- a/tarpc/Cargo.toml +++ b/tarpc/Cargo.toml @@ -11,11 +11,11 @@ readme = "../README.md" description = "An RPC framework for Rust with a focus on ease of use." [dependencies] -bincode = "^0.4.0" -log = "^0.3.5" -scoped-pool = "^0.1.5" -serde = "^0.6.14" +bincode = "^0.5" +log = "^0.3" +scoped-pool = "^0.1" +serde = "^0.7" [dev-dependencies] -lazy_static = "^0.1.15" -env_logger = "^0.3.2" +lazy_static = "^0.1" +env_logger = "^0.3" diff --git a/tarpc/src/macros.rs b/tarpc/src/macros.rs index 02fac66..e4510fa 100644 --- a/tarpc/src/macros.rs +++ b/tarpc/src/macros.rs @@ -110,7 +110,7 @@ macro_rules! impl_serialize { match *self { $( $impler::$name(ref field) => - $crate::macros::serde::Serializer::visit_newtype_variant( + $crate::macros::serde::Serializer::serialize_newtype_variant( serializer, stringify!($impler), $n, @@ -165,11 +165,12 @@ macro_rules! impl_deserialize { } )* return ::std::result::Result::Err( - $crate::macros::serde::de::Error::syntax("expected a field") + $crate::macros::serde::de::Error::custom( + format!("No variants have a value of {}!", value)) ); } } - deserializer.visit_struct_field(__FieldVisitor) + deserializer.deserialize_struct_field(__FieldVisitor) } } @@ -197,7 +198,7 @@ macro_rules! impl_deserialize { stringify!($name) ),* ]; - deserializer.visit_enum(stringify!($impler), VARIANTS, __Visitor) + deserializer.deserialize_enum(stringify!($impler), VARIANTS, __Visitor) } } ); diff --git a/tarpc/src/protocol/mod.rs b/tarpc/src/protocol/mod.rs index 3d9cd44..31dc43e 100644 --- a/tarpc/src/protocol/mod.rs +++ b/tarpc/src/protocol/mod.rs @@ -40,10 +40,13 @@ impl convert::From for Error { impl convert::From for Error { fn from(err: bincode::serde::DeserializeError) -> Error { match err { - bincode::serde::DeserializeError::IoError(ref err) - if err.kind() == io::ErrorKind::ConnectionReset => Error::ConnectionBroken, - bincode::serde::DeserializeError::EndOfStreamError => Error::ConnectionBroken, - bincode::serde::DeserializeError::IoError(err) => Error::Io(Arc::new(err)), + bincode::serde::DeserializeError::IoError(err) => { + match err.kind() { + io::ErrorKind::ConnectionReset | + io::ErrorKind::UnexpectedEof => Error::ConnectionBroken, + _ => Error::Io(Arc::new(err)), + } + } err => panic!("Unexpected error during deserialization: {:?}", err), } } @@ -180,9 +183,7 @@ mod test { let _ = env_logger::init(); let server = Arc::new(Server::new()); let serve_handle = server.spawn_with_config("localhost:0", - Config { - timeout: Some(Duration::new(0, 10)) - }) + Config { timeout: Some(Duration::new(0, 10)) }) .unwrap(); let addr = serve_handle.local_addr().clone(); let client: Client<(), u64> = Client::new(addr).unwrap(); @@ -196,9 +197,7 @@ mod test { let _ = env_logger::init(); let server = Arc::new(Server::new()); let serve_handle = server.spawn_with_config("localhost:0", - Config { - timeout: test_timeout(), - }) + Config { timeout: test_timeout() }) .unwrap(); let addr = serve_handle.local_addr().clone(); let client: Arc> = Arc::new(Client::new(addr).unwrap()); diff --git a/tarpc/src/protocol/packet.rs b/tarpc/src/protocol/packet.rs index 33df794..e0c1caf 100644 --- a/tarpc/src/protocol/packet.rs +++ b/tarpc/src/protocol/packet.rs @@ -19,11 +19,11 @@ impl Serialize for Packet { fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { - serializer.visit_struct(PACKET, - MapVisitor { - value: self, - state: 0, - }) + serializer.serialize_struct(PACKET, + MapVisitor { + value: self, + state: 0, + }) } } @@ -40,11 +40,11 @@ impl<'a, T: Serialize> ser::MapVisitor for MapVisitor<'a, T> { match self.state { 0 => { self.state += 1; - Ok(Some(try!(serializer.visit_struct_elt(RPC_ID, &self.value.rpc_id)))) + Ok(Some(try!(serializer.serialize_struct_elt(RPC_ID, &self.value.rpc_id)))) } 1 => { self.state += 1; - Ok(Some(try!(serializer.visit_struct_elt(MESSAGE, &self.value.message)))) + Ok(Some(try!(serializer.serialize_struct_elt(MESSAGE, &self.value.message)))) } _ => Ok(None), } @@ -62,7 +62,7 @@ impl Deserialize for Packet { where D: Deserializer { const FIELDS: &'static [&'static str] = &[RPC_ID, MESSAGE]; - deserializer.visit_struct(PACKET, FIELDS, Visitor(PhantomData)) + deserializer.deserialize_struct(PACKET, FIELDS, Visitor(PhantomData)) } } diff --git a/tarpc/src/protocol/server.rs b/tarpc/src/protocol/server.rs index 0631712..69149d0 100644 --- a/tarpc/src/protocol/server.rs +++ b/tarpc/src/protocol/server.rs @@ -214,7 +214,7 @@ pub trait Serve: Send + Sync + Sized { /// spawn fn spawn(self, addr: A) -> io::Result where A: ToSocketAddrs, - Self: 'static, + Self: 'static { self.spawn_with_config(addr, Config::default()) } @@ -222,7 +222,7 @@ pub trait Serve: Send + Sync + Sized { /// spawn fn spawn_with_config(self, addr: A, config: Config) -> io::Result where A: ToSocketAddrs, - Self: 'static, + Self: 'static { let listener = try!(TcpListener::bind(&addr)); let addr = try!(listener.local_addr()); From 9235e12904eda411ffc39d9ed6d7d4d92afbe1b3 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Sat, 2 Apr 2016 15:33:56 -0700 Subject: [PATCH 2/2] Handle Serde(EndOfStream) error as ConnectionBroken --- tarpc/src/protocol/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tarpc/src/protocol/mod.rs b/tarpc/src/protocol/mod.rs index 31dc43e..c7e2132 100644 --- a/tarpc/src/protocol/mod.rs +++ b/tarpc/src/protocol/mod.rs @@ -6,6 +6,7 @@ use bincode::{self, SizeLimit}; use bincode::serde::{deserialize_from, serialize_into}; use serde; +use serde::de::value::Error::EndOfStream; use std::io::{self, Read, Write}; use std::convert; use std::sync::Arc; @@ -40,6 +41,7 @@ impl convert::From for Error { impl convert::From for Error { fn from(err: bincode::serde::DeserializeError) -> Error { match err { + bincode::serde::DeserializeError::Serde(EndOfStream) => Error::ConnectionBroken, bincode::serde::DeserializeError::IoError(err) => { match err.kind() { io::ErrorKind::ConnectionReset |