1defmodule Drinkup.Event.Sync do
2 @moduledoc """
3 Struct for sync 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 :blocks, binary()
12 field :rev, String.t()
13 field :time, NaiveDateTime.t()
14 end
15
16 @spec from(map()) :: t()
17 def from(%{"seq" => seq, "did" => did, "blocks" => blocks, "rev" => rev, "time" => time}) do
18 time = NaiveDateTime.from_iso8601!(time)
19
20 %__MODULE__{
21 seq: seq,
22 did: did,
23 blocks: blocks,
24 rev: rev,
25 time: time
26 }
27 end
28end