On Mon, Dec 23, 2013 at 02:32:46PM +0800, Wenchao Xia wrote: > Hi, Amos > > >(resend without big attachment) > > > >Hello Eric, other > > > >We had "command, enumeration, type, unionobj" in Eric suggested DataObject > >union, it's helpful for us to provide meaningful metadata in the output. > >but there still exists some problem. > > > >We should describe some arbitrary data struct, I would like to call it > >"undefined struct" > > > If user have defined an arbitrary or embbed data struct, I think it > is better leave as it is, instead of generate a new struct for it.
I don't really generate a new struct for it, just try the arbitrary data as an abstract 'undefined' struct. In the output, it's "leave as it is". > Since qapi-visit.c and qapi-types.c doesn't have a "undefined" struct > for it now, it is a bit risk to do it only in QMP introspection. Maybe > leave it now, and support it when we found it is really useful?(and add > it in qapi-visit.c and qapi-types.c correspondly) > > >eg 1: > > { 'type': 'VersionInfo', > > 'data': {'qemu': {'major': 'int', 'minor': 'int', 'micro': 'int'}, > > 'package': 'str'} } > > it's same as: > > { 'type': 'newtype', > > 'data': {'major': 'int', 'minor': 'int', 'micro': 'int'} } > > { 'type': 'VersionInfo', > > 'data': { 'qemu': 'newtype', 'package': 'str'} } > > > > The difference between original 'DataObjectType' and > > 'DataObjectUndefinedStruct' > > is that we don't have 'name' for the DataObject union for undefined > > struct. > > so I set the 'name' item in DataObjectBase to be optional. > > > >eg 2: > > { 'command': 'human-monitor-command', > > 'data': {'command-line': 'str', '*cpu-index': 'int'}, > > 'returns': 'str' } > > ... 'returns': ['RxFilterInfo'] } > > ... 'returns': 'ChardevReturn' } > > > > We returns str (native type), list or extended dict here. Sometimes we > > returns a defined type, but it doesn't need to be extended. And we need > > to describe this kind of data (type str, dict or list) by "DataObject" > > in schema definition of DataObject** type. > > > > So I added a "'reference-type': 'String'" in DataObject union. > > list, dict will still be described by "DataObjectType" > > > I guess you want to tip what type may be returned? It seems a bit too > agressive, since the qapi-schema.json didn't tip that those types may > be returned. In command schema, the value of 'returns' tips the model of return data. It can be string(defined type/union/enum/etc) or undefined list/dict. > >You can find the draft patches here: > > https://github.com/kongove/qemu/commits/qmp-introspection > >I will post the V3 when I finish the cleanup. -- Amos.