defmodule Web3AptosEx.HTTP do
@moduledoc """
http behaviour && get default impl
"""
@callback json_rpc(
method :: String.t(),
param :: non_neg_integer() | list()
) ::
map()
@callback get(url :: String.t()) ::
{:error, String.t()} | {:ok, any}
@callback post(
url :: String.t(),
body :: String.t()
) ::
{:error, String.t()} | {:ok, any}
@callback post(
url :: String.t(),
body :: String.t(),
options :: String.t()
) ::
{:error, String.t()} | {:ok, any}
alias Web3AptosEx.HTTPImpl
def json_rpc(method, param), do: http_impl().json_rpc(method, param)
def get(url) when is_binary(url), do: http_impl().get(url)
def get(%{endpoint: url}), do: http_impl().get(url)
def post(url, body) when is_binary(url), do: http_impl().post(url, body)
def post(%{endpoint: url}, body), do: http_impl().post(url, body)
def post(url, body, :urlencoded) when is_binary(url),
do: http_impl().post(url, body, :urlencoded)
def post(%{endpoint: url}, body, :urlencoded), do: http_impl().post(url, body, :urlencoded)
defp http_impl() do
Application.get_env(:web3_aptos_ex, :http, HTTPImpl)
end
end