defmodule Dust.Cache do
@callback read(target :: term(), store :: String.t(), path :: String.t()) ::
{:ok, term()} | :miss
@callback read_entry(target :: term(), store :: String.t(), path :: String.t()) ::
{:ok,
{value :: term(), type :: String.t(), seq :: integer(),
synced_at :: integer() | nil}}
| :miss
@callback read_all(target :: term(), store :: String.t(), pattern :: String.t()) :: [
{String.t(), term()}
]
@callback read_many(target :: term(), store :: String.t(), paths :: [String.t()]) ::
%{String.t() => {value :: term(), type :: String.t(), seq :: integer()}}
@callback read_subtree(target :: term(), store :: String.t(), path :: String.t()) ::
[{path :: String.t(), value :: term(), type :: String.t(), seq :: integer()}]
@callback write(
target :: term(),
store :: String.t(),
path :: String.t(),
value :: term(),
type :: String.t(),
seq :: integer()
) :: :ok
@callback write_batch(target :: term(), store :: String.t(), entries :: list()) :: :ok
@callback delete(target :: term(), store :: String.t(), path :: String.t()) :: :ok
@callback delete_subtree(target :: term(), store :: String.t(), path :: String.t()) ::
non_neg_integer()
@callback last_seq(target :: term(), store :: String.t()) :: integer()
@callback count(target :: term(), store :: String.t()) :: non_neg_integer()
@callback browse(target :: term(), store :: String.t(), opts :: keyword()) ::
{[{String.t(), term(), String.t(), integer()}], term() | nil}
@optional_callbacks [count: 2, browse: 3]
end