Unified value formatting for RPC input/output.
Traverses composite values recursively, applying field name mappings
and type-aware formatting at each level. All type dispatch uses
%Ash.Info.Manifest.Type{} exclusively — no raw Ash type atoms or
{:array, _} tuples.
Key Design Principle
The "parent resource" is never needed because each type is self-describing.
When we recurse into a nested value, we pass the sub-field's
%Ash.Info.Manifest.Type{} which contains all type information needed.
Summary
Functions
Formats a value based on its type.
Types
Functions
@spec format( term(), Ash.Info.Manifest.Type.t() | Ash.Info.Manifest.Field.t() | Ash.Info.Manifest.Relationship.t() | nil, keyword(), atom(), direction(), map() | nil, map() ) :: term()
Formats a value based on its type.
Parameters
value- The value to formattype- An%Ash.Info.Manifest.Type{},%Ash.Info.Manifest.Field{},%Ash.Info.Manifest.Relationship{}, or nilconstraints- Unused (kept for backward compatibility at call sites)formatter- The field formatter configuration (:camel_case,:snake_case, etc.)direction-:input(client→internal) or:output(internal→client)resource_lookups- Pre-computed resource lookup map