A sortable identifier used to discriminate between array items – either a plain
string label (“west”) or an integer (“2015”). Kept as a small union type (rather than
always coercing to a string) so identifiers extracted from header labels render as
the JSON type they actually are (2015, not "2015").
Describes where a column’s cell value lands in the (possibly nested) output row.
Recursive variants wrap their continuation in Arc (not Box) to keep the type’s
size finite – same reasoning as Format::Array’s Arc<Format>: Column (and
therefore its key: Option<KeySegment>) is cloned repeatedly by resolve_columns()
during column resolution, so an O(1) refcount bump matters here the same way it does
for Format. Nothing in this tree needs Box’s unique-ownership guarantee.
Walks segment, inserting value at the location it describes within current.
current is a plain JSON object – the top-level row map for a column with no
nesting, or a nested/array-item object for anything reached via Object/Array.