There is no way to create a new TableMetadata struct outside a deserialization operation. I don't know if it's intended but all other struct have either builder or public field.
By the way i dont see clearly a consistent way of building API struct. Sometimes there is a builder and no public field, sometimes public field and no builder and sometimes builder and public field.
To have a better visibility on this I could write, if you want, a short table summary if needed with all API struct and two column : pub field (yes/no), builder (yes/no)