// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'byte_stream.dart';
import 'base_response.dart';
import 'base_request.dart';
import 'utils.dart';

/// An HTTP response where the response body is received asynchronously after
/// the headers have been received.
class StreamedResponse extends BaseResponse {
  /// The stream from which the response body data can be read. This should
  /// always be a single-subscription stream.
  final ByteStream stream;

  /// Creates a new streaming response. [stream] should be a single-subscription
  /// stream.
  StreamedResponse(
      Stream<List<int>> stream,
      int statusCode,
      {int contentLength,
       BaseRequest request,
       Map<String, String> headers: const <String, String> {},
       bool isRedirect: false,
       bool persistentConnection: true,
       String reasonPhrase})
    : this.stream = toByteStream(stream),
      super(
          statusCode,
          contentLength: contentLength,
          request: request,
          headers: headers,
          isRedirect: isRedirect,
          persistentConnection: persistentConnection,
          reasonPhrase: reasonPhrase);
}