Current section
Files
Jump to
Current section
Files
lib/reactive_commons/api/handlers_config.ex
defmodule HandlersConfig do
@moduledoc false
defstruct query_listeners: %{},
event_listeners: %{},
notification_event_listeners: %{},
command_listeners: %{},
invalid_message_handlers: %{},
queue_listeners: %{},
broker: :app
@type listener_type ::
:query_listeners
| :event_listeners
| :notification_event_listeners
| :command_listeners
| :invalid_message_handlers
| :queue_listeners
@spec add_listener(t(), listener_type(), String.t(), any()) :: t()
@type t :: %__MODULE__{
query_listeners: %{String.t() => any()},
event_listeners: %{String.t() => any()},
notification_event_listeners: %{String.t() => any()},
command_listeners: %{String.t() => any()},
invalid_message_handlers: %{String.t() => any()},
queue_listeners: %{String.t() => any()},
broker: atom()
}
@spec new(atom() | binary() | nil) :: t
def new(broker) when is_binary(broker), do: %__MODULE__{broker: SafeAtom.to_atom(broker)}
def new(broker) when is_atom(broker), do: %__MODULE__{broker: broker}
def add_listener(conf = %__MODULE__{broker: broker}, type, path, handler) do
Map.update!(conf, type, fn listeners_by_broker ->
Map.update(listeners_by_broker, broker, %{path => handler}, fn listeners_for_broker ->
Map.put(listeners_for_broker, path, handler)
end)
end)
end
end