HTTP GET JSON fetcher with timeout in Elixir

Elixir
defmodule HttpJson do
  def get(url, timeout \\ 5_000) do
    :inets.start()
    :ssl.start()
    request = {String.to_charlist(url), [{~c"accept", ~c"application/json"}]}
    opts = [timeout: timeout, connect_timeout: timeout]
    case :httpc.request(:get, request, opts, body_format: :binary) do
      {:ok, {{_, status, _}, _, body}} when status in 200..299 ->
        try do
          {:ok, :json.decode(body)}
        rescue
          _ -> {:error, {:invalid_json, body}}
        end
      {:ok, {{_, status, _}, _, _body}} -> {:error, {:http_status, status}}
      {:error, reason} -> {:error, reason}
    end
  end
end