defmodule Actors.Node.Adapters.ErqwestAdapter do @moduledoc """ Tesla adapter using erqwest http client library """ @behaviour Tesla.Adapter @impl Tesla.Adapter def call(%Tesla.Env{} = env, opts) do name = Keyword.fetch!(opts, :name) opts = Tesla.Adapter.opts(env, opts) url = Tesla.build_url(env.url, env.query) case request(name, env.method, url, env.headers, env.body, opts) do {:ok, %{status: status, body: body, headers: headers}} -> {:ok, %Tesla.Env{env | status: status, headers: headers, body: body}} error -> {:error, Exception.message(error)} end end defp request(name, method, url, headers, body, _opts) do case method do :post -> :erqwest.post(name, url, %{body: body, headers: headers}) _ -> raise ArgumentError, "Method not supported #{inspect(method)}" end end end