defmodule Dust.Entry do
@moduledoc "A single cached entry with metadata."
@type t :: %__MODULE__{
path: String.t(),
value: term(),
type: String.t(),
revision: integer(),
synced_at: integer() | nil
}
defstruct [:path, :value, :type, :revision, :synced_at]
@doc """
Builds an entry. `:synced_at` is optional and defaults to `nil` — it is
the local wall-clock (unix epoch ms) when this mirror last wrote the
row, populated for leaf reads and left `nil` for subtree-assembled
entries.
"""
@spec new(keyword()) :: t()
def new(opts) do
%__MODULE__{
path: Keyword.fetch!(opts, :path),
value: Keyword.fetch!(opts, :value),
type: Keyword.fetch!(opts, :type),
revision: Keyword.fetch!(opts, :revision),
synced_at: Keyword.get(opts, :synced_at)
}
end
end