Shuffle types around

This commit is contained in:
Carl Lerche
2017-06-27 11:04:36 -07:00
parent 1f85d54cff
commit 79aa11ad32
6 changed files with 91 additions and 56 deletions

View File

@@ -1,7 +1,6 @@
mod connection;
mod framed_read;
mod framed_write;
mod handshake;
mod ping_pong;
mod ready;
mod settings;
@@ -10,21 +9,50 @@ mod state;
pub use self::connection::{Connection};
pub use self::framed_read::FramedRead;
pub use self::framed_write::FramedWrite;
pub use self::handshake::Handshake;
pub use self::ping_pong::PingPong;
pub use self::ready::ReadySink;
pub use self::settings::Settings;
pub use self::state::State;
use tokio_io::codec::length_delimited;
use {frame, Peer};
/// Base HTTP/2.0 transport. Only handles framing.
type Framed<T> =
FramedWrite<
FramedRead<
length_delimited::FramedRead<T>>>;
use tokio_io::{AsyncRead, AsyncWrite};
use tokio_io::codec::length_delimited;
type Inner<T> =
Settings<
PingPong<
Framed<T>>>;
type Framed<T> =
FramedRead<
FramedWrite<T>>;
pub fn from_io<T, P>(io: T, settings: frame::SettingSet)
-> Connection<T, P>
where T: AsyncRead + AsyncWrite,
P: Peer,
{
let framed_write = FramedWrite::new(io);
// Delimit the frames
let framed_read = length_delimited::Builder::new()
.big_endian()
.length_field_length(3)
.length_adjustment(9)
.num_skip(0) // Don't skip the header
.new_read(framed_write);
// Map to `Frame` types
let framed = FramedRead::new(framed_read);
// Add ping/pong handler
let ping_pong = PingPong::new(framed);
// Add settings handler
let settings = Settings::new(
ping_pong, settings);
// Finally, return the constructed `Connection`
connection::new(settings)
}