From 766377cfe7418cc5a98d1714bf586de999c08d25 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Tue, 14 Jun 2016 07:52:18 -0700 Subject: [PATCH] feat(http): add get_ref methods to Encoder and Decoder --- src/http/buffer.rs | 6 ++++++ src/http/mod.rs | 24 ++++++++++++++++++++++++ src/net.rs | 11 ++++++----- src/server/request.rs | 2 -- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/http/buffer.rs b/src/http/buffer.rs index ae46491a..4f9de18a 100644 --- a/src/http/buffer.rs +++ b/src/http/buffer.rs @@ -98,6 +98,12 @@ pub struct BufReader<'a, R: io::Read + 'a> { reader: &'a mut R } +impl<'a, R: io::Read + 'a> BufReader<'a, R> { + pub fn get_ref(&self) -> &R { + self.reader + } +} + impl<'a, R: io::Read> Read for BufReader<'a, R> { fn read(&mut self, buf: &mut [u8]) -> io::Result { trace!("BufReader.read self={}, buf={}", self.buf.len(), buf.len()); diff --git a/src/http/mod.rs b/src/http/mod.rs index 252d8740..030b17b4 100644 --- a/src/http/mod.rs +++ b/src/http/mod.rs @@ -44,6 +44,15 @@ enum Trans<'a, T: Read + 'a> { Buf(self::buffer::BufReader<'a, T>) } +impl<'a, T: Read + 'a> Trans<'a, T> { + fn get_ref(&self) -> &T { + match *self { + Trans::Port(ref t) => &*t, + Trans::Buf(ref buf) => buf.get_ref() + } + } +} + impl<'a, T: Read + 'a> Read for Trans<'a, T> { fn read(&mut self, buf: &mut [u8]) -> io::Result { match *self { @@ -62,12 +71,27 @@ impl<'a, T: Read> Decoder<'a, T> { fn h1(decoder: &'a mut h1::Decoder, transport: Trans<'a, T>) -> Decoder<'a, T> { Decoder(DecoderImpl::H1(decoder, transport)) } + + /// Get a reference to the transport. + pub fn get_ref(&self) -> &T { + match self.0 { + DecoderImpl::H1(_, ref transport) => transport.get_ref() + } + } } impl<'a, T: Transport> Encoder<'a, T> { fn h1(encoder: &'a mut h1::Encoder, transport: &'a mut T) -> Encoder<'a, T> { Encoder(EncoderImpl::H1(encoder, transport)) } + + + /// Get a reference to the transport. + pub fn get_ref(&self) -> &T { + match self.0 { + EncoderImpl::H1(_, ref transport) => &*transport + } + } } impl<'a, T: Read> Read for Decoder<'a, T> { diff --git a/src/net.rs b/src/net.rs index 903142e9..2a4c6a3c 100644 --- a/src/net.rs +++ b/src/net.rs @@ -53,11 +53,6 @@ pub enum Blocked { Write, } -impl Transport for HttpStream { - fn take_socket_error(&mut self) -> io::Result<()> { - self.0.take_socket_error() - } -} /// Accepts sockets asynchronously. pub trait Accept: Evented { @@ -73,6 +68,12 @@ pub trait Accept: Evented { #[derive(Debug)] pub struct HttpStream(pub TcpStream); +impl Transport for HttpStream { + fn take_socket_error(&mut self) -> io::Result<()> { + self.0.take_socket_error() + } +} + impl Read for HttpStream { #[inline] fn read(&mut self, buf: &mut [u8]) -> io::Result { diff --git a/src/server/request.rs b/src/server/request.rs index a6c624d3..0cee723a 100644 --- a/src/server/request.rs +++ b/src/server/request.rs @@ -2,7 +2,6 @@ //! //! These are requests that a `hyper::Server` receives, and include its method, //! target URI, headers, and message body. -//use std::net::SocketAddr; use version::HttpVersion; use method::Method; @@ -16,7 +15,6 @@ pub fn new(incoming: RequestHead) -> Request { debug!("{:#?}", headers); Request { - //remote_addr: addr, method: method, uri: uri, headers: headers,