private static TResponse SetBody <TResponse>(ApiCallDetails details, RequestData requestData, Stream responseStream, string mimeType) where TResponse : class, IElasticsearchResponse, new() { byte[] bytes = null; var disableDirectStreaming = requestData.PostData?.DisableDirectStreaming ?? requestData.ConnectionSettings.DisableDirectStreaming; if (disableDirectStreaming || NeedsToEagerReadStream <TResponse>()) { var inMemoryStream = requestData.MemoryStreamFactory.Create(); responseStream.CopyTo(inMemoryStream, BufferSize); bytes = SwapStreams(ref responseStream, ref inMemoryStream); details.ResponseBodyInBytes = bytes; } using (responseStream) { if (SetSpecialTypes <TResponse>(bytes, out var r)) { return(r); } if (details.HttpStatusCode.HasValue && requestData.SkipDeserializationForStatusCodes.Contains(details.HttpStatusCode.Value)) { return(null); } if (requestData.CustomConverter != null) { return(requestData.CustomConverter(details, responseStream) as TResponse); } return(mimeType == null || !mimeType.StartsWith(requestData.RequestMimeType, StringComparison.Ordinal) ? null : requestData.ConnectionSettings.RequestResponseSerializer.Deserialize <TResponse>(responseStream)); } }
private static async Task <TResponse> SetBodyAsync <TResponse>( ApiCallDetails details, RequestData requestData, Stream responseStream, string mimeType, CancellationToken cancellationToken) where TResponse : class, IElasticsearchResponse, new() { byte[] bytes = null; var disableDirectStreaming = requestData.PostData?.DisableDirectStreaming ?? requestData.ConnectionSettings.DisableDirectStreaming; if (disableDirectStreaming || NeedsToEagerReadStream <TResponse>()) { var inMemoryStream = requestData.MemoryStreamFactory.Create(); await responseStream.CopyToAsync(inMemoryStream, BufferSize, cancellationToken).ConfigureAwait(false); bytes = SwapStreams(ref responseStream, ref inMemoryStream); details.ResponseBodyInBytes = bytes; } var needsDispose = typeof(TResponse) != typeof(ElasticsearchResponse <Stream>); using (needsDispose ? responseStream : EmptyDisposable) { if (SetSpecialTypes <TResponse>(responseStream, bytes, out var r)) { return(r); } if (details.HttpStatusCode.HasValue && requestData.SkipDeserializationForStatusCodes.Contains(details.HttpStatusCode.Value)) { return(null); } if (requestData.CustomConverter != null) { return(requestData.CustomConverter(details, responseStream) as TResponse); } return(mimeType == null || !mimeType.StartsWith(requestData.RequestMimeType, StringComparison.Ordinal) ? null : await requestData.ConnectionSettings.RequestResponseSerializer .DeserializeAsync <TResponse>(responseStream, cancellationToken) .ConfigureAwait(false)); } }