add stream and sink proxy macros
This commit is contained in:
@@ -6,20 +6,6 @@ pub trait ControlPing {
|
|||||||
fn take_pong(&mut self) -> Option<PingPayload>;
|
fn take_pong(&mut self) -> Option<PingPayload>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// macro_rules! proxy_control_ping {
|
|
||||||
// ($outer:ident) => (
|
|
||||||
// impl<T: ControlPing> ControlPing for $outer<T> {
|
|
||||||
// fn start_ping(&mut self, body: PingPayload) -> StartSend<PingPayload, ConnectionError> {
|
|
||||||
// self.inner.start_ping(body)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// fn take_pong(&mut self) -> Option<PingPayload> {
|
|
||||||
// self.inner.take_pong()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
|
|
||||||
macro_rules! proxy_control_ping {
|
macro_rules! proxy_control_ping {
|
||||||
($struct:ident $(, $targs:ident)*) => (
|
($struct:ident $(, $targs:ident)*) => (
|
||||||
impl<T: ControlPing$(, $targs)*> ControlPing for $struct<T$(, $targs)*> {
|
impl<T: ControlPing$(, $targs)*> ControlPing for $struct<T$(, $targs)*> {
|
||||||
|
|||||||
@@ -19,6 +19,48 @@ mod control_settings;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod control_streams;
|
mod control_streams;
|
||||||
|
|
||||||
|
macro_rules! proxy_stream {
|
||||||
|
($struct:ident $(, $targs:ident)*) => (
|
||||||
|
impl<T: Stream$(, $targs)*> Stream for $struct<T$(, $targs)*> {
|
||||||
|
type Item = T::Item;
|
||||||
|
type Error = T::Error;
|
||||||
|
fn poll(&mut self) -> Poll<Option<T::Item>, T::Error> {
|
||||||
|
self.inner.poll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! proxy_sink {
|
||||||
|
($struct:ident $(, $targs:ident)*) => (
|
||||||
|
impl<T, U$(, $targs)*> Sink for $struct<T$(, $targs)*>
|
||||||
|
where T: Sink<SinkItem = frame::Frame<U>, SinkError = ConnectionError>
|
||||||
|
{
|
||||||
|
type SinkItem = frame::Frame<U>;
|
||||||
|
type SinkError = ConnectionError;
|
||||||
|
fn start_send(&mut self, it: T::SinkItem) -> StartSend<T::SinkItem, T::SinkError> {
|
||||||
|
self.inner.start_send(it)
|
||||||
|
}
|
||||||
|
fn poll_complete(&mut self) -> Poll<(), T::SinkError> {
|
||||||
|
self.inner.poll_complete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! proxy_ready_sink {
|
||||||
|
($struct:ident $(, $targs:ident)*$(; $constraint:ident)*) => (
|
||||||
|
impl<T, U$(, $targs)*> ReadySink for $struct<T$(, $targs)*>
|
||||||
|
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
||||||
|
T: ReadySink $(+ $constraint)*
|
||||||
|
{
|
||||||
|
fn poll_ready(&mut self) -> Poll<(), T::SinkError> {
|
||||||
|
self.inner.poll_ready()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
use self::apply_settings::ApplySettings;
|
use self::apply_settings::ApplySettings;
|
||||||
use self::control_flow::ControlFlow;
|
use self::control_flow::ControlFlow;
|
||||||
use self::control_ping::ControlPing;
|
use self::control_ping::ControlPing;
|
||||||
|
|||||||
@@ -51,35 +51,9 @@ impl<T> Stream for StreamRecvClose<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Proxy.
|
|
||||||
impl<T, U> Sink for StreamRecvClose<T>
|
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
T: ControlStreams,
|
|
||||||
{
|
|
||||||
type SinkItem = Frame<U>;
|
|
||||||
type SinkError = ConnectionError;
|
|
||||||
|
|
||||||
fn start_send(&mut self, item: Self::SinkItem) -> StartSend<Frame<U>, ConnectionError> {
|
|
||||||
self.inner.start_send(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll_complete(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_complete()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Proxy.
|
|
||||||
impl<T, U> ReadySink for StreamRecvClose<T>
|
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
T: ReadySink,
|
|
||||||
T: ControlStreams,
|
|
||||||
{
|
|
||||||
fn poll_ready(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_ready()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_apply_settings!(StreamRecvClose);
|
proxy_apply_settings!(StreamRecvClose);
|
||||||
proxy_control_flow!(StreamRecvClose);
|
proxy_control_flow!(StreamRecvClose);
|
||||||
proxy_control_streams!(StreamRecvClose);
|
proxy_control_streams!(StreamRecvClose);
|
||||||
proxy_control_ping!(StreamRecvClose);
|
proxy_control_ping!(StreamRecvClose);
|
||||||
|
proxy_sink!(StreamRecvClose);
|
||||||
|
proxy_ready_sink!(StreamRecvClose);
|
||||||
|
|||||||
@@ -19,19 +19,6 @@ impl<T, U> StreamSendClose<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T> Stream for StreamSendClose<T>
|
|
||||||
where T: Stream<Item = Frame, Error = ConnectionError>,
|
|
||||||
T: ControlStreams,
|
|
||||||
{
|
|
||||||
type Item = Frame;
|
|
||||||
type Error = ConnectionError;
|
|
||||||
|
|
||||||
fn poll(&mut self) -> Poll<Option<Frame>, ConnectionError> {
|
|
||||||
self.inner.poll()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Tracks END_STREAM frames sent from the local peer.
|
/// Tracks END_STREAM frames sent from the local peer.
|
||||||
impl<T, U> Sink for StreamSendClose<T>
|
impl<T, U> Sink for StreamSendClose<T>
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
||||||
@@ -63,18 +50,9 @@ impl<T, U> Sink for StreamSendClose<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T, U> ReadySink for StreamSendClose<T>
|
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
T: ReadySink,
|
|
||||||
T: ControlStreams,
|
|
||||||
{
|
|
||||||
fn poll_ready(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_ready()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_apply_settings!(StreamSendClose);
|
proxy_apply_settings!(StreamSendClose);
|
||||||
proxy_control_flow!(StreamSendClose);
|
proxy_control_flow!(StreamSendClose);
|
||||||
proxy_control_streams!(StreamSendClose);
|
proxy_control_streams!(StreamSendClose);
|
||||||
proxy_control_ping!(StreamSendClose);
|
proxy_control_ping!(StreamSendClose);
|
||||||
|
proxy_stream!(StreamSendClose);
|
||||||
|
proxy_ready_sink!(StreamSendClose; ControlStreams);
|
||||||
|
|||||||
@@ -45,20 +45,6 @@ impl<T: ApplySettings> ApplySettings for StreamSendOpen<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T> Stream for StreamSendOpen<T>
|
|
||||||
where T: Stream<Item = Frame, Error = ConnectionError>,
|
|
||||||
T: ControlStreams,
|
|
||||||
{
|
|
||||||
type Item = Frame;
|
|
||||||
type Error = ConnectionError;
|
|
||||||
|
|
||||||
fn poll(&mut self) -> Poll<Option<Frame>, ConnectionError> {
|
|
||||||
trace!("poll");
|
|
||||||
self.inner.poll()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper.
|
/// Helper.
|
||||||
impl<T: ControlStreams> StreamSendOpen<T> {
|
impl<T: ControlStreams> StreamSendOpen<T> {
|
||||||
fn check_not_reset(&self, id: StreamId) -> Result<(), ConnectionError> {
|
fn check_not_reset(&self, id: StreamId) -> Result<(), ConnectionError> {
|
||||||
@@ -144,18 +130,8 @@ impl<T, U> Sink for StreamSendOpen<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T, U> ReadySink for StreamSendOpen<T>
|
|
||||||
where T: Stream<Item = Frame, Error = ConnectionError>,
|
|
||||||
T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
T: ControlStreams,
|
|
||||||
T: ReadySink,
|
|
||||||
{
|
|
||||||
fn poll_ready(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_ready()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_control_flow!(StreamSendOpen);
|
proxy_control_flow!(StreamSendOpen);
|
||||||
proxy_control_streams!(StreamSendOpen);
|
proxy_control_streams!(StreamSendOpen);
|
||||||
proxy_control_ping!(StreamSendOpen);
|
proxy_control_ping!(StreamSendOpen);
|
||||||
|
proxy_stream!(StreamSendOpen);
|
||||||
|
proxy_ready_sink!(StreamSendOpen; ControlStreams);
|
||||||
|
|||||||
@@ -279,43 +279,8 @@ impl<T, P: Peer> ControlStreams for StreamStates<T, P> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T, P> Stream for StreamStates<T, P>
|
|
||||||
where T: Stream<Item = Frame, Error = ConnectionError>,
|
|
||||||
{
|
|
||||||
type Item = Frame;
|
|
||||||
type Error = ConnectionError;
|
|
||||||
|
|
||||||
fn poll(&mut self) -> Poll<Option<Frame>, ConnectionError> {
|
|
||||||
self.inner.poll()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T, P, U> Sink for StreamStates<T, P>
|
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
{
|
|
||||||
type SinkItem = Frame<U>;
|
|
||||||
type SinkError = ConnectionError;
|
|
||||||
|
|
||||||
fn start_send(&mut self, item: Self::SinkItem) -> StartSend<Frame<U>, ConnectionError> {
|
|
||||||
self.inner.start_send(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll_complete(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_complete()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Proxy.
|
|
||||||
impl<T, P, U> ReadySink for StreamStates<T, P>
|
|
||||||
where T: Sink<SinkItem = Frame<U>, SinkError = ConnectionError>,
|
|
||||||
T: ReadySink,
|
|
||||||
{
|
|
||||||
fn poll_ready(&mut self) -> Poll<(), ConnectionError> {
|
|
||||||
self.inner.poll_ready()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_apply_settings!(StreamStates, P);
|
proxy_apply_settings!(StreamStates, P);
|
||||||
proxy_control_ping!(StreamStates, P);
|
proxy_control_ping!(StreamStates, P);
|
||||||
|
proxy_stream!(StreamStates, P);
|
||||||
|
proxy_sink!(StreamStates, P);
|
||||||
|
proxy_ready_sink!(StreamStates, P);
|
||||||
|
|||||||
Reference in New Issue
Block a user