Years ago during my tenure at MongoDB I worked on a couple libraries. Notably the libbson
and mongo-c-driver
libraries. One neat feature we had was this concept called BCON
which stood for BSON C Object Notation. It was a succinct format for creating BSON documents that made it easier to reason about what you were creating.
So I decided to do the same thing this evening around json-glib
because I found I was writing a lot of code to create objects/arrays/etc.
It looks something like this
g_autoptr(JsonNode) params = NULL; params = JCON_NEW ( "changes", "[" "{", "uri", JCON_STRING (src_uri), "type", JCON_INT (FILE_CHANGE_TYPE_DELETED), "}", "{", "uri", JCON_STRING (dst_uri), "type", JCON_INT (FILE_CHANGE_TYPE_CREATED), "}", "]" );
Since this uses va_list
it’s technically less type safe than your other options. But it uses some magic struct initializers to get things in a situation where we can bail at runtime if you did something wrong.
The other half that I’m currently still missing is the extraction support. If you replace JCON_NEW()
with JCON_EXTRACT(node)
and the values with pointers to values, you can quickly extract documents.
But that’s not done yet… so for next time…