     query_string: Map.t,
     opts: Keyword.t,
     req_headers: %{binary => binary},
-    req_body: iodata | Map.t,
+    req_body: iodata | Map.t | Maxwell.Multipart.t | file_body_t | Stream.t,
     status: non_neg_integer | nil,
     resp_headers: %{binary => binary},
     resp_body: iodata | Map.t,

      iex> new("http://example.com/foo?bar=qux")
      %Maxwell.Conn{url: "http://example.com", path: "/foo", query_string: %{"bar" => "qux"}}
  """
  def new(), do: %Conn{}
  def new(url) when is_binary(url) do
    %URI{scheme: scheme, path: path, query: query} = uri = URI.parse(url)
    scheme = scheme || "http"

       iex> put_path(new(), "delete")
       %Maxwell.Conn{path: "delete"}
  """
  @spec put_path(t, String.t) :: t | no_return
  def put_path(%Conn{state: :unsent} = conn, path), do: %{conn | path: path}
  def put_path(_conn, _path), do: raise AlreadySentError

