Current section

Files

Jump to
event_bus lib event_bus.ex
Raw

lib/event_bus.ex

defmodule EventBus do
@moduledoc """
Simple event bus implementation.
"""
alias EventBus.EventManager
alias EventBus.SubscriptionManager
@doc """
Send event to all listeners.
## Examples
EventBus.notify({:webhook_received, %{"message" => "Hi all!"}})
:ok
"""
@spec notify({:atom, any()}) :: :ok
def notify({_event_type, _event_data} = event) do
EventManager.notify(subscribers(), event)
end
@doc """
Subscribe to the bus.
## Examples
EventBus.subscribe(MyEventListener)
:ok
"""
@spec subscribe(any()) :: :ok
defdelegate subscribe(listener), to: SubscriptionManager, as: :subscribe
@doc """
Unsubscribe from the bus.
## Examples
EventBus.unsubscribe(MyEventListener)
:ok
"""
@spec unsubscribe(any()) :: :ok
defdelegate unsubscribe(listener), to: SubscriptionManager, as: :unsubscribe
@doc """
List the subscribers to the bus.
## Examples
EventBus.subscribers()
[MyEventListener]
"""
@spec subscribers() :: list(any())
defdelegate subscribers, to: SubscriptionManager, as: :subscribers
end