defmodule IdempotencyPlug.Store do @moduledoc """ Module that defines the store callbacks. ## Examples defmodule CustomStore do @behaviour IdempotencyPlug.Store @impl true def setup(options) @impl true def lookup(request_id, options) @impl true def insert(request_id, fingerprint, data, options) @impl true def update(request_id, data, options) @impl true def prune(options) end """ @type options :: keyword() @type request_id :: binary() @type fingerprint :: binary() @type data :: term() @type expires_at :: DateTime.t() @callback setup(options()) :: :ok | {:error, term()} @callback lookup(request_id(), options()) :: {data(), fingerprint(), expires_at()} | :not_found @callback insert(request_id(), data(), fingerprint(), expires_at(), options()) :: :ok | {:error, term()} @callback update(request_id(), data(), expires_at(), options()) :: :ok | {:error, term()} @callback prune(options()) :: :ok end