Elixir ATProtocol firehose & subscription listener
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