To avoid the ugliness, we could change the QAPI generator. Currently,
{ 'command': 'migrate-set-parameters',
'data': 'MigrationParameters' }
generates the same interface as when you inline MigrationParameters,
namely
void qmp_migrate_set_parameters(bool has_compress_level,
int64_t compress_level,
bool has_compress_threads,
int64_t compress_threads,
bool has_decompress_threads,
int64_t decompress_threads,
... more ...
Error **errp)
It could instead generate
void qmp_migrate_set_parameters(MigrationParameters *parms,
Error **errp)
No change to the wire protocol. Fairly big, but relatively mechanical
change to the handler functions. I'd be willing to give it a shot and
see how it turns out, but I can't do it for 2.4, sorry.