On Tue, Jul 16, 2013 at 12:48:36PM +0200, Paolo Bonzini wrote: > Il 16/07/2013 12:37, Amos Kong ha scritto: > > So here I defined a 'DataObject' type in qapi-schema.json, > > it's used to describe the dynamical dictionary/list/string. > > > > { 'type': 'DataObject', > > 'data': { '*key': 'str', '*type': 'str', '*data': ['DataObject'] } } Hi Paolo,
> This is missing '*optional': 'bool'. Also, how do you distinguish these: > > { 'command': 'query-tpm-types', 'returns': 'TpmType] } do you mean 'TpmType' ? not 'TpmType] { "name": "query-tpm-types", "type": "Command", "returns": [ > { > "type": "passthrough" > } ] }, > { 'command': 'query-tpm-types', 'returns': ['TpmType'] } { "name": "query-tpm-types", "type": "Command", "returns": [ > { > "type": "TpmType", > "data": [ > { > "type": "passthrough" > } > ] > } ] }, > > Could it have to be like this? > > 'data': { '*key': 'str', '*type': 'str', '*list': 'bool', > '*optional': 'bool', > '*data': ['DataObject'] } } there are three conditions: 1) list 2) dict 3) string > Can you document, in the commit message or the code, I added a document for QMP introspection support. (docs/qmp-full-introspection.txt) The DataObject is described in docs/qmp-full-introspection.txt in detail. > how you avoid infinite loops (possible with optional or list fields)? +We have four types (ImageInfo, BlockStats, PciDeviceInfo, SchemaData) +that uses themself in their own define data directly or indirectly, +we will not repeatedly extend them to avoid dead loop. +/* + * Use a string to record the visit path, type index of each node + * will be saved to the string, indexes are split by ':'. + */ related functions: pop_id() push_id() The detail needs to be added to qmp-full-introspection.txt > Paolo > > > Not all the keys in data will be used. > > # List: type > > # Dict: key, type > > # nested List: type, data > > # nested Dict: key, type, data > > > > The DataObject is described in docs/qmp-full-introspection.txt in > > detail. > > > > The following content gives an example of query-tpm-types: > > > > ## Define example in qapi-schema.json: > > > > { 'enum': 'TpmType', 'data': [ 'passthrough' ] } > > { 'command': 'query-tpm-types', 'returns': ['TpmType'] } > > > > ## Returned description: > > > > { > > "name": "query-tpm-types", > > "type": "Command", > > "returns": [ > > { > > "type": "TpmType", > > "data": [ > > { > > "type": "passthrough" > > } > > ] > > } > > ] > > }, -- Amos.