defmodule Tesla.Middleware.KeepRequest do @moduledoc """ Store request url ,body and headers into `:opts`. ## Examples ``` defmodule MyClient do use Tesla plug Tesla.Middleware.KeepRequest plug Tesla.Middleware.PathParams end {:ok, env} = MyClient.post("/users/:user_id", "request-data", opts: [path_params: [user_id: "1234]]) env.body # => "response-data" env.opts[:req_body] # => "request-data" env.opts[:req_headers] # => [{"request-headers", "are-safe"}, ...] env.opts[:req_url] # => "http://localhost:8000/users/:user_id ``` """ @behaviour Tesla.Middleware @impl Tesla.Middleware def call(env, next, _opts) do env |> Tesla.put_opt(:req_body, env.body) |> Tesla.put_opt(:req_headers, env.headers) |> Tesla.put_opt(:req_url, env.url) |> Tesla.run(next) end end