Packages
ex_esdb
0.0.9-alpha
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
src/streams_filters.erl
-module(streams_filters).
-export([by_stream/1, by_event_type/1, by_event_pattern/1, by_event_payload/1]).
-include_lib("../deps/khepri/include/khepri.hrl").
by_stream(<<"$all">>) ->
khepri_evf:tree([streams,
#if_path_matches{regex = any},
#if_all{conditions =
[#if_path_matches{regex = any}, #if_has_data{has_data = true}]}],
#{on_actions => [create]});
by_stream(Stream) ->
List = binary_to_list(Stream),
case string:chr(List, $$) of
0 ->
{error, invalid_stream};
DollarPos ->
StreamUuid = string:substr(List, DollarPos + 1),
khepri_evf:tree([streams,
list_to_binary(StreamUuid),
#if_all{conditions =
[#if_path_matches{regex = any}, #if_has_data{has_data = true}]}],
#{on_actions => [create]})
end.
by_event_type(EventType) ->
by_event_pattern(#{event_type => EventType}).
by_event_pattern(EventPattern) ->
khepri_evf:tree([streams,
#if_path_matches{regex = any},
#if_all{conditions =
[#if_path_matches{regex = any},
#if_has_data{has_data = true},
#if_data_matches{pattern = EventPattern}]}],
#{on_actions => [create]}).
by_event_payload(PayloadPattern) ->
khepri_evf:tree([streams,
#if_path_matches{regex = any},
#if_all{conditions =
[#if_path_matches{regex = any},
#if_has_data{has_data = true},
#if_data_matches{pattern = #{data => PayloadPattern}}]}],
#{on_actions => [create]}).