Adapter specification for HTTP clients and API for accessing them.
@callback get(url :: String.t(), headers :: [{String.t(), binary()}], opts :: keyword()) :: {:ok, status :: 200..599, headers :: [{String.t(), binary()}], body :: term()} | {:error, String.t()}
@callback post( url :: String.t(), body :: binary(), headers :: [{String.t(), binary()}], opts :: keyword() ) :: {:ok, status :: 200..599, headers :: [{String.t(), binary()}], body :: term()} | {:error, String.t()}
@spec get( client :: module(), url :: String.t(), headers :: [{String.t(), binary()}], opts :: keyword() ) :: {:ok, status :: 200..599, headers :: [{String.t(), binary()}], body :: term()} | {:error, String.t()}
@spec post( client :: module(), url :: String.t(), payload :: binary(), headers :: [{String.t(), binary()}], opts :: keyword() ) :: {:ok, status :: 200..599, headers :: [{String.t(), binary()}], body :: term()} | {:error, String.t()}