@type message() :: term()
@opaque t()
@type timestamp() :: pos_integer()
@callback handle_request({module(), message()}, timestamp(), t()) :: {{:ok, result :: term()}, t()} | {:error, reason :: term()}