# `WardrikEvents.Encoder.Value`

Encodes the values inside an event's data as JSON-ready maps with string keys.

# `capped`

```elixir
@spec capped(map(), String.t(), term()) :: map()
```

Puts `value` under `key`. If it's longer than 64 KiB, cuts it short and sets `"truncated"`.

# `cost`

```elixir
@spec cost(map(), String.t()) :: map() | nil
```

Encodes a call's cost as whole micro-dollars. Returns `nil` if it isn't priced.

# `error`

```elixir
@spec error(term()) :: map()
```

Encodes why something failed, as OpenTelemetry's `error.type` and a message.

# `json`

```elixir
@spec json(term()) :: term()
```

Encodes any term as JSON. Maps get string keys, atoms become strings and structs become maps.

# `message`

```elixir
@spec message(ReqLLM.Message.t(), String.t() | nil) :: map()
```

Encodes a message. Uses `id`, or the id in its metadata.

# `principal`

```elixir
@spec principal(WardrikCore.Principal.t() | nil) :: map() | nil
```

Encodes who did something.

# `put`

```elixir
@spec put(map(), String.t(), term()) :: map()
```

Puts `value` under `key`, unless it's `nil`.

# `usage`

```elixir
@spec usage(map()) :: map() | nil
```

Encodes the tokens a model call read and wrote. Returns `nil` if there are none.

---

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