TStreamerInfo needs TClass.
TBranch-es are created based on TStreamerInfo data.
Within a branch, objects are serialized based on TStreamerElement data and through the TStreamerInfoActions created by TStreamerInfo.
TCollectionProxy is a fundamental ingredient.
Reading into emulated classes is provided by TStreamerInfo.
For streaming objects, we use TStreamerInfo or should have to recreate / duplicate its functionality.
For streaming builtin types or vectors thereof, TStreamerInfo does not provide significant functionality. Basic types and vectors thereof do not need TStreamerInfo.
We need approximately all functionality of TStreamerInfo, including schema evolution and read rules.
Question: should we copy/paste with different design choices? A lot of work. Is there a benefit that could outweigh costs?