defmodule Mobilizon.Service.ErrorReporting do @moduledoc """ Module to load and configure error reporting adapters """ @callback enabled? :: boolean() @callback configure :: any() @callback attach :: any() @callback handle_event(list(atom()), map(), map(), any()) :: any() @spec adapter :: module() | nil def adapter do adapter = Mobilizon.Config.get([__MODULE__, :adapter]) if adapter && adapter.enabled?(), do: adapter, else: nil end def attach do adapter = adapter() if adapter do adapter.attach() end end @spec handle_event(list(atom()), map(), map(), any()) :: any() def handle_event(event_name, event_measurements, event_metadata, handler_config) do adapter = adapter() if adapter do adapter.handle_event(event_name, event_measurements, event_metadata, handler_config) end end @spec configure :: any() def configure do adapter = adapter() if adapter do adapter.configure() end end end