lib/ex_rabbitmq_admin.ex

defmodule ExRabbitMQAdmin do
  @moduledoc """
  Default module for the RabbitMQ admin client.

  ### Configuration

  This module uses the `ExRabbitMQAdmin.Client` macro, and can be configured
  in `config.exs`.

      # config.ex
      config :ex_rabbitmq_admin, ExRabbitMQAdmin,
        base_url: "https://rabbitmq.example.com:15672",
        username: "guest",
        password: "guest"


  ### Examples

  * Create a client, add basic auth by reading default values from config and
    list all virtual hosts running in the RabbitMQ cluster.

        iex> ExRabbitMQAdmin.client()
             |> ExRabbitMQAdmin.add_basic_auth_middleware()
             |> ExRabbitMQAdmin.Vhost.list_vhosts()
        {:ok, %Tesla.Env{status: 200, body: [...]}}
  """

  use ExRabbitMQAdmin.Client,
    otp_app: :ex_rabbitmq_admin

  @doc """
  Get various bits of infroamtion about the RabbitMQ cluster.
  """
  @spec overview(client :: Tesla.Client.t()) :: {:ok, Tesla.Env.t()} | {:error, term()}
  def overview(client), do: Tesla.get(client, "/api/overview")

  @doc """
  Get the name of the RabbitMQ cluster.
  """
  @spec cluster_name(client :: Tesla.Client.t()) :: {:ok, Tesla.Env.t()} | {:error, term()}
  def cluster_name(client), do: Tesla.get(client, "/api/cluster-name")

  @doc """
  Get a list of extensions to the management plugin.
  """
  @spec extensions(client :: Tesla.Client.t()) :: {:ok, Tesla.Env.t()} | {:error, term()}
  def extensions(client), do: Tesla.get(client, "/api/extensions")

  @doc """
  Get details of the currently authenticated user.
  """
  @spec whoami(client :: Tesla.Client.t()) :: {:ok, Tesla.Env.t()} | {:error, term()}
  def whoami(client), do: Tesla.get(client, "/api/whoami")
end