# `WardrikEvents.Log`

Reads and writes one log: an agent's kept events in a store, in order, each under its sequence
number.

An index lists every log.

# `append`

```elixir
@spec append(WardrikStore.t(), :ets.table(), String.t(), WardrikEvents.CloudEvent.t()) ::
  {:ok, WardrikEvents.CloudEvent.t()} | {:error, term()}
```

Writes `event` at the log's next sequence number. Returns the event with its `sequence`.

# `last`

```elixir
@spec last(WardrikStore.t(), String.t()) :: non_neg_integer()
```

Returns the sequence number of the log's last event. If every event was dropped, returns the last dropped one's.

# `logs`

```elixir
@spec logs(WardrikStore.t(), String.t()) :: [String.t()]
```

Returns the logs whose names start with `prefix`.

# `oldest`

```elixir
@spec oldest(WardrikStore.t(), String.t()) :: pos_integer()
```

Returns the oldest sequence number the log holds. If it holds none, returns the next one it will write.

# `read`

```elixir
@spec read(WardrikStore.t(), String.t(), non_neg_integer(), non_neg_integer()) ::
  {:ok, [WardrikEvents.CloudEvent.t()]} | {:dropped, pos_integer()}
```

Returns up to `limit` events after the sequence number `after_sequence`.

Returns `{:dropped, oldest}` if retention dropped the next one.

# `trim`

```elixir
@spec trim(WardrikStore.t(), String.t(), DateTime.t()) :: :ok | {:error, term()}
```

Drops the log's events written before `cutoff`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
