   The inspect protocol provides a nice representation of the connection.
 
   """
+  @type file_body_t :: {:file, Path.t}
   @type t :: %__MODULE__{
     state: :unsent | :sending | :sent | :error,
     method: Atom.t,

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


    query_string: Map.t,
    opts: Keyword.t,
    req_headers: %{binary => binary},
    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,
