@@ -2,15 +2,15 @@ use std::fmt;
2
2
use std:: io:: { self } ;
3
3
use std:: marker:: PhantomData ;
4
4
5
- use bytes:: Bytes ;
5
+ use bytes:: { Buf , Bytes } ;
6
6
use futures:: { Async , AsyncSink , Poll , StartSend } ;
7
7
use futures:: task:: Task ;
8
8
use http:: { Method , Version } ;
9
9
use tokio_io:: { AsyncRead , AsyncWrite } ;
10
10
11
11
use :: Chunk ;
12
12
use proto:: { BodyLength , Decode , Http1Transaction , MessageHead } ;
13
- use super :: io:: { Cursor , Buffered } ;
13
+ use super :: io:: { Buffered } ;
14
14
use super :: { EncodedBuf , Encoder , Decoder } ;
15
15
16
16
@@ -22,25 +22,14 @@ use super::{EncodedBuf, Encoder, Decoder};
22
22
/// determine if this connection can be kept alive after the message,
23
23
/// or if it is complete.
24
24
pub ( crate ) struct Conn < I , B , T > {
25
- io : Buffered < I , EncodedBuf < Cursor < B > > > ,
25
+ io : Buffered < I , EncodedBuf < B > > ,
26
26
state : State ,
27
27
_marker : PhantomData < T >
28
28
}
29
29
30
- /*
31
- impl<I, B> Conn<I, B, ClientTransaction>
32
- where I: AsyncRead + AsyncWrite,
33
- B: AsRef<[u8]>,
34
- {
35
- pub fn new_client(io: I) -> Conn<I, B, ClientTransaction> {
36
- Conn::new(io)
37
- }
38
- }
39
- */
40
-
41
30
impl < I , B , T > Conn < I , B , T >
42
31
where I : AsyncRead + AsyncWrite ,
43
- B : AsRef < [ u8 ] > ,
32
+ B : Buf ,
44
33
T : Http1Transaction ,
45
34
{
46
35
pub fn new ( io : I ) -> Conn < I , B , T > {
@@ -488,7 +477,7 @@ where I: AsyncRead + AsyncWrite,
488
477
if !self . can_buffer_body ( ) {
489
478
if let Async :: NotReady = self . flush ( ) ? {
490
479
// if chunk is Some(&[]), aka empty, whatever, just skip it
491
- if chunk. as_ref ( ) . map ( |c| c. as_ref ( ) . is_empty ( ) ) . unwrap_or ( false ) {
480
+ if chunk. as_ref ( ) . map ( |c| c. remaining ( ) == 0 ) . unwrap_or ( false ) {
492
481
return Ok ( AsyncSink :: Ready ) ;
493
482
} else {
494
483
return Ok ( AsyncSink :: NotReady ( chunk) ) ;
@@ -499,11 +488,11 @@ where I: AsyncRead + AsyncWrite,
499
488
let state = match self . state . writing {
500
489
Writing :: Body ( ref mut encoder) => {
501
490
if let Some ( chunk) = chunk {
502
- if chunk. as_ref ( ) . is_empty ( ) {
491
+ if chunk. remaining ( ) == 0 {
503
492
return Ok ( AsyncSink :: Ready ) ;
504
493
}
505
494
506
- let encoded = encoder. encode ( Cursor :: new ( chunk) ) ;
495
+ let encoded = encoder. encode ( chunk) ;
507
496
self . io . buffer ( encoded) ;
508
497
509
498
if encoder. is_eof ( ) {
@@ -612,7 +601,7 @@ where I: AsyncRead + AsyncWrite,
612
601
}
613
602
}
614
603
615
- impl < I , B : AsRef < [ u8 ] > , T > fmt:: Debug for Conn < I , B , T > {
604
+ impl < I , B : Buf , T > fmt:: Debug for Conn < I , B , T > {
616
605
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
617
606
f. debug_struct ( "Conn" )
618
607
. field ( "state" , & self . state )
0 commit comments