11use std:: fmt;
22use std:: io;
3+ use std:: io:: IoSlice ;
34use std:: pin:: Pin ;
45use std:: task:: { Context , Poll } ;
56
6- use bytes:: { Buf , BufMut } ;
77use hyper:: client:: connect:: { Connected , Connection } ;
8- use tokio:: io:: { AsyncRead , AsyncWrite } ;
9- pub use tokio_tls :: TlsStream ;
8+ use tokio:: io:: { AsyncRead , AsyncWrite , ReadBuf } ;
9+ pub use tokio_native_tls :: TlsStream ;
1010
1111/// A stream that might be protected with TLS.
1212pub enum MaybeHttpsStream < T > {
@@ -40,37 +40,17 @@ impl<T> From<TlsStream<T>> for MaybeHttpsStream<T> {
4040}
4141
4242impl < T : AsyncRead + AsyncWrite + Unpin > AsyncRead for MaybeHttpsStream < T > {
43- #[ inline]
44- unsafe fn prepare_uninitialized_buffer ( & self , buf : & mut [ std:: mem:: MaybeUninit < u8 > ] ) -> bool {
45- match self {
46- MaybeHttpsStream :: Http ( s) => s. prepare_uninitialized_buffer ( buf) ,
47- MaybeHttpsStream :: Https ( s) => s. prepare_uninitialized_buffer ( buf) ,
48- }
49- }
50-
5143 #[ inline]
5244 fn poll_read (
5345 self : Pin < & mut Self > ,
5446 cx : & mut Context ,
55- buf : & mut [ u8 ] ,
56- ) -> Poll < Result < usize , io:: Error > > {
47+ buf : & mut ReadBuf ,
48+ ) -> Poll < Result < ( ) , io:: Error > > {
5749 match Pin :: get_mut ( self ) {
5850 MaybeHttpsStream :: Http ( s) => Pin :: new ( s) . poll_read ( cx, buf) ,
5951 MaybeHttpsStream :: Https ( s) => Pin :: new ( s) . poll_read ( cx, buf) ,
6052 }
6153 }
62-
63- #[ inline]
64- fn poll_read_buf < B : BufMut > (
65- self : Pin < & mut Self > ,
66- cx : & mut Context < ' _ > ,
67- buf : & mut B ,
68- ) -> Poll < Result < usize , io:: Error > > {
69- match Pin :: get_mut ( self ) {
70- MaybeHttpsStream :: Http ( s) => Pin :: new ( s) . poll_read_buf ( cx, buf) ,
71- MaybeHttpsStream :: Https ( s) => Pin :: new ( s) . poll_read_buf ( cx, buf) ,
72- }
73- }
7454}
7555
7656impl < T : AsyncWrite + AsyncRead + Unpin > AsyncWrite for MaybeHttpsStream < T > {
@@ -86,15 +66,21 @@ impl<T: AsyncWrite + AsyncRead + Unpin> AsyncWrite for MaybeHttpsStream<T> {
8666 }
8767 }
8868
89- #[ inline]
90- fn poll_write_buf < B : Buf > (
69+ fn poll_write_vectored (
9170 self : Pin < & mut Self > ,
9271 cx : & mut Context < ' _ > ,
93- buf : & mut B ,
72+ bufs : & [ IoSlice < ' _ > ] ,
9473 ) -> Poll < Result < usize , io:: Error > > {
9574 match Pin :: get_mut ( self ) {
96- MaybeHttpsStream :: Http ( s) => Pin :: new ( s) . poll_write_buf ( cx, buf) ,
97- MaybeHttpsStream :: Https ( s) => Pin :: new ( s) . poll_write_buf ( cx, buf) ,
75+ MaybeHttpsStream :: Http ( s) => Pin :: new ( s) . poll_write_vectored ( cx, bufs) ,
76+ MaybeHttpsStream :: Https ( s) => Pin :: new ( s) . poll_write_vectored ( cx, bufs) ,
77+ }
78+ }
79+
80+ fn is_write_vectored ( & self ) -> bool {
81+ match self {
82+ MaybeHttpsStream :: Http ( s) => s. is_write_vectored ( ) ,
83+ MaybeHttpsStream :: Https ( s) => s. is_write_vectored ( ) ,
9884 }
9985 }
10086
@@ -119,7 +105,7 @@ impl<T: AsyncRead + AsyncWrite + Connection + Unpin> Connection for MaybeHttpsSt
119105 fn connected ( & self ) -> Connected {
120106 match self {
121107 MaybeHttpsStream :: Http ( s) => s. connected ( ) ,
122- MaybeHttpsStream :: Https ( s) => s. get_ref ( ) . connected ( ) ,
108+ MaybeHttpsStream :: Https ( s) => s. get_ref ( ) . get_ref ( ) . get_ref ( ) . connected ( ) ,
123109 }
124110 }
125111}
0 commit comments