lib/nomad_client/connection.ex

# NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
# https://openapi-generator.tech
# Do not edit the class manually.

defmodule NomadClient.Connection do
  @moduledoc """
  Handle Tesla connections for NomadClient.
  """

  defdelegate request(conn, request), to: Tesla

  @doc """
  Configure a client connection using Basic authentication.

  ## Parameters

  - url (String): Nomad URL Endpoint)
  - token (String): ACL Token

  # Returns

  Tesla.Env.client
  """
  def new(url \\ "http://localhost:4646", token \\ nil)

  def new(url, nil) do
    Tesla.client(default_opts(url), default_adapter())
  end

  def new(url, token) do
    Tesla.client(
      [
        {Tesla.Middleware.Headers, [{"X-NOMAD-TOKEN", token}]}
        | default_opts(url)
      ],
      default_adapter()
    )
  end

  defp default_opts(url) do
    base_url =
      url
      |> URI.parse()
      |> maybe_fix_path()
      |> URI.to_string()

    middleware =
      :tesla
      |> Application.get_env(__MODULE__, [])
      |> Keyword.get(:middleware, [])

    [
      {Tesla.Middleware.BaseUrl, base_url},
      {Tesla.Middleware.Headers, [{"User-Agent", "Elixir"}]},
      {Tesla.Middleware.EncodeJson, [engine: Poison]}
      | middleware
    ]
  end

  defp default_adapter do
    :tesla
    |> Application.get_env(__MODULE__, [])
    |> Keyword.get(:adapter, nil)
  end

  defp maybe_fix_path(%{path: path} = uri) when path in [nil, "/", ""] do
    %{uri | path: "/v1"}
  end

  defp maybe_fix_path(uri), do: uri
end