I needed to programmatically generate some XML in a Vala project I’m working on, and I wanted to use Tim Bray’s Genx to do it. (At first I tried using libxml’s xmlwriter module but its namespace handling was inadequate, and it just made things generally unpleasant.)
The Genx API is really rather nice, and for the most part was well-suited to binding with Vala. Genx has a “sender” abstraction for the destination of its XML output, so I wrote a simple implementation that sends output to a GString (StringBuilder in Vala).
Unfortunately the API is also splattered with status return codes; necessary
in a plain C API, but with GLib using
GError
(exceptions in Vala) would be nicer. In my case however, my code didn’t need
to handle any failure cases: any status other than success indicates a bug. So
I wrote a bunch of thin wrappers around the Genx functions which just assert
a successful status using g_return_if_fail
and
family.
I’m releasing the wrapping code and .vapi file into the public domain, in case they are useful to someone else:
Place genx.vapi in your project’s vapi directory (--vapidir
option to
valac), ensure genx-glib.h is on your C compiler’s include search path, and
link genx-glib.c into your executable.