lib/web3/http/httpoison.ex

defmodule Web3.HTTP.HTTPoison do
  @moduledoc """
  Uses `HTTPoison` for `Web3.HTTP`
  """

  alias Web3.HTTP

  @behaviour HTTP

  @impl HTTP
  def json_rpc(url, json, options) when is_binary(url) and is_list(options) do
    case HTTPoison.post(url, json, [{"Content-Type", "application/json"}], options) do
      {:ok, %HTTPoison.Response{body: body, status_code: status_code}} ->
        {:ok, %{body: body, status_code: status_code}}

      {:error, %HTTPoison.Error{reason: reason}} ->
        {:error, reason}
    end
  end

  def json_rpc(url, _json, _options) when is_nil(url), do: {:error, "URL is nil"}
end