lib/mix/tasks/xmpp.namespaces.ex

defmodule Mix.Tasks.Xmpp.Namespaces do
  use Mix.Task

  @shortdoc "Prints all namespaces"

  @moduledoc """
  Prints all namespaces for the router.

      $ mix xmpp.namespaces

  The default router is inflected from the application
  name.
  """

  @doc false
  def run(args) do
    Mix.Task.run("compile", args)

    router =
      Mix.Project.config()
      |> Keyword.fetch!(:app)
      |> Application.get_env(:router)

    if router do
      for namespace <- router.route_info(:namespaces), do: pretty_print(namespace)
    else
      IO.puts("No router configured!")
    end
  end

  defp pretty_print(namespace) do
    IO.puts(namespace)
  end
end