lib/http/response.ex

defmodule BinanceHttp.Http.Response do

  def prepare_response(body, headers) do
    headers
    |> get_content_type()
    |> prepare_body(body)
  end

  defp get_content_type(headers) do
    result =
      Enum.find(headers, fn({k, _v}) ->
        k == "Content-Type"
      end)

    case result do
      {"Content-Type", value} ->
        value

      nil->
        :skip
    end
  end

  defp prepare_body(:skip, body), do: body
  defp prepare_body(type, body) do
    cond do
      String.contains?(type, "application/json") ->
        prepare_json(body)

      true ->
        body
    end
  end

  defp prepare_json(content) do
    case Jason.decode(content) do
      {:ok, result} ->
        result

      {:error, _reason} ->
       content
    end
  end
end