defmodule Ejabberd.Config.EjabberdLogger do @moduledoc """ Module used to log validation errors given validated modules given validated modules. """ alias Ejabberd.Config.EjabberdModule @doc """ Given a list of modules validated, in the form of {:ok, mod} or {:error, mod, errors}, it logs to the user the errors found. """ @spec log_errors([EjabberdModule.t]) :: [EjabberdModule.t] def log_errors(modules_validated) when is_list(modules_validated) do Enum.each modules_validated, &do_log_errors/1 modules_validated end defp do_log_errors({:ok, _mod}), do: nil defp do_log_errors({:error, _mod, errors}), do: Enum.each errors, &do_log_errors/1 defp do_log_errors({:attribute, errors}), do: Enum.each errors, &log_attribute_error/1 defp do_log_errors({:dependency, errors}), do: Enum.each errors, &log_dependency_error/1 defp log_attribute_error({{attr_name, _val}, :attr_not_supported}), do: IO.puts "[ WARN ] Annotation @#{attr_name} is not supported." defp log_attribute_error({{attr_name, val}, :type_not_supported}), do: IO.puts "[ WARN ] Annotation @#{attr_name} with value #{inspect val} is not supported (type mismatch)." defp log_dependency_error({module, :not_found}), do: IO.puts "[ WARN ] Module #{inspect module} was not found, but is required as a dependency." end