use std::net::SocketAddr;
use fibers::sync::oneshot::Link;
use futures::{Sink, Stream};
use {Result, Error};
use message::RawMessage;
pub use self::udp::{UdpTransportBuilder, UdpTransport};
pub use self::tcp::{TcpClientTransport, TcpServerTransport};
mod udp;
mod tcp;
pub type MessageSinkItem = (SocketAddr, RawMessage, Option<Link<(), Error, (), ()>>);
pub trait MessageSink: Sink<SinkItem = MessageSinkItem, SinkError = Error> {}
pub trait MessageStream
: Stream<Item = (SocketAddr, Result<RawMessage>), Error = Error> {
}
pub trait Transport: MessageSink + MessageStream {}