lib/avalanche/request.ex

defmodule Avalanche.Request do
  @moduledoc """
  Request helpers.
  """

  @user_agent "avalanche/#{Mix.Project.config()[:version]}"
  @statements_path "/api/v2/statements"

  def statements_path, do: @statements_path

  def build_headers(options, token_type) do
    user_agent = Keyword.get(options, :user_agent, @user_agent)

    [
      accept: "application/json",
      user_agent: user_agent,
      "X-Snowflake-Authorization-Token-Type": token_type
    ]
  end

  def fetch_token(options) do
    token_opts = Keyword.fetch!(options, :token)
    Avalanche.TokenCache.fetch_token(token_opts)
  end

  def server_url(options) do
    options |> Keyword.fetch!(:server) |> url_with_sheme()
  end

  defp url_with_sheme(url) do
    if url_without_scheme?(url), do: "https://" <> url, else: url
  end

  defp url_without_scheme?(url) when is_binary(url) do
    is_nil(URI.parse(url).scheme)
  end
end