1- use std:: { cell :: RefCell , future:: Future , rc :: Rc } ;
1+ use std:: future:: Future ;
22
3- use ntex:: codec:: { AsyncRead , AsyncWrite } ;
43use ntex:: connect:: { self , Address , Connect , Connector } ;
5- use ntex:: framed :: { ReadTask , State , WriteTask } ;
4+ use ntex:: io :: { Filter , Io , IoBoxed } ;
65use ntex:: { service:: Service , time:: Seconds , util:: ByteString , util:: PoolId , util:: PoolRef } ;
76
87#[ cfg( feature = "openssl" ) ]
9- use ntex:: connect:: openssl:: { OpensslConnector , SslConnector } ;
8+ use ntex:: connect:: openssl:: { self , SslConnector } ;
109
1110#[ cfg( feature = "rustls" ) ]
12- use ntex:: connect:: rustls:: { ClientConfig , RustlsConnector } ;
11+ use ntex:: connect:: rustls:: { self , ClientConfig } ;
1312
1413use super :: errors:: ConnectError ;
1514use super :: { cmd, Client , SimpleClient } ;
@@ -28,11 +27,16 @@ where
2827{
2928 #[ allow( clippy:: new_ret_no_self) ]
3029 /// Create new redis connector
31- pub fn new ( address : A ) -> RedisConnector < A , Connector < A > > {
30+ pub fn new (
31+ address : A ,
32+ ) -> RedisConnector <
33+ A ,
34+ impl Service < Request = Connect < A > , Response = IoBoxed , Error = connect:: ConnectError > ,
35+ > {
3236 RedisConnector {
3337 address,
3438 passwords : Vec :: new ( ) ,
35- connector : Connector :: default ( ) ,
39+ connector : Connector :: default ( ) . map ( |io| io . into_boxed ( ) ) ,
3640 pool : PoolId :: P7 . pool_ref ( ) ,
3741 }
3842 }
4145impl < A , T > RedisConnector < A , T >
4246where
4347 A : Address + Clone ,
44- T : Service < Request = Connect < A > , Error = connect:: ConnectError > ,
45- T :: Response : AsyncRead + AsyncWrite + Unpin + ' static ,
48+ T : Service < Request = Connect < A > , Response = IoBoxed , Error = connect:: ConnectError > ,
4649{
4750 /// Add redis auth password
4851 pub fn password < U > ( mut self , password : U ) -> Self
@@ -63,29 +66,20 @@ where
6366 self
6467 }
6568
66- #[ doc( hidden) ]
67- #[ deprecated( since = "0.2.4" , note = "Use memory pool config" ) ]
68- #[ inline]
69- /// Set read/write buffer params
70- ///
71- /// By default read buffer is 16kb, write buffer is 16kb
72- pub fn buffer_params (
73- self ,
74- _max_read_buf_size : u16 ,
75- _max_write_buf_size : u16 ,
76- _min_buf_size : u16 ,
77- ) -> Self {
78- self
79- }
80-
8169 /// Use custom connector
82- pub fn connector < U > ( self , connector : U ) -> RedisConnector < A , U >
70+ pub fn connector < U , F > (
71+ self ,
72+ connector : U ,
73+ ) -> RedisConnector <
74+ A ,
75+ impl Service < Request = Connect < A > , Response = IoBoxed , Error = connect:: ConnectError > ,
76+ >
8377 where
84- U : Service < Request = Connect < A > , Error = connect :: ConnectError > ,
85- U :: Response : AsyncRead + AsyncWrite + Unpin + ' static ,
78+ F : Filter ,
79+ U : Service < Request = Connect < A > , Response = Io < F > , Error = connect :: ConnectError > ,
8680 {
8781 RedisConnector {
88- connector,
82+ connector : connector . map ( |io| io . into_boxed ( ) ) ,
8983 address : self . address ,
9084 passwords : self . passwords ,
9185 pool : self . pool ,
@@ -94,11 +88,17 @@ where
9488
9589 #[ cfg( feature = "openssl" ) ]
9690 /// Use openssl connector.
97- pub fn openssl ( self , connector : SslConnector ) -> RedisConnector < A , OpensslConnector < A > > {
91+ pub fn openssl (
92+ self ,
93+ connector : SslConnector ,
94+ ) -> RedisConnector <
95+ A ,
96+ impl Service < Request = Connect < A > , Response = IoBoxed , Error = connect:: ConnectError > ,
97+ > {
9898 RedisConnector {
9999 address : self . address ,
100100 passwords : self . passwords ,
101- connector : OpensslConnector :: new ( connector) ,
101+ connector : openssl :: Connector :: new ( connector) . map ( |io| io . into_boxed ( ) ) ,
102102 pool : self . pool ,
103103 }
104104 }
@@ -107,12 +107,15 @@ where
107107 /// Use rustls connector.
108108 pub fn rustls (
109109 self ,
110- config : std:: sync:: Arc < ClientConfig > ,
111- ) -> RedisConnector < A , RustlsConnector < A > > {
110+ config : ClientConfig ,
111+ ) -> RedisConnector <
112+ A ,
113+ impl Service < Request = Connect < A > , Response = IoBoxed , Error = connect:: ConnectError > ,
114+ > {
112115 RedisConnector {
113116 address : self . address ,
114117 passwords : self . passwords ,
115- connector : RustlsConnector :: new ( config) ,
118+ connector : rustls :: Connector :: new ( config) . map ( |io| io . into_boxed ( ) ) ,
116119 pool : self . pool ,
117120 }
118121 }
@@ -125,14 +128,10 @@ where
125128
126129 async move {
127130 let io = fut. await ?;
131+ io. set_memory_pool ( pool) ;
132+ io. set_disconnect_timeout ( Seconds :: ZERO . into ( ) ) ;
128133
129- let state = State :: with_memory_pool ( pool) ;
130- state. set_disconnect_timeout ( Seconds :: ZERO ) ;
131- let io = Rc :: new ( RefCell :: new ( io) ) ;
132- ntex:: rt:: spawn ( ReadTask :: new ( io. clone ( ) , state. clone ( ) ) ) ;
133- ntex:: rt:: spawn ( WriteTask :: new ( io, state. clone ( ) ) ) ;
134-
135- let client = Client :: new ( state) ;
134+ let client = Client :: new ( io) ;
136135
137136 if passwords. is_empty ( ) {
138137 Ok ( client)
@@ -155,14 +154,10 @@ where
155154
156155 async move {
157156 let io = fut. await ?;
157+ io. set_memory_pool ( pool) ;
158+ io. set_disconnect_timeout ( Seconds :: ZERO . into ( ) ) ;
158159
159- let state = State :: with_memory_pool ( pool) ;
160- state. set_disconnect_timeout ( Seconds :: ZERO ) ;
161- let io = Rc :: new ( RefCell :: new ( io) ) ;
162- ntex:: rt:: spawn ( ReadTask :: new ( io. clone ( ) , state. clone ( ) ) ) ;
163- ntex:: rt:: spawn ( WriteTask :: new ( io, state. clone ( ) ) ) ;
164-
165- let mut client = SimpleClient :: new ( state) ;
160+ let client = SimpleClient :: new ( io) ;
166161
167162 if passwords. is_empty ( ) {
168163 Ok ( client)
0 commit comments