@@ -3,17 +3,20 @@ package com.twitter.finatra.http.internal.marshalling
33import com .twitter .concurrent .AsyncStream
44import com .twitter .finagle .http ._
55import com .twitter .finatra .http .internal .marshalling .CallbackConverter .url
6- import com .twitter .finatra .http .response .{ResponseBuilder , StreamingResponse }
7- import com .twitter .finatra .http .streaming .{FromReader , StreamingRequest }
6+ import com .twitter .finatra .http .response .{
7+ ResponseBuilder ,
8+ StreamingResponse => DeprecatedStreamingResponse
9+ }
10+ import com .twitter .finatra .http .streaming .{FromReader , StreamingRequest , StreamingResponse }
811import com .twitter .finatra .json .FinatraObjectMapper
912import com .twitter .finatra .json .internal .streaming .JsonStreamParser
1013import com .twitter .inject .TypeUtils
1114import com .twitter .io .{Buf , Reader }
1215import com .twitter .util .{Future , FuturePool , Promise }
1316import javax .inject .Inject
1417import scala .concurrent .{ExecutionContext => ScalaExecutionContext , Future => ScalaFuture }
15- import scala .util .{Failure , Success }
1618import scala .reflect .runtime .universe ._
19+ import scala .util .{Failure , Success }
1720
1821private object CallbackConverter {
1922 val url =
@@ -53,7 +56,7 @@ private[http] class CallbackConverter @Inject()(
5356 manifestRequestType match {
5457 case request if request == manifest[Request ] =>
5558 callback.asInstanceOf [Request => ResponseType ]
56- case streamingRequest if runtimeClassEqs[StreamingRequest [_ , _]](streamingRequest) =>
59+ case streamingRequest if runtimeClassEqs[StreamingRequest [Any , _]](streamingRequest) =>
5760 val streamIdentity = streamingRequest.typeArguments.head
5861 val streamType = streamingRequest.typeArguments.last
5962 request : Request =>
@@ -170,7 +173,8 @@ private[http] class CallbackConverter @Inject()(
170173 private def isStreamingType (manifested : Manifest [_]): Boolean = {
171174 runtimeClassEqs[AsyncStream [_]](manifested) ||
172175 runtimeClassEqs[Reader [_]](manifested) ||
173- runtimeClassEqs[StreamingResponse [_, _]](manifested)
176+ runtimeClassEqs[DeprecatedStreamingResponse [_, _]](manifested) ||
177+ runtimeClassEqs[StreamingResponse [Any , _]](manifested)
174178 }
175179
176180 /**
@@ -185,6 +189,7 @@ private[http] class CallbackConverter @Inject()(
185189 requestCallback : Request => ResponseType ,
186190 manifested : Manifest [_]
187191 ): Request => Future [Response ] = {
192+ // If the requestType is stream of Buf, pass it through without adding json fmt
188193 val (jsonPrefix, jsonSeparator, jsonSuffix) = {
189194 val typeArgs = TypeUtils .asManifest[RequestType ].typeArguments
190195 if (typeArgs.size == 1 && typeArgs.head.runtimeClass == classOf [Buf ]) {
@@ -197,37 +202,51 @@ private[http] class CallbackConverter @Inject()(
197202 case asyncStreamBuf if asyncStreamBuf == manifest[AsyncStream [Buf ]] =>
198203 request : Request =>
199204 val asyncStream = requestCallback(request).asInstanceOf [AsyncStream [Buf ]]
200- val streamingResponse =
201- StreamingResponse .apply[Buf ](toBuf = a => a)(asyncStream = asyncStream)
202- streamingResponse .toFutureFinagleResponse
205+ val depStreamingResponse =
206+ DeprecatedStreamingResponse .apply[Buf ](toBuf = a => a)(asyncStream = asyncStream)
207+ depStreamingResponse .toFutureFinagleResponse
203208 case asyncStream if runtimeClassEqs[AsyncStream [_]](asyncStream) =>
204209 request : Request =>
205210 val asyncStream = requestCallback(request).asInstanceOf [AsyncStream [_]]
206- val streamingResponse =
207- StreamingResponse .apply(
211+ val depStreamingResponse =
212+ DeprecatedStreamingResponse .apply(
208213 toBuf = mapper.writeValueAsBuf,
209214 prefix = jsonPrefix,
210215 separator = jsonSeparator,
211216 suffix = jsonSuffix)(asyncStream = asyncStream)
212- streamingResponse .toFutureFinagleResponse
217+ depStreamingResponse .toFutureFinagleResponse
213218 case readerBuf if readerBuf == manifest[Reader [Buf ]] =>
214219 request : Request =>
215220 val reader = requestCallback(request).asInstanceOf [Reader [Buf ]]
216- val streamingResponse =
217- StreamingResponse .apply[Buf ](toBuf = a => a)(asyncStream = Reader .toAsyncStream(reader))
218- streamingResponse.toFutureFinagleResponse
221+ val depStreamingResponse =
222+ DeprecatedStreamingResponse .apply[Buf ](toBuf = a => a)(
223+ asyncStream = Reader .toAsyncStream(reader))
224+ depStreamingResponse.toFutureFinagleResponse
219225 case reader if runtimeClassEqs[Reader [_]](reader) =>
220226 request : Request =>
221227 val reader = requestCallback(request).asInstanceOf [Reader [_]]
222- val streamingResponse = StreamingResponse .apply(
228+ val depStreamingResponse = DeprecatedStreamingResponse .apply(
223229 toBuf = mapper.writeValueAsBuf,
224230 prefix = jsonPrefix,
225231 separator = jsonSeparator,
226232 suffix = jsonSuffix)(asyncStream = Reader .toAsyncStream(reader))
227- streamingResponse.toFutureFinagleResponse
228- case streamingResponse if runtimeClassEqs[StreamingResponse [_, _]](streamingResponse) =>
233+ depStreamingResponse.toFutureFinagleResponse
234+ case depStreamingResponse
235+ if runtimeClassEqs[DeprecatedStreamingResponse [_, _]](depStreamingResponse) =>
229236 request : Request =>
230- requestCallback(request).asInstanceOf [StreamingResponse [_, _]].toFutureFinagleResponse
237+ requestCallback(request)
238+ .asInstanceOf [DeprecatedStreamingResponse [_, _]].toFutureFinagleResponse
239+ case streamingResponse if runtimeClassEqs[StreamingResponse [Any , _]](streamingResponse) =>
240+ request : Request =>
241+ streamingResponse.typeArguments.head match {
242+ case r : Reader [_] =>
243+ requestCallback(request).asInstanceOf [StreamingResponse [Reader , _]].toFutureResponse
244+ case as : AsyncStream [_] =>
245+ requestCallback(request)
246+ .asInstanceOf [StreamingResponse [AsyncStream , _]].toFutureResponse
247+ case _ =>
248+ requestCallback(request).asInstanceOf [StreamingResponse [Any , _]].toFutureResponse
249+ }
231250 }
232251 }
233252
0 commit comments