One question in addition to what Eric already asked:

Am 02.04.2015 um 19:29 hat Markus Armbruster geschrieben:
> +{ 'enum': 'SchemaMetaType',
> +  'data': [ 'builtin', 'enum', 'array', 'object', 'alternate',
> +            'command', 'event' ] }
> +
> +{ 'type': 'SchemaInfoBase',
> +  'data': { 'name': 'str', 'meta-type': 'SchemaMetaType' } }
> +
> +{ 'enum': 'JSONPrimitiveType',
> +  'data': [ 'str', 'int', 'number', 'bool', 'null' ] }
> +
> +{ 'type': 'SchemaInfoBuiltin',
> +  'data': { 'json-type': 'JSONPrimitiveType' } }
> +
> +{ 'type': 'SchemaInfoEnum',
> +  'data': { 'values': ['str'] } }
> +
> +{ 'type': 'SchemaInfoArray',
> +  'data': { 'element-type': 'str' } }
> +
> +{ 'alternate': 'Value',
> +  'data': { 'int': 'int', 'number': 'number', 'str': 'str', 'bool': 'bool' } 
> }
> +
> +{ 'type': 'SchemaInfoObjectMember',
> +  'data': { 'name': 'str', 'type': 'str', '*default': 'Value' } }
> +# @default's type must match @type
> +# can only default simple types, not objects or arrays
> +
> +{ 'type': 'SchemaInfoObjectVariant',
> +  'data': { 'case': 'str',
> +            'members': [ 'SchemaInfoObjectMember' ] } }
> +
> +{ 'type': 'SchemaInfoObject',
> +  'data': { 'members': [ 'SchemaInfoObjectMember' ],
> +            '*discriminator': 'str',
> +            '*variants': [ 'SchemaInfoObjectVariant' ] } }
> +
> +{ 'type': 'SchemaInfoAlternate',
> +  'data': { 'members': [ 'SchemaInfoObjectMember' ] } }

I'm not sure if I understand correctly how this one works. My guess
would be this:

- The elements in members describe the different variants. That is, you
  choose of the members, whereas in SchemaInfoObject all of the members
  exist. Perhaps they should be using different names then?

- The type (= discriminator) of a variant is indirectly specified by the
  'type' of the SchemaInfoObjectMember: This is a QAPI type, but the
  JSON type can be resolved by checking 'meta-type' of the QAPI type
  (and SchemaInfoBuiltin if necessary)

- The 'name' in SchemaInfoObjectMember could be the key name of the
  variant in the alternate definition. However, this name isn't used
  anywhere in the QMP protocol, so maybe it is better kept internal.
  'name' isn't optional, though.

- The 'default' of SchemaInfoObjectMember must be omitted.

Do I understand the intention reasonably right? If so, maybe it would be
better to use a separate type for alternate variants.

Kevin

Reply via email to