// Copyright 2015 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.net.oldhttp;

struct URLResponse {
  /// If the response resulted in a network level error, this field will be set.
  HttpError? error;

  /// The response body.
  URLBody? body;

  /// The final URL of the response, after redirects have been followed.
  string? url;

  /// The HTTP status code. 0 if not applicable.
  uint32 status_code;

  /// The HTTP status line.
  string? status_line;

  /// The HTTP response headers.
  vector<HttpHeader>? headers;

  /// The MIME type of the response body.
  string? mime_type;

  /// The character set of the response body.
  string? charset;

  /// These fields are set to non-NULL if this response corresponds to a
  /// redirect.  Call the `FollowRedirect` method on the URLLoader instance to
  /// follow this redirect.
  string? redirect_method;
  string? redirect_url;
  string? redirect_referrer;
};
