@@ -85,6 +85,7 @@ struct InMemoryServerCall {
8585 headers : RequestHeaders ,
8686 req_rx : mpsc:: UnboundedReceiver < InMemoryRequestStreamItem > ,
8787 resp_tx : mpsc:: UnboundedSender < InMemoryResponseStreamItem > ,
88+ trailer_tx : oneshot:: Sender < Trailers > ,
8889}
8990
9091enum InMemoryRequestStreamItem {
@@ -95,7 +96,6 @@ enum InMemoryRequestStreamItem {
9596enum InMemoryResponseStreamItem {
9697 Headers ( ResponseHeaders ) ,
9798 Message ( Box < dyn Buf + Send + Sync > ) ,
98- Trailers ( Trailers ) ,
9999 StreamClosed ,
100100}
101101
@@ -179,6 +179,7 @@ impl ServerListener for InMemoryListener {
179179 headers: call. headers,
180180 send: InMemoryServerSendStream { tx: call. resp_tx } ,
181181 recv: InMemoryServerRecvStream { rx: call. req_rx } ,
182+ trailers_tx: call. trailer_tx,
182183 } )
183184 }
184185 _ = self . inner. close_notify. notified( ) => {
@@ -204,7 +205,6 @@ impl ServerSendStream for InMemoryServerSendStream {
204205 let buf = m. encode ( ) . map_err ( |_| ( ) ) ?;
205206 InMemoryResponseStreamItem :: Message ( buf)
206207 }
207- ServerResponseStreamItem :: Trailers ( t) => InMemoryResponseStreamItem :: Trailers ( t) ,
208208 } ;
209209
210210 self . tx . send ( inmemory_item) . map_err ( |_| ( ) )
@@ -246,18 +246,23 @@ impl Invoke for InMemoryConnection {
246246 ) -> ( Self :: SendStream , Self :: RecvStream ) {
247247 let ( req_tx, req_rx) = mpsc:: unbounded_channel :: < InMemoryRequestStreamItem > ( ) ;
248248 let ( resp_tx, resp_rx) = mpsc:: unbounded_channel :: < InMemoryResponseStreamItem > ( ) ;
249+ let ( trailer_tx, trailer_rx) = oneshot:: channel ( ) ;
249250
250251 let call = InMemoryServerCall {
251252 headers,
252253 req_rx,
253254 resp_tx,
255+ trailer_tx,
254256 } ;
255257
256- let _ = self . s . try_send ( call) ;
258+ let _ = self . s . send ( call) . await ;
257259
258260 (
259261 Box :: new ( InMemoryClientSendStream { tx : Some ( req_tx) } ) ,
260- Box :: new ( InMemoryClientRecvStream { rx : resp_rx } ) ,
262+ Box :: new ( InMemoryClientRecvStream {
263+ rx : resp_rx,
264+ trailer_rx : Some ( trailer_rx) ,
265+ } ) ,
261266 )
262267 }
263268}
@@ -299,6 +304,7 @@ impl Drop for InMemoryClientSendStream {
299304
300305pub struct InMemoryClientRecvStream {
301306 rx : mpsc:: UnboundedReceiver < InMemoryResponseStreamItem > ,
307+ trailer_rx : Option < oneshot:: Receiver < Trailers > > ,
302308}
303309
304310impl ClientRecvStream for InMemoryClientRecvStream {
@@ -309,8 +315,14 @@ impl ClientRecvStream for InMemoryClientRecvStream {
309315 msg. decode ( & mut buf) . unwrap ( ) ;
310316 ClientResponseStreamItem :: Message ( ( ) )
311317 }
312- Some ( InMemoryResponseStreamItem :: Trailers ( t) ) => ClientResponseStreamItem :: Trailers ( t) ,
313- _ => ClientResponseStreamItem :: StreamClosed ,
318+ _ => {
319+ if let Some ( trailer_rx) = self . trailer_rx . take ( ) {
320+ if let Ok ( trailers) = trailer_rx. await {
321+ return ClientResponseStreamItem :: Trailers ( trailers) ;
322+ }
323+ }
324+ ClientResponseStreamItem :: StreamClosed
325+ }
314326 }
315327 }
316328}
0 commit comments