feat(client): remove Clone requirement for NetworkStream in Client

This commit is contained in:
Sean McArthur
2015-04-08 16:26:12 -07:00
parent e814680b55
commit 60d92c296a

View File

@@ -53,25 +53,12 @@ impl<'a, N: NetworkListener + 'a> Iterator for NetworkConnections<'a, N> {
} }
} }
/// An abstraction over streams that a Server can utilize. /// An abstraction over streams that a Server can utilize.
pub trait NetworkStream: Read + Write + Any + StreamClone + Send + Typeable { pub trait NetworkStream: Read + Write + Any + Send + Typeable {
/// Get the remote address of the underlying connection. /// Get the remote address of the underlying connection.
fn peer_addr(&mut self) -> io::Result<SocketAddr>; fn peer_addr(&mut self) -> io::Result<SocketAddr>;
} }
#[doc(hidden)]
pub trait StreamClone {
fn clone_box(&self) -> Box<NetworkStream + Send>;
}
impl<T: NetworkStream + Send + Clone> StreamClone for T {
#[inline]
fn clone_box(&self) -> Box<NetworkStream + Send> {
Box::new(self.clone())
}
}
/// A connector creates a NetworkStream. /// A connector creates a NetworkStream.
pub trait NetworkConnector { pub trait NetworkConnector {
/// Type of Stream to create /// Type of Stream to create
@@ -92,11 +79,6 @@ impl fmt::Debug for Box<NetworkStream + Send> {
} }
} }
impl Clone for Box<NetworkStream + Send> {
#[inline]
fn clone(&self) -> Box<NetworkStream + Send> { self.clone_box() }
}
impl NetworkStream + Send { impl NetworkStream + Send {
unsafe fn downcast_ref_unchecked<T: 'static>(&self) -> &T { unsafe fn downcast_ref_unchecked<T: 'static>(&self) -> &T {
mem::transmute(traitobject::data(self)) mem::transmute(traitobject::data(self))