On Tue, Aug 15, 2017 at 01:57:50PM -0500, Eric Blake wrote: > On 08/14/2017 04:57 PM, Eduardo Habkost wrote: > > Changelog > > --------- > > > > Changes v3 -> v4: > > * New compact representation of slot sets. > > * New generic code to automatically merge similar slots > > into a single entry in the command output while keeping > > implementations of the method simpler. > > * Example implementation of IDE and USB bus enumeration > > > > > Slot sets are represented by a list of option names and sets of > > possible values for each of those options. The command uses a > > compact representation for the set of valid values for an option. > > For example, the following set of 5 PCI functions: > > > > bus: pcie.0 > > device-number: 31 > > functions: 1,4,5,6,7 > > > > would be represented in the JSON data as: > > > > {"available":false,"count":5, > > "device-types":["pci-device"],"hotpluggable":false, > > "opts":[ > > {"option":"function","values":[1,[4,7]]}, > > A list (and not just a single-type list, but a list that mixes scalar > and sublist), > > > {"option":"device-number","values":31}, > > vs. a scalar. Why not a one-element array?
It was just to keep the representation as compact as possible, in the common case of single-value sets. Probably we can drop that feature as it saves only 2 bytes in the JSON representation. > > > {"option":"bus","values":"pcie.0"}], > > "opts-complete":true} > > > > I planned to use QAPI alternates to model/document that in the > > schema, but it would require implementing a few missing features > > in QAPI alternate support. > > Yeah, I can see how existing QAPI alternates do not yet support arrays, > which becomes important to your representation. Do you need help > getting the QAPI generator improved to support a particular feature that > you found to be lacking? I think the lack of support for lists on alternates was the main obstacle. Probably we would also need to remove the restriction against alternates with ambiguous string representations, to allow a list/number/string/bool alternate to be defined. Being able to set constraints on the number of elements of a list would be nice to have, but not required. -- Eduardo