On 09/16/2015 01:11 AM, Wen Congyang wrote: >>>> Possible workaround in the meantime - instead of trying to go with a >>>> nice flat union (where all QMP keys are in the same {} level), we can >>>> use nesting (structs that add another {} to include the unions). >>> >>> How to include the unions to a structs? Use 'base'? >> >> Conceptually, by adding a layer of nesting. On the wire, instead of: >> >> { "switch1":"value", "switch2":"value", "body2":"blah" } >> >> you would instead have: >> >> { "switch1":"value", "data": { "switch2":"value", "body2":"blah" } } >> >> Anywhere in qapi that you try to have: >> { 'union': ..., 'data':{'switch1':'Union'}} >> >> you instead create a wrapper type: >> { 'struct':'Wrapper', 'data':{'data':'Union'}} >> { 'union': ..., 'data':{'switch1':'Wrapper'}} > > If so, the option is "data.switch1" not "switch1" > >> >> >> What I don't know is whether the extra QMP nesting makes it easier or >> harder to support the existing NBD command line options, and it would > > Yes, it is harder to support it. All the more reason to push the qapi improvements through, so that qapi can expose a flat union and not make the command line have to go through ugly nesting. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org