Current section

Files

Jump to
eredis_streams src eredis_streams.erl
Raw

src/eredis_streams.erl

%%%-------------------------------------------------------------------
%% @doc eredis_streams public API
%% @end
%%%-------------------------------------------------------------------
-module(eredis_streams).
-export(
[
start_stream/1,
push_message/3,
xack_message/2,
xack_message/3,
get_message_payload/1,
get_message_id/1
]
).
start_stream(StreamDeclaration) -> eredis_streams_sup:add_stream(StreamDeclaration).
xack_message(Conn, Message) -> xack_message(Conn, Message, #{}).
xack_message(
#{kind := eredis_streams, pool := Pool, stream := Stream, group := Group} = _Conn,
Message,
Opts
) ->
AutoXdel = maps:get(no_xdel, Opts, false) == false,
MsgId = get_message_id(Message),
case {eredis_streams_db:xack_message(Pool, Stream, Group, MsgId), AutoXdel} of
{ok, false} -> ok;
{ok, true} ->
case eredis_streams_db:xdel(Pool, Stream, MsgId) of
{ok, _} -> ok;
ErrXdel -> ErrXdel
end;
{ErrXack, _} -> ErrXack
end.
get_message_payload({_MsgId, MsgFields} = _Message) ->
proplists:get_value(<<"message">>, MsgFields);
get_message_payload(_) -> {error, wrong_message_format}.
get_message_id({MsgId, _MsgFields} = _Message) -> MsgId;
get_message_id(_) -> {error, wrong_message_format}.
push_message(Pool, Stream, Payload) -> eredis_streams_db:push_message(Pool, Stream, Payload).