Using bson_t as input into various mongoc driver

We use Mongo C driver and several functions such as mongoc_collection_replace_one for example use bson_t type as input argument for specifying options to use in document replacement/add request.
When reading the source code of mongoc_collection_replace_one it appears that bson_t is parsed back to extract the values in caller side packed into that bson_t.

I fail to understand what’s point of such thing versus just providing the internal struct mongoc_replace_one_opts_t and let caller filling members as appropriate. This would avoid pain creating a BSON document, allocating heap memory etc… and subsequent parsing.