1defmodule Drinkup.Event do
2 alias Drinkup.Event
3
4 @type t() ::
5 Event.Commit.t()
6 | Event.Sync.t()
7 | Event.Identity.t()
8 | Event.Account.t()
9 | Event.Info.t()
10
11 @spec from(String.t(), map()) :: t() | nil
12 def from("#commit", payload), do: Event.Commit.from(payload)
13 def from("#sync", payload), do: Event.Sync.from(payload)
14 def from("#identity", payload), do: Event.Identity.from(payload)
15 def from("#account", payload), do: Event.Account.from(payload)
16 def from("#info", payload), do: Event.Info.from(payload)
17 def from(_type, _payload), do: nil
18
19 @spec valid_seq?(integer() | nil, any()) :: boolean()
20 def valid_seq?(nil, seq) when is_integer(seq), do: true
21 def valid_seq?(last_seq, nil) when is_integer(last_seq), do: true
22 def valid_seq?(last_seq, seq) when is_integer(last_seq) and is_integer(seq), do: seq > last_seq
23 def valid_seq?(_last_seq, _seq), do: false
24end