Produce a JSON-safe copy of an MCP session-state map before it is written to a
jsonb column.
Anubis folds the whole request conn.assigns into the persisted session
frame, so the state map an Anubis.Server.Session.Store is handed can carry
values with no JSON.Encoder implementation - a request-scoped struct
(e.g. a host's authenticated-user struct), a tuple, a pid, a ref, a function,
a MapSet. Encoding such a map raises in the database driver, which - because
it happens mid-initialize - would crash the session process and drop the
connection.
sanitize/1 recursively drops anything non-encodable from its enclosing map
or list while preserving encodable siblings:
- a struct with a
JSON.Encoderimpl (DateTime,Date,Decimal, ...) is kept; a bare struct without one is dropped; - a map keeps only entries whose key is a valid JSON object key (binary or atom) and whose value survives sanitization;
- a list keeps only its surviving elements.
Keys are otherwise preserved as-is, so a string-keyed restore reads the same
values back after the jsonb round-trip. The result always encodes cleanly.
Summary
Functions
Return a JSON-encodable copy of value, dropping any non-encodable members.