1defmodule Drinkup.Event.Identity do
2 @moduledoc """
3 Struct for identity events from the ATProto Firehose.
4 """
5
6 use TypedStruct
7
8 typedstruct enforce: true do
9 field :seq, integer()
10 field :did, String.t()
11 field :time, NaiveDateTime.t()
12 field :handle, String.t() | nil
13 end
14
15 @spec from(map()) :: t()
16 def from(%{"seq" => seq, "did" => did, "time" => time} = msg) do
17 handle = Map.get(msg, "handle")
18 time = NaiveDateTime.from_iso8601!(time)
19
20 %__MODULE__{
21 seq: seq,
22 did: did,
23 time: time,
24 handle: handle
25 }
26 end
27end