Canonical boundary codec for cross-plane protocol payloads.
The codec intentionally decodes maps with binary keys only. Atom keys may be encoded from trusted in-memory structs, but external input never creates atoms during decode.
Summary
Types
@type canonical_value() :: nil | boolean() | integer() | String.t() | [canonical_value()] | %{required(String.t()) => canonical_value()}
Functions
@spec decode(String.t()) :: {:ok, canonical_value()} | {:error, term()}
@spec decode!(String.t()) :: canonical_value()
@spec normalize(term()) :: {:ok, canonical_value()} | {:error, term()}