private async Task <StreamedResponse> ExecuteInternal(Request request, CancellationToken cancellationToken)
        {
            var responseMessage = await ExecuteRequest(request, cancellationToken);

            var response = new StreamedResponse(async() =>
            {
                var contentStream = await responseMessage.Content.ReadAsStreamAsync();

                // if there is a content-hash header value, we'll have to verify the returned stream with that hash
                var expectedHash = responseMessage.Content.Headers.ContentMD5;
                if (expectedHash != null)
                {
                    return(new MD5VerifiedStream(contentStream, expectedHash));
                }
                else
                {
                    return(contentStream);
                }
            }, responseMessage.Content.Headers.ContentLength)
            {
                StatusCode = responseMessage.StatusCode,
                Timestamp  = responseMessage.Headers.GetSingleHeaderValueAsDateTime(mwsTimestampHeaderName) ?? DateTimeOffset.UtcNow
            };

            response.Quota = ParseQuota(responseMessage, response.Timestamp);

            if (!response.Success)
            {
                await ReadError(responseMessage, response);
            }

            return(response);
        }
 public Task <StreamedResponse> Execute(Request request, CancellationToken cancellationToken = default)
 {
     if (configuredResult is Stream stream)
     {
         var expectedLength = stream.CanSeek ? (long?)stream.Length : null;
         var response       = new StreamedResponse(() => Task.FromResult(stream), expectedLength)
         {
             StatusCode = System.Net.HttpStatusCode.OK
         };
         return(Task.FromResult(response));
     }
     else
     {
         throw new InvalidOperationException("No expected stream configured");
     }
 }