Packages
ex_esdb
0.2.2
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
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