Current section

Files

Jump to
eventstore lib event_store notifications notification.ex
Raw

lib/event_store/notifications/notification.ex

defmodule EventStore.Notifications.Notification do
@moduledoc false
alias EventStore.Notifications.Notification
defstruct [:stream_uuid, :stream_id, :from_stream_version, :to_stream_version]
@doc """
Build a new notification struct from the `NOTIFY` payload which contains the
stream uuid, stream id, first and last stream versions.
## Example
Notification.new("stream-12345,1,1,5")
"""
def new(payload) do
[last, first, stream_id, stream_uuid] =
payload
|> String.reverse()
|> String.split(",", parts: 4)
|> Enum.map(&String.reverse/1)
{stream_id, ""} = Integer.parse(stream_id)
{from_stream_version, ""} = Integer.parse(first)
{to_stream_version, ""} = Integer.parse(last)
%Notification{
stream_uuid: stream_uuid,
stream_id: stream_id,
from_stream_version: from_stream_version,
to_stream_version: to_stream_version
}
end
end