Current section

Files

Jump to
ex_esdb lib ex_esdb topics.ex
Raw

lib/ex_esdb/topics.ex

defmodule ExESDB.Topics do
@moduledoc """
A module to calculate topic identifiers
"""
def selector_hash(selector) do
:erlang.phash2(selector)
|> Integer.to_string(16)
end
def sub_topic(:by_stream, "all-events", "$all"), do: "$all"
def sub_topic(:by_stream, "transient", selector), do: selector
def sub_topic(:by_stream, subscription_name, _selector), do: "$#{subscription_name}"
def sub_topic(:by_event_type, "transient", selector), do: selector
def sub_topic(:by_event_type, subscription_name, selector),
do: "*#{subscription_name}-#{selector}"
def sub_topic(:by_event_pattern, subscription_name, selector) do
selector_hash =
selector_hash(selector)
"evt-pat-#{subscription_name}-#{selector_hash}"
end
def sub_topic(:by_event_payload, subscription_name, selector) do
selector_hash =
selector_hash(selector)
"evt-pay-#{subscription_name}-#{selector_hash}"
end
end