On 11/12/20 11:28 AM, Kevin Wolf wrote: > Introduce alias definitions for object types (structs and unions). This > allows using the same QAPI type and visitor for many syntax variations > that exist in the external representation, like between QMP and the > command line. It also provides a new tool for evolving the schema while > maintaining backwards compatibility during a deprecation period.
Cool! Obvious followup patch series: deprecate all QAPI members spelled with _ by making them aliases of new members spelled with -, so that we can finally have consistent spellings. > +=== Aliases === > + > +Object types, including structs and unions, can contain alias > +definitions. > + > +Aliases define alternative member names that may be used in the > +external representation to provide a value for a member in the same > +object or in a nested object. > + > +Syntax: > + ALIAS = { '*alias': STRING, > + 'source': [ STRING, ... ] } > + > +'source' is a list of member names representing the path to an object > +member, starting from the type where the alias definition is > +specified. It may refer to another alias name. It is allowed to use > +a path that doesn't necessarily match an existing member in every > +variant or even at all; in this case, the alias remains unused. > + > +If 'alias' is present, then the single member referred to by 'source' > +is made accessible with the name given in 'alias' in the type where > +the alias definition is specified. > + > +If 'alias' is not present, then all members in the object referred to > +by 'source' are made accessible in the type where the alias definition > +is specified with the same name as they have in 'source'. Is it worth an example of how to use this? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org