@@ -90,19 +90,20 @@ impl Runner {
9090 } ) ) ;
9191 }
9292
93+ #[ inline]
9394 fn respond_request_response ( & self , sid : u32 , _flag : u16 , input : Payload ) {
9495 let responder = self . responder . clone ( ) ;
9596 let tx = self . tx . clone ( ) ;
9697 tokio:: spawn ( lazy ( move || {
9798 let result = responder
9899 . request_response ( input)
99- . map ( |res| {
100+ . map ( move |res| {
101+ let ( d, m) = res. split ( ) ;
100102 let mut bu = frame:: Payload :: builder ( sid, frame:: FLAG_COMPLETE ) ;
101- let ( data, metadata) = res. split ( ) ;
102- if let Some ( b) = data {
103+ if let Some ( b) = d {
103104 bu = bu. set_data ( b) ;
104105 }
105- if let Some ( b) = metadata {
106+ if let Some ( b) = m {
106107 bu = bu. set_metadata ( b) ;
107108 }
108109 bu. build ( )
@@ -115,9 +116,13 @@ impl Runner {
115116 . set_data ( Bytes :: from ( "TODO: should be error details" ) )
116117 . build ( ) ,
117118 } ;
119+
118120 tx. send ( sending)
119- . map ( move |_| ( ) )
120- . map_err ( |e| error ! ( "send frame failed: {}" , e) )
121+ . and_then ( move |_it| {
122+ debug ! ( "sent" ) ;
123+ Ok ( ( ) )
124+ } )
125+ . map_err ( move |e| error ! ( "send frame failed: {}" , e) )
121126 } ) ) ;
122127 }
123128
@@ -129,11 +134,12 @@ impl Runner {
129134 responder
130135 . request_stream ( input)
131136 . map ( |elem| {
137+ let ( d, m) = elem. split ( ) ;
132138 let mut bu = frame:: Payload :: builder ( sid, frame:: FLAG_NEXT ) ;
133- if let Some ( b) = elem . data ( ) {
139+ if let Some ( b) = d {
134140 bu = bu. set_data ( b) ;
135141 }
136- if let Some ( b) = elem . metadata ( ) {
142+ if let Some ( b) = m {
137143 bu = bu. set_metadata ( b) ;
138144 }
139145 bu. build ( )
@@ -157,7 +163,7 @@ impl Runner {
157163 debug ! ( "incoming frame#{}" , sid) ;
158164 match f. get_body ( ) {
159165 Body :: Setup ( v) => {
160- let pa = SetupPayload :: from ( & v) ;
166+ let pa = SetupPayload :: from ( v) ;
161167 match & self . acceptor {
162168 Acceptor :: Generate ( f) => {
163169 let rs = Box :: new ( self . socket . clone ( ) ) ;
@@ -168,7 +174,7 @@ impl Runner {
168174 } ;
169175 }
170176 Body :: Payload ( v) => {
171- let pa = Payload :: from ( & v) ;
177+ let pa = Payload :: from ( v) ;
172178 // pick handler
173179 let mut senders = handlers. map . write ( ) . unwrap ( ) ;
174180 let handler = senders. remove ( & sid) . unwrap ( ) ;
@@ -204,9 +210,13 @@ impl Runner {
204210 self . respond_request_response ( sid, flag, pa) ;
205211 }
206212 Body :: RequestStream ( v) => {
207- let pa = Payload :: from ( & v) ;
213+ let pa = Payload :: from ( v) ;
208214 self . respond_request_stream ( sid, flag, pa) ;
209215 }
216+ Body :: RequestFNF ( v) => {
217+ let pa = Payload :: from ( v) ;
218+ self . respond_fnf ( pa) ;
219+ }
210220 Body :: Keepalive ( v) => {
211221 if flag & frame:: FLAG_RESPOND != 0 {
212222 debug ! ( "got keepalive: {:?}" , v) ;
@@ -262,24 +272,23 @@ impl DuplexSocket {
262272
263273 pub fn setup ( & self , setup : SetupPayload ) -> impl Future < Item = ( ) , Error = RSocketError > {
264274 let mut bu = frame:: Setup :: builder ( 0 , 0 ) ;
265-
266- if let Some ( b) = setup. data ( ) {
267- bu = bu. set_data ( b) ;
268- }
269- if let Some ( b) = setup. metadata ( ) {
270- bu = bu. set_metadata ( b) ;
271- }
272275 if let Some ( s) = setup. data_mime_type ( ) {
273276 bu = bu. set_mime_data ( & s) ;
274277 }
275278 if let Some ( s) = setup. metadata_mime_type ( ) {
276279 bu = bu. set_mime_metadata ( & s) ;
277280 }
278- let sending = bu
281+ bu = bu
279282 . set_keepalive ( setup. keepalive_interval ( ) )
280- . set_lifetime ( setup. keepalive_lifetime ( ) )
281- . build ( ) ;
282- self . send_frame ( sending)
283+ . set_lifetime ( setup. keepalive_lifetime ( ) ) ;
284+ let ( d, m) = setup. split ( ) ;
285+ if let Some ( b) = d {
286+ bu = bu. set_data ( b) ;
287+ }
288+ if let Some ( b) = m {
289+ bu = bu. set_metadata ( b) ;
290+ }
291+ self . send_frame ( bu. build ( ) )
283292 }
284293
285294 fn send_frame ( & self , sending : Frame ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
@@ -300,9 +309,10 @@ impl DuplexSocket {
300309
301310impl RSocket for DuplexSocket {
302311 fn metadata_push ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
312+ let ( _d, m) = req. split ( ) ;
303313 let sid = self . seq . next ( ) ;
304314 let mut bu = frame:: MetadataPush :: builder ( sid, 0 ) ;
305- if let Some ( b) = req . metadata ( ) {
315+ if let Some ( b) = m {
306316 bu = bu. set_metadata ( b) ;
307317 }
308318 let sending = bu. build ( ) ;
@@ -315,12 +325,13 @@ impl RSocket for DuplexSocket {
315325 }
316326
317327 fn request_fnf ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
328+ let ( d, m) = req. split ( ) ;
318329 let sid = self . seq . next ( ) ;
319330 let mut bu = frame:: RequestFNF :: builder ( sid, 0 ) ;
320- if let Some ( b) = req . data ( ) {
331+ if let Some ( b) = d {
321332 bu = bu. set_data ( b) ;
322333 }
323- if let Some ( b) = req . metadata ( ) {
334+ if let Some ( b) = m {
324335 bu = bu. set_metadata ( b) ;
325336 }
326337 let sending = bu. build ( ) ;
@@ -336,16 +347,17 @@ impl RSocket for DuplexSocket {
336347 & self ,
337348 input : Payload ,
338349 ) -> Box < dyn Future < Item = Payload , Error = RSocketError > > {
350+ let ( d, m) = input. split ( ) ;
339351 let sid = self . seq . next ( ) ;
340352 let ( tx, caller) = RequestCaller :: new ( ) ;
341353 // register handler
342354 self . register_handler ( sid, Handler :: Request ( tx) ) ;
343355 // crate request frame
344356 let mut bu = frame:: RequestResponse :: builder ( sid, 0 ) ;
345- if let Some ( b) = input . data ( ) {
357+ if let Some ( b) = d {
346358 bu = bu. set_data ( b) ;
347359 }
348- if let Some ( b) = input . metadata ( ) {
360+ if let Some ( b) = m {
349361 bu = bu. set_metadata ( b) ;
350362 }
351363 let sending = bu. build ( ) ;
@@ -359,16 +371,17 @@ impl RSocket for DuplexSocket {
359371 & self ,
360372 input : Payload ,
361373 ) -> Box < dyn Stream < Item = Payload , Error = RSocketError > > {
374+ let ( d, m) = input. split ( ) ;
362375 let sid = self . seq . next ( ) ;
363376 // register handler
364377 let ( tx, caller) = StreamCaller :: new ( ) ;
365378 self . register_handler ( sid, Handler :: Stream ( tx) ) ;
366379 // crate stream frame
367380 let mut bu = frame:: RequestStream :: builder ( sid, 0 ) ;
368- if let Some ( b) = input . data ( ) {
381+ if let Some ( b) = d {
369382 bu = bu. set_data ( b) ;
370383 }
371- if let Some ( b) = input . metadata ( ) {
384+ if let Some ( b) = m {
372385 bu = bu. set_metadata ( b) ;
373386 }
374387 let sending = bu. build ( ) ;
0 commit comments