lib/easypost/http/hackney.ex

defmodule EasyPost.HTTP.Hackney do
  @behaviour EasyPost.HTTP

  @spec request(
          EasyPost.http_method_t(),
          String.t(),
          EasyPost.http_headers_t(),
          String.t(),
          any
        ) :: { :ok, EasyPost.HTTP.response_t() } | { :error, any }
  def request(method, url, headers, body, opts) do
    opts = opts ++ [:with_body]

    response =
      :hackney.request(
        method,
        url,
        headers,
        body,
        opts
      )

    case response do
      { :ok, status_code, headers } ->
        { :ok, %{ body: "", headers: headers, status_code: status_code } }
      { :ok, status_code, headers, body } ->
        { :ok, %{ body: body, headers: headers, status_code: status_code } }
      _otherwise ->
        response
    end
  end
end