qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

qapi-code-gen.rst (65144B)


      1 ==================================
      2 How to use the QAPI code generator
      3 ==================================
      4 
      5 ..
      6    Copyright IBM Corp. 2011
      7    Copyright (C) 2012-2016 Red Hat, Inc.
      8 
      9    This work is licensed under the terms of the GNU GPL, version 2 or
     10    later.  See the COPYING file in the top-level directory.
     11 
     12 
     13 Introduction
     14 ============
     15 
     16 QAPI is a native C API within QEMU which provides management-level
     17 functionality to internal and external users.  For external
     18 users/processes, this interface is made available by a JSON-based wire
     19 format for the QEMU Monitor Protocol (QMP) for controlling qemu, as
     20 well as the QEMU Guest Agent (QGA) for communicating with the guest.
     21 The remainder of this document uses "Client JSON Protocol" when
     22 referring to the wire contents of a QMP or QGA connection.
     23 
     24 To map between Client JSON Protocol interfaces and the native C API,
     25 we generate C code from a QAPI schema.  This document describes the
     26 QAPI schema language, and how it gets mapped to the Client JSON
     27 Protocol and to C.  It additionally provides guidance on maintaining
     28 Client JSON Protocol compatibility.
     29 
     30 
     31 The QAPI schema language
     32 ========================
     33 
     34 The QAPI schema defines the Client JSON Protocol's commands and
     35 events, as well as types used by them.  Forward references are
     36 allowed.
     37 
     38 It is permissible for the schema to contain additional types not used
     39 by any commands or events, for the side effect of generated C code
     40 used internally.
     41 
     42 There are several kinds of types: simple types (a number of built-in
     43 types, such as ``int`` and ``str``; as well as enumerations), arrays,
     44 complex types (structs and unions), and alternate types (a choice
     45 between other types).
     46 
     47 
     48 Schema syntax
     49 -------------
     50 
     51 Syntax is loosely based on `JSON <http://www.ietf.org/rfc/rfc8259.txt>`_.
     52 Differences:
     53 
     54 * Comments: start with a hash character (``#``) that is not part of a
     55   string, and extend to the end of the line.
     56 
     57 * Strings are enclosed in ``'single quotes'``, not ``"double quotes"``.
     58 
     59 * Strings are restricted to printable ASCII, and escape sequences to
     60   just ``\\``.
     61 
     62 * Numbers and ``null`` are not supported.
     63 
     64 A second layer of syntax defines the sequences of JSON texts that are
     65 a correctly structured QAPI schema.  We provide a grammar for this
     66 syntax in an EBNF-like notation:
     67 
     68 * Production rules look like ``non-terminal = expression``
     69 * Concatenation: expression ``A B`` matches expression ``A``, then ``B``
     70 * Alternation: expression ``A | B`` matches expression ``A`` or ``B``
     71 * Repetition: expression ``A...`` matches zero or more occurrences of
     72   expression ``A``
     73 * Repetition: expression ``A, ...`` matches zero or more occurrences of
     74   expression ``A`` separated by ``,``
     75 * Grouping: expression ``( A )`` matches expression ``A``
     76 * JSON's structural characters are terminals: ``{ } [ ] : ,``
     77 * JSON's literal names are terminals: ``false true``
     78 * String literals enclosed in ``'single quotes'`` are terminal, and match
     79   this JSON string, with a leading ``*`` stripped off
     80 * When JSON object member's name starts with ``*``, the member is
     81   optional.
     82 * The symbol ``STRING`` is a terminal, and matches any JSON string
     83 * The symbol ``BOOL`` is a terminal, and matches JSON ``false`` or ``true``
     84 * ALL-CAPS words other than ``STRING`` are non-terminals
     85 
     86 The order of members within JSON objects does not matter unless
     87 explicitly noted.
     88 
     89 A QAPI schema consists of a series of top-level expressions::
     90 
     91     SCHEMA = TOP-LEVEL-EXPR...
     92 
     93 The top-level expressions are all JSON objects.  Code and
     94 documentation is generated in schema definition order.  Code order
     95 should not matter.
     96 
     97 A top-level expressions is either a directive or a definition::
     98 
     99     TOP-LEVEL-EXPR = DIRECTIVE | DEFINITION
    100 
    101 There are two kinds of directives and six kinds of definitions::
    102 
    103     DIRECTIVE = INCLUDE | PRAGMA
    104     DEFINITION = ENUM | STRUCT | UNION | ALTERNATE | COMMAND | EVENT
    105 
    106 These are discussed in detail below.
    107 
    108 
    109 Built-in Types
    110 --------------
    111 
    112 The following types are predefined, and map to C as follows:
    113 
    114   ============= ============== ============================================
    115   Schema        C              JSON
    116   ============= ============== ============================================
    117   ``str``       ``char *``     any JSON string, UTF-8
    118   ``number``    ``double``     any JSON number
    119   ``int``       ``int64_t``    a JSON number without fractional part
    120                                that fits into the C integer type
    121   ``int8``      ``int8_t``     likewise
    122   ``int16``     ``int16_t``    likewise
    123   ``int32``     ``int32_t``    likewise
    124   ``int64``     ``int64_t``    likewise
    125   ``uint8``     ``uint8_t``    likewise
    126   ``uint16``    ``uint16_t``   likewise
    127   ``uint32``    ``uint32_t``   likewise
    128   ``uint64``    ``uint64_t``   likewise
    129   ``size``      ``uint64_t``   like ``uint64_t``, except
    130                                ``StringInputVisitor`` accepts size suffixes
    131   ``bool``      ``bool``       JSON ``true`` or ``false``
    132   ``null``      ``QNull *``    JSON ``null``
    133   ``any``       ``QObject *``  any JSON value
    134   ``QType``     ``QType``      JSON string matching enum ``QType`` values
    135   ============= ============== ============================================
    136 
    137 
    138 Include directives
    139 ------------------
    140 
    141 Syntax::
    142 
    143     INCLUDE = { 'include': STRING }
    144 
    145 The QAPI schema definitions can be modularized using the 'include' directive::
    146 
    147  { 'include': 'path/to/file.json' }
    148 
    149 The directive is evaluated recursively, and include paths are relative
    150 to the file using the directive.  Multiple includes of the same file
    151 are idempotent.
    152 
    153 As a matter of style, it is a good idea to have all files be
    154 self-contained, but at the moment, nothing prevents an included file
    155 from making a forward reference to a type that is only introduced by
    156 an outer file.  The parser may be made stricter in the future to
    157 prevent incomplete include files.
    158 
    159 .. _pragma:
    160 
    161 Pragma directives
    162 -----------------
    163 
    164 Syntax::
    165 
    166     PRAGMA = { 'pragma': {
    167                    '*doc-required': BOOL,
    168                    '*command-name-exceptions': [ STRING, ... ],
    169                    '*command-returns-exceptions': [ STRING, ... ],
    170                    '*member-name-exceptions': [ STRING, ... ] } }
    171 
    172 The pragma directive lets you control optional generator behavior.
    173 
    174 Pragma's scope is currently the complete schema.  Setting the same
    175 pragma to different values in parts of the schema doesn't work.
    176 
    177 Pragma 'doc-required' takes a boolean value.  If true, documentation
    178 is required.  Default is false.
    179 
    180 Pragma 'command-name-exceptions' takes a list of commands whose names
    181 may contain ``"_"`` instead of ``"-"``.  Default is none.
    182 
    183 Pragma 'command-returns-exceptions' takes a list of commands that may
    184 violate the rules on permitted return types.  Default is none.
    185 
    186 Pragma 'member-name-exceptions' takes a list of types whose member
    187 names may contain uppercase letters, and ``"_"`` instead of ``"-"``.
    188 Default is none.
    189 
    190 .. _ENUM-VALUE:
    191 
    192 Enumeration types
    193 -----------------
    194 
    195 Syntax::
    196 
    197     ENUM = { 'enum': STRING,
    198              'data': [ ENUM-VALUE, ... ],
    199              '*prefix': STRING,
    200              '*if': COND,
    201              '*features': FEATURES }
    202     ENUM-VALUE = STRING
    203                | { 'name': STRING,
    204                    '*if': COND,
    205                    '*features': FEATURES }
    206 
    207 Member 'enum' names the enum type.
    208 
    209 Each member of the 'data' array defines a value of the enumeration
    210 type.  The form STRING is shorthand for :code:`{ 'name': STRING }`.  The
    211 'name' values must be be distinct.
    212 
    213 Example::
    214 
    215  { 'enum': 'MyEnum', 'data': [ 'value1', 'value2', 'value3' ] }
    216 
    217 Nothing prevents an empty enumeration, although it is probably not
    218 useful.
    219 
    220 On the wire, an enumeration type's value is represented by its
    221 (string) name.  In C, it's represented by an enumeration constant.
    222 These are of the form PREFIX_NAME, where PREFIX is derived from the
    223 enumeration type's name, and NAME from the value's name.  For the
    224 example above, the generator maps 'MyEnum' to MY_ENUM and 'value1' to
    225 VALUE1, resulting in the enumeration constant MY_ENUM_VALUE1.  The
    226 optional 'prefix' member overrides PREFIX.
    227 
    228 The generated C enumeration constants have values 0, 1, ..., N-1 (in
    229 QAPI schema order), where N is the number of values.  There is an
    230 additional enumeration constant PREFIX__MAX with value N.
    231 
    232 Do not use string or an integer type when an enumeration type can do
    233 the job satisfactorily.
    234 
    235 The optional 'if' member specifies a conditional.  See `Configuring the
    236 schema`_ below for more on this.
    237 
    238 The optional 'features' member specifies features.  See Features_
    239 below for more on this.
    240 
    241 
    242 .. _TYPE-REF:
    243 
    244 Type references and array types
    245 -------------------------------
    246 
    247 Syntax::
    248 
    249     TYPE-REF = STRING | ARRAY-TYPE
    250     ARRAY-TYPE = [ STRING ]
    251 
    252 A string denotes the type named by the string.
    253 
    254 A one-element array containing a string denotes an array of the type
    255 named by the string.  Example: ``['int']`` denotes an array of ``int``.
    256 
    257 
    258 Struct types
    259 ------------
    260 
    261 Syntax::
    262 
    263     STRUCT = { 'struct': STRING,
    264                'data': MEMBERS,
    265                '*base': STRING,
    266                '*if': COND,
    267                '*features': FEATURES }
    268     MEMBERS = { MEMBER, ... }
    269     MEMBER = STRING : TYPE-REF
    270            | STRING : { 'type': TYPE-REF,
    271                         '*if': COND,
    272                         '*features': FEATURES }
    273 
    274 Member 'struct' names the struct type.
    275 
    276 Each MEMBER of the 'data' object defines a member of the struct type.
    277 
    278 .. _MEMBERS:
    279 
    280 The MEMBER's STRING name consists of an optional ``*`` prefix and the
    281 struct member name.  If ``*`` is present, the member is optional.
    282 
    283 The MEMBER's value defines its properties, in particular its type.
    284 The form TYPE-REF_ is shorthand for :code:`{ 'type': TYPE-REF }`.
    285 
    286 Example::
    287 
    288  { 'struct': 'MyType',
    289    'data': { 'member1': 'str', 'member2': ['int'], '*member3': 'str' } }
    290 
    291 A struct type corresponds to a struct in C, and an object in JSON.
    292 The C struct's members are generated in QAPI schema order.
    293 
    294 The optional 'base' member names a struct type whose members are to be
    295 included in this type.  They go first in the C struct.
    296 
    297 Example::
    298 
    299  { 'struct': 'BlockdevOptionsGenericFormat',
    300    'data': { 'file': 'str' } }
    301  { 'struct': 'BlockdevOptionsGenericCOWFormat',
    302    'base': 'BlockdevOptionsGenericFormat',
    303    'data': { '*backing': 'str' } }
    304 
    305 An example BlockdevOptionsGenericCOWFormat object on the wire could use
    306 both members like this::
    307 
    308  { "file": "/some/place/my-image",
    309    "backing": "/some/place/my-backing-file" }
    310 
    311 The optional 'if' member specifies a conditional.  See `Configuring
    312 the schema`_ below for more on this.
    313 
    314 The optional 'features' member specifies features.  See Features_
    315 below for more on this.
    316 
    317 
    318 Union types
    319 -----------
    320 
    321 Syntax::
    322 
    323     UNION = { 'union': STRING,
    324               'base': ( MEMBERS | STRING ),
    325               'discriminator': STRING,
    326               'data': BRANCHES,
    327               '*if': COND,
    328               '*features': FEATURES }
    329     BRANCHES = { BRANCH, ... }
    330     BRANCH = STRING : TYPE-REF
    331            | STRING : { 'type': TYPE-REF, '*if': COND }
    332 
    333 Member 'union' names the union type.
    334 
    335 The 'base' member defines the common members.  If it is a MEMBERS_
    336 object, it defines common members just like a struct type's 'data'
    337 member defines struct type members.  If it is a STRING, it names a
    338 struct type whose members are the common members.
    339 
    340 Member 'discriminator' must name a non-optional enum-typed member of
    341 the base struct.  That member's value selects a branch by its name.
    342 If no such branch exists, an empty branch is assumed.
    343 
    344 Each BRANCH of the 'data' object defines a branch of the union.  A
    345 union must have at least one branch.
    346 
    347 The BRANCH's STRING name is the branch name.  It must be a value of
    348 the discriminator enum type.
    349 
    350 The BRANCH's value defines the branch's properties, in particular its
    351 type.  The type must a struct type.  The form TYPE-REF_ is shorthand
    352 for :code:`{ 'type': TYPE-REF }`.
    353 
    354 In the Client JSON Protocol, a union is represented by an object with
    355 the common members (from the base type) and the selected branch's
    356 members.  The two sets of member names must be disjoint.
    357 
    358 Example::
    359 
    360  { 'enum': 'BlockdevDriver', 'data': [ 'file', 'qcow2' ] }
    361  { 'union': 'BlockdevOptions',
    362    'base': { 'driver': 'BlockdevDriver', '*read-only': 'bool' },
    363    'discriminator': 'driver',
    364    'data': { 'file': 'BlockdevOptionsFile',
    365              'qcow2': 'BlockdevOptionsQcow2' } }
    366 
    367 Resulting in these JSON objects::
    368 
    369  { "driver": "file", "read-only": true,
    370    "filename": "/some/place/my-image" }
    371  { "driver": "qcow2", "read-only": false,
    372    "backing": "/some/place/my-image", "lazy-refcounts": true }
    373 
    374 The order of branches need not match the order of the enum values.
    375 The branches need not cover all possible enum values.  In the
    376 resulting generated C data types, a union is represented as a struct
    377 with the base members in QAPI schema order, and then a union of
    378 structures for each branch of the struct.
    379 
    380 The optional 'if' member specifies a conditional.  See `Configuring
    381 the schema`_ below for more on this.
    382 
    383 The optional 'features' member specifies features.  See Features_
    384 below for more on this.
    385 
    386 
    387 Alternate types
    388 ---------------
    389 
    390 Syntax::
    391 
    392     ALTERNATE = { 'alternate': STRING,
    393                   'data': ALTERNATIVES,
    394                   '*if': COND,
    395                   '*features': FEATURES }
    396     ALTERNATIVES = { ALTERNATIVE, ... }
    397     ALTERNATIVE = STRING : STRING
    398                 | STRING : { 'type': STRING, '*if': COND }
    399 
    400 Member 'alternate' names the alternate type.
    401 
    402 Each ALTERNATIVE of the 'data' object defines a branch of the
    403 alternate.  An alternate must have at least one branch.
    404 
    405 The ALTERNATIVE's STRING name is the branch name.
    406 
    407 The ALTERNATIVE's value defines the branch's properties, in particular
    408 its type.  The form STRING is shorthand for :code:`{ 'type': STRING }`.
    409 
    410 Example::
    411 
    412  { 'alternate': 'BlockdevRef',
    413    'data': { 'definition': 'BlockdevOptions',
    414              'reference': 'str' } }
    415 
    416 An alternate type is like a union type, except there is no
    417 discriminator on the wire.  Instead, the branch to use is inferred
    418 from the value.  An alternate can only express a choice between types
    419 represented differently on the wire.
    420 
    421 If a branch is typed as the 'bool' built-in, the alternate accepts
    422 true and false; if it is typed as any of the various numeric
    423 built-ins, it accepts a JSON number; if it is typed as a 'str'
    424 built-in or named enum type, it accepts a JSON string; if it is typed
    425 as the 'null' built-in, it accepts JSON null; and if it is typed as a
    426 complex type (struct or union), it accepts a JSON object.
    427 
    428 The example alternate declaration above allows using both of the
    429 following example objects::
    430 
    431  { "file": "my_existing_block_device_id" }
    432  { "file": { "driver": "file",
    433              "read-only": false,
    434              "filename": "/tmp/mydisk.qcow2" } }
    435 
    436 The optional 'if' member specifies a conditional.  See `Configuring
    437 the schema`_ below for more on this.
    438 
    439 The optional 'features' member specifies features.  See Features_
    440 below for more on this.
    441 
    442 
    443 Commands
    444 --------
    445 
    446 Syntax::
    447 
    448     COMMAND = { 'command': STRING,
    449                 (
    450                 '*data': ( MEMBERS | STRING ),
    451                 |
    452                 'data': STRING,
    453                 'boxed': true,
    454                 )
    455                 '*returns': TYPE-REF,
    456                 '*success-response': false,
    457                 '*gen': false,
    458                 '*allow-oob': true,
    459                 '*allow-preconfig': true,
    460                 '*coroutine': true,
    461                 '*if': COND,
    462                 '*features': FEATURES }
    463 
    464 Member 'command' names the command.
    465 
    466 Member 'data' defines the arguments.  It defaults to an empty MEMBERS_
    467 object.
    468 
    469 If 'data' is a MEMBERS_ object, then MEMBERS defines arguments just
    470 like a struct type's 'data' defines struct type members.
    471 
    472 If 'data' is a STRING, then STRING names a complex type whose members
    473 are the arguments.  A union type requires ``'boxed': true``.
    474 
    475 Member 'returns' defines the command's return type.  It defaults to an
    476 empty struct type.  It must normally be a complex type or an array of
    477 a complex type.  To return anything else, the command must be listed
    478 in pragma 'commands-returns-exceptions'.  If you do this, extending
    479 the command to return additional information will be harder.  Use of
    480 the pragma for new commands is strongly discouraged.
    481 
    482 A command's error responses are not specified in the QAPI schema.
    483 Error conditions should be documented in comments.
    484 
    485 In the Client JSON Protocol, the value of the "execute" or "exec-oob"
    486 member is the command name.  The value of the "arguments" member then
    487 has to conform to the arguments, and the value of the success
    488 response's "return" member will conform to the return type.
    489 
    490 Some example commands::
    491 
    492  { 'command': 'my-first-command',
    493    'data': { 'arg1': 'str', '*arg2': 'str' } }
    494  { 'struct': 'MyType', 'data': { '*value': 'str' } }
    495  { 'command': 'my-second-command',
    496    'returns': [ 'MyType' ] }
    497 
    498 which would validate this Client JSON Protocol transaction::
    499 
    500  => { "execute": "my-first-command",
    501       "arguments": { "arg1": "hello" } }
    502  <= { "return": { } }
    503  => { "execute": "my-second-command" }
    504  <= { "return": [ { "value": "one" }, { } ] }
    505 
    506 The generator emits a prototype for the C function implementing the
    507 command.  The function itself needs to be written by hand.  See
    508 section `Code generated for commands`_ for examples.
    509 
    510 The function returns the return type.  When member 'boxed' is absent,
    511 it takes the command arguments as arguments one by one, in QAPI schema
    512 order.  Else it takes them wrapped in the C struct generated for the
    513 complex argument type.  It takes an additional ``Error **`` argument in
    514 either case.
    515 
    516 The generator also emits a marshalling function that extracts
    517 arguments for the user's function out of an input QDict, calls the
    518 user's function, and if it succeeded, builds an output QObject from
    519 its return value.  This is for use by the QMP monitor core.
    520 
    521 In rare cases, QAPI cannot express a type-safe representation of a
    522 corresponding Client JSON Protocol command.  You then have to suppress
    523 generation of a marshalling function by including a member 'gen' with
    524 boolean value false, and instead write your own function.  For
    525 example::
    526 
    527  { 'command': 'netdev_add',
    528    'data': {'type': 'str', 'id': 'str'},
    529    'gen': false }
    530 
    531 Please try to avoid adding new commands that rely on this, and instead
    532 use type-safe unions.
    533 
    534 Normally, the QAPI schema is used to describe synchronous exchanges,
    535 where a response is expected.  But in some cases, the action of a
    536 command is expected to change state in a way that a successful
    537 response is not possible (although the command will still return an
    538 error object on failure).  When a successful reply is not possible,
    539 the command definition includes the optional member 'success-response'
    540 with boolean value false.  So far, only QGA makes use of this member.
    541 
    542 Member 'allow-oob' declares whether the command supports out-of-band
    543 (OOB) execution.  It defaults to false.  For example::
    544 
    545  { 'command': 'migrate_recover',
    546    'data': { 'uri': 'str' }, 'allow-oob': true }
    547 
    548 See qmp-spec.txt for out-of-band execution syntax and semantics.
    549 
    550 Commands supporting out-of-band execution can still be executed
    551 in-band.
    552 
    553 When a command is executed in-band, its handler runs in the main
    554 thread with the BQL held.
    555 
    556 When a command is executed out-of-band, its handler runs in a
    557 dedicated monitor I/O thread with the BQL *not* held.
    558 
    559 An OOB-capable command handler must satisfy the following conditions:
    560 
    561 - It terminates quickly.
    562 - It does not invoke system calls that may block.
    563 - It does not access guest RAM that may block when userfaultfd is
    564   enabled for postcopy live migration.
    565 - It takes only "fast" locks, i.e. all critical sections protected by
    566   any lock it takes also satisfy the conditions for OOB command
    567   handler code.
    568 
    569 The restrictions on locking limit access to shared state.  Such access
    570 requires synchronization, but OOB commands can't take the BQL or any
    571 other "slow" lock.
    572 
    573 When in doubt, do not implement OOB execution support.
    574 
    575 Member 'allow-preconfig' declares whether the command is available
    576 before the machine is built.  It defaults to false.  For example::
    577 
    578  { 'enum': 'QMPCapability',
    579    'data': [ 'oob' ] }
    580  { 'command': 'qmp_capabilities',
    581    'data': { '*enable': [ 'QMPCapability' ] },
    582    'allow-preconfig': true }
    583 
    584 QMP is available before the machine is built only when QEMU was
    585 started with --preconfig.
    586 
    587 Member 'coroutine' tells the QMP dispatcher whether the command handler
    588 is safe to be run in a coroutine.  It defaults to false.  If it is true,
    589 the command handler is called from coroutine context and may yield while
    590 waiting for an external event (such as I/O completion) in order to avoid
    591 blocking the guest and other background operations.
    592 
    593 Coroutine safety can be hard to prove, similar to thread safety.  Common
    594 pitfalls are:
    595 
    596 - The global mutex isn't held across ``qemu_coroutine_yield()``, so
    597   operations that used to assume that they execute atomically may have
    598   to be more careful to protect against changes in the global state.
    599 
    600 - Nested event loops (``AIO_WAIT_WHILE()`` etc.) are problematic in
    601   coroutine context and can easily lead to deadlocks.  They should be
    602   replaced by yielding and reentering the coroutine when the condition
    603   becomes false.
    604 
    605 Since the command handler may assume coroutine context, any callers
    606 other than the QMP dispatcher must also call it in coroutine context.
    607 In particular, HMP commands calling such a QMP command handler must be
    608 marked ``.coroutine = true`` in hmp-commands.hx.
    609 
    610 It is an error to specify both ``'coroutine': true`` and ``'allow-oob': true``
    611 for a command.  We don't currently have a use case for both together and
    612 without a use case, it's not entirely clear what the semantics should
    613 be.
    614 
    615 The optional 'if' member specifies a conditional.  See `Configuring
    616 the schema`_ below for more on this.
    617 
    618 The optional 'features' member specifies features.  See Features_
    619 below for more on this.
    620 
    621 
    622 Events
    623 ------
    624 
    625 Syntax::
    626 
    627     EVENT = { 'event': STRING,
    628               (
    629               '*data': ( MEMBERS | STRING ),
    630               |
    631               'data': STRING,
    632               'boxed': true,
    633               )
    634               '*if': COND,
    635               '*features': FEATURES }
    636 
    637 Member 'event' names the event.  This is the event name used in the
    638 Client JSON Protocol.
    639 
    640 Member 'data' defines the event-specific data.  It defaults to an
    641 empty MEMBERS object.
    642 
    643 If 'data' is a MEMBERS object, then MEMBERS defines event-specific
    644 data just like a struct type's 'data' defines struct type members.
    645 
    646 If 'data' is a STRING, then STRING names a complex type whose members
    647 are the event-specific data.  A union type requires ``'boxed': true``.
    648 
    649 An example event is::
    650 
    651  { 'event': 'EVENT_C',
    652    'data': { '*a': 'int', 'b': 'str' } }
    653 
    654 Resulting in this JSON object::
    655 
    656  { "event": "EVENT_C",
    657    "data": { "b": "test string" },
    658    "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
    659 
    660 The generator emits a function to send the event.  When member 'boxed'
    661 is absent, it takes event-specific data one by one, in QAPI schema
    662 order.  Else it takes them wrapped in the C struct generated for the
    663 complex type.  See section `Code generated for events`_ for examples.
    664 
    665 The optional 'if' member specifies a conditional.  See `Configuring
    666 the schema`_ below for more on this.
    667 
    668 The optional 'features' member specifies features.  See Features_
    669 below for more on this.
    670 
    671 
    672 .. _FEATURE:
    673 
    674 Features
    675 --------
    676 
    677 Syntax::
    678 
    679     FEATURES = [ FEATURE, ... ]
    680     FEATURE = STRING
    681             | { 'name': STRING, '*if': COND }
    682 
    683 Sometimes, the behaviour of QEMU changes compatibly, but without a
    684 change in the QMP syntax (usually by allowing values or operations
    685 that previously resulted in an error).  QMP clients may still need to
    686 know whether the extension is available.
    687 
    688 For this purpose, a list of features can be specified for a command or
    689 struct type.  Each list member can either be ``{ 'name': STRING, '*if':
    690 COND }``, or STRING, which is shorthand for ``{ 'name': STRING }``.
    691 
    692 The optional 'if' member specifies a conditional.  See `Configuring
    693 the schema`_ below for more on this.
    694 
    695 Example::
    696 
    697  { 'struct': 'TestType',
    698    'data': { 'number': 'int' },
    699    'features': [ 'allow-negative-numbers' ] }
    700 
    701 The feature strings are exposed to clients in introspection, as
    702 explained in section `Client JSON Protocol introspection`_.
    703 
    704 Intended use is to have each feature string signal that this build of
    705 QEMU shows a certain behaviour.
    706 
    707 
    708 Special features
    709 ~~~~~~~~~~~~~~~~
    710 
    711 Feature "deprecated" marks a command, event, enum value, or struct
    712 member as deprecated.  It is not supported elsewhere so far.
    713 Interfaces so marked may be withdrawn in future releases in accordance
    714 with QEMU's deprecation policy.
    715 
    716 Feature "unstable" marks a command, event, enum value, or struct
    717 member as unstable.  It is not supported elsewhere so far.  Interfaces
    718 so marked may be withdrawn or changed incompatibly in future releases.
    719 
    720 
    721 Naming rules and reserved names
    722 -------------------------------
    723 
    724 All names must begin with a letter, and contain only ASCII letters,
    725 digits, hyphen, and underscore.  There are two exceptions: enum values
    726 may start with a digit, and names that are downstream extensions (see
    727 section `Downstream extensions`_) start with underscore.
    728 
    729 Names beginning with ``q_`` are reserved for the generator, which uses
    730 them for munging QMP names that resemble C keywords or other
    731 problematic strings.  For example, a member named ``default`` in qapi
    732 becomes ``q_default`` in the generated C code.
    733 
    734 Types, commands, and events share a common namespace.  Therefore,
    735 generally speaking, type definitions should always use CamelCase for
    736 user-defined type names, while built-in types are lowercase.
    737 
    738 Type names ending with ``Kind`` or ``List`` are reserved for the
    739 generator, which uses them for implicit union enums and array types,
    740 respectively.
    741 
    742 Command names, member names within a type, and feature names should be
    743 all lower case with words separated by a hyphen.  However, some
    744 existing older commands and complex types use underscore; when
    745 extending them, consistency is preferred over blindly avoiding
    746 underscore.
    747 
    748 Event names should be ALL_CAPS with words separated by underscore.
    749 
    750 Member name ``u`` and names starting with ``has-`` or ``has_`` are reserved
    751 for the generator, which uses them for unions and for tracking
    752 optional members.
    753 
    754 Names beginning with ``x-`` used to signify "experimental".  This
    755 convention has been replaced by special feature "unstable".
    756 
    757 Pragmas ``command-name-exceptions`` and ``member-name-exceptions`` let
    758 you violate naming rules.  Use for new code is strongly discouraged. See
    759 `Pragma directives`_ for details.
    760 
    761 
    762 Downstream extensions
    763 ---------------------
    764 
    765 QAPI schema names that are externally visible, say in the Client JSON
    766 Protocol, need to be managed with care.  Names starting with a
    767 downstream prefix of the form __RFQDN_ are reserved for the downstream
    768 who controls the valid, reverse fully qualified domain name RFQDN.
    769 RFQDN may only contain ASCII letters, digits, hyphen and period.
    770 
    771 Example: Red Hat, Inc. controls redhat.com, and may therefore add a
    772 downstream command ``__com.redhat_drive-mirror``.
    773 
    774 
    775 Configuring the schema
    776 ----------------------
    777 
    778 Syntax::
    779 
    780     COND = STRING
    781          | { 'all: [ COND, ... ] }
    782          | { 'any: [ COND, ... ] }
    783          | { 'not': COND }
    784 
    785 All definitions take an optional 'if' member.  Its value must be a
    786 string, or an object with a single member 'all', 'any' or 'not'.
    787 
    788 The C code generated for the definition will then be guarded by an #if
    789 preprocessing directive with an operand generated from that condition:
    790 
    791  * STRING will generate defined(STRING)
    792  * { 'all': [COND, ...] } will generate (COND && ...)
    793  * { 'any': [COND, ...] } will generate (COND || ...)
    794  * { 'not': COND } will generate !COND
    795 
    796 Example: a conditional struct ::
    797 
    798  { 'struct': 'IfStruct', 'data': { 'foo': 'int' },
    799    'if': { 'all': [ 'CONFIG_FOO', 'HAVE_BAR' ] } }
    800 
    801 gets its generated code guarded like this::
    802 
    803  #if defined(CONFIG_FOO) && defined(HAVE_BAR)
    804  ... generated code ...
    805  #endif /* defined(HAVE_BAR) && defined(CONFIG_FOO) */
    806 
    807 Individual members of complex types, commands arguments, and
    808 event-specific data can also be made conditional.  This requires the
    809 longhand form of MEMBER.
    810 
    811 Example: a struct type with unconditional member 'foo' and conditional
    812 member 'bar' ::
    813 
    814  { 'struct': 'IfStruct',
    815    'data': { 'foo': 'int',
    816              'bar': { 'type': 'int', 'if': 'IFCOND'} } }
    817 
    818 A union's discriminator may not be conditional.
    819 
    820 Likewise, individual enumeration values be conditional.  This requires
    821 the longhand form of ENUM-VALUE_.
    822 
    823 Example: an enum type with unconditional value 'foo' and conditional
    824 value 'bar' ::
    825 
    826  { 'enum': 'IfEnum',
    827    'data': [ 'foo',
    828              { 'name' : 'bar', 'if': 'IFCOND' } ] }
    829 
    830 Likewise, features can be conditional.  This requires the longhand
    831 form of FEATURE_.
    832 
    833 Example: a struct with conditional feature 'allow-negative-numbers' ::
    834 
    835  { 'struct': 'TestType',
    836    'data': { 'number': 'int' },
    837    'features': [ { 'name': 'allow-negative-numbers',
    838                    'if': 'IFCOND' } ] }
    839 
    840 Please note that you are responsible to ensure that the C code will
    841 compile with an arbitrary combination of conditions, since the
    842 generator is unable to check it at this point.
    843 
    844 The conditions apply to introspection as well, i.e. introspection
    845 shows a conditional entity only when the condition is satisfied in
    846 this particular build.
    847 
    848 
    849 Documentation comments
    850 ----------------------
    851 
    852 A multi-line comment that starts and ends with a ``##`` line is a
    853 documentation comment.
    854 
    855 If the documentation comment starts like ::
    856 
    857     ##
    858     # @SYMBOL:
    859 
    860 it documents the definition of SYMBOL, else it's free-form
    861 documentation.
    862 
    863 See below for more on `Definition documentation`_.
    864 
    865 Free-form documentation may be used to provide additional text and
    866 structuring content.
    867 
    868 
    869 Headings and subheadings
    870 ~~~~~~~~~~~~~~~~~~~~~~~~
    871 
    872 A free-form documentation comment containing a line which starts with
    873 some ``=`` symbols and then a space defines a section heading::
    874 
    875     ##
    876     # = This is a top level heading
    877     #
    878     # This is a free-form comment which will go under the
    879     # top level heading.
    880     ##
    881 
    882     ##
    883     # == This is a second level heading
    884     ##
    885 
    886 A heading line must be the first line of the documentation
    887 comment block.
    888 
    889 Section headings must always be correctly nested, so you can only
    890 define a third-level heading inside a second-level heading, and so on.
    891 
    892 
    893 Documentation markup
    894 ~~~~~~~~~~~~~~~~~~~~
    895 
    896 Documentation comments can use most rST markup.  In particular,
    897 a ``::`` literal block can be used for examples::
    898 
    899     # ::
    900     #
    901     #   Text of the example, may span
    902     #   multiple lines
    903 
    904 ``*`` starts an itemized list::
    905 
    906     # * First item, may span
    907     #   multiple lines
    908     # * Second item
    909 
    910 You can also use ``-`` instead of ``*``.
    911 
    912 A decimal number followed by ``.`` starts a numbered list::
    913 
    914     # 1. First item, may span
    915     #    multiple lines
    916     # 2. Second item
    917 
    918 The actual number doesn't matter.
    919 
    920 Lists of either kind must be preceded and followed by a blank line.
    921 If a list item's text spans multiple lines, then the second and
    922 subsequent lines must be correctly indented to line up with the
    923 first character of the first line.
    924 
    925 The usual ****strong****, *\*emphasized\** and ````literal```` markup
    926 should be used.  If you need a single literal ``*``, you will need to
    927 backslash-escape it.  As an extension beyond the usual rST syntax, you
    928 can also use ``@foo`` to reference a name in the schema; this is rendered
    929 the same way as ````foo````.
    930 
    931 Example::
    932 
    933  ##
    934  # Some text foo with **bold** and *emphasis*
    935  # 1. with a list
    936  # 2. like that
    937  #
    938  # And some code:
    939  #
    940  # ::
    941  #
    942  #   $ echo foo
    943  #   -> do this
    944  #   <- get that
    945  ##
    946 
    947 
    948 Definition documentation
    949 ~~~~~~~~~~~~~~~~~~~~~~~~
    950 
    951 Definition documentation, if present, must immediately precede the
    952 definition it documents.
    953 
    954 When documentation is required (see pragma_ 'doc-required'), every
    955 definition must have documentation.
    956 
    957 Definition documentation starts with a line naming the definition,
    958 followed by an optional overview, a description of each argument (for
    959 commands and events), member (for structs and unions), branch (for
    960 alternates), or value (for enums), a description of each feature (if
    961 any), and finally optional tagged sections.
    962 
    963 The description of an argument or feature 'name' starts with
    964 '\@name:'.  The description text can start on the line following the
    965 '\@name:', in which case it must not be indented at all.  It can also
    966 start on the same line as the '\@name:'.  In this case if it spans
    967 multiple lines then second and subsequent lines must be indented to
    968 line up with the first character of the first line of the
    969 description::
    970 
    971  # @argone:
    972  # This is a two line description
    973  # in the first style.
    974  #
    975  # @argtwo: This is a two line description
    976  #          in the second style.
    977 
    978 The number of spaces between the ':' and the text is not significant.
    979 
    980 .. admonition:: FIXME
    981 
    982    The parser accepts these things in almost any order.
    983 
    984 .. admonition:: FIXME
    985 
    986    union branches should be described, too.
    987 
    988 Extensions added after the definition was first released carry a
    989 '(since x.y.z)' comment.
    990 
    991 The feature descriptions must be preceded by a line "Features:", like
    992 this::
    993 
    994   # Features:
    995   # @feature: Description text
    996 
    997 A tagged section starts with one of the following words:
    998 "Note:"/"Notes:", "Since:", "Example"/"Examples", "Returns:", "TODO:".
    999 The section ends with the start of a new section.
   1000 
   1001 The text of a section can start on a new line, in
   1002 which case it must not be indented at all.  It can also start
   1003 on the same line as the 'Note:', 'Returns:', etc tag.  In this
   1004 case if it spans multiple lines then second and subsequent
   1005 lines must be indented to match the first, in the same way as
   1006 multiline argument descriptions.
   1007 
   1008 A 'Since: x.y.z' tagged section lists the release that introduced the
   1009 definition.
   1010 
   1011 An 'Example' or 'Examples' section is automatically rendered
   1012 entirely as literal fixed-width text.  In other sections,
   1013 the text is formatted, and rST markup can be used.
   1014 
   1015 For example::
   1016 
   1017  ##
   1018  # @BlockStats:
   1019  #
   1020  # Statistics of a virtual block device or a block backing device.
   1021  #
   1022  # @device: If the stats are for a virtual block device, the name
   1023  #          corresponding to the virtual block device.
   1024  #
   1025  # @node-name: The node name of the device. (since 2.3)
   1026  #
   1027  # ... more members ...
   1028  #
   1029  # Since: 0.14.0
   1030  ##
   1031  { 'struct': 'BlockStats',
   1032    'data': {'*device': 'str', '*node-name': 'str',
   1033             ... more members ... } }
   1034 
   1035  ##
   1036  # @query-blockstats:
   1037  #
   1038  # Query the @BlockStats for all virtual block devices.
   1039  #
   1040  # @query-nodes: If true, the command will query all the
   1041  #               block nodes ... explain, explain ...  (since 2.3)
   1042  #
   1043  # Returns: A list of @BlockStats for each virtual block devices.
   1044  #
   1045  # Since: 0.14.0
   1046  #
   1047  # Example:
   1048  #
   1049  # -> { "execute": "query-blockstats" }
   1050  # <- {
   1051  #      ... lots of output ...
   1052  #    }
   1053  #
   1054  ##
   1055  { 'command': 'query-blockstats',
   1056    'data': { '*query-nodes': 'bool' },
   1057    'returns': ['BlockStats'] }
   1058 
   1059 
   1060 Client JSON Protocol introspection
   1061 ==================================
   1062 
   1063 Clients of a Client JSON Protocol commonly need to figure out what
   1064 exactly the server (QEMU) supports.
   1065 
   1066 For this purpose, QMP provides introspection via command
   1067 query-qmp-schema.  QGA currently doesn't support introspection.
   1068 
   1069 While Client JSON Protocol wire compatibility should be maintained
   1070 between qemu versions, we cannot make the same guarantees for
   1071 introspection stability.  For example, one version of qemu may provide
   1072 a non-variant optional member of a struct, and a later version rework
   1073 the member to instead be non-optional and associated with a variant.
   1074 Likewise, one version of qemu may list a member with open-ended type
   1075 'str', and a later version could convert it to a finite set of strings
   1076 via an enum type; or a member may be converted from a specific type to
   1077 an alternate that represents a choice between the original type and
   1078 something else.
   1079 
   1080 query-qmp-schema returns a JSON array of SchemaInfo objects.  These
   1081 objects together describe the wire ABI, as defined in the QAPI schema.
   1082 There is no specified order to the SchemaInfo objects returned; a
   1083 client must search for a particular name throughout the entire array
   1084 to learn more about that name, but is at least guaranteed that there
   1085 will be no collisions between type, command, and event names.
   1086 
   1087 However, the SchemaInfo can't reflect all the rules and restrictions
   1088 that apply to QMP.  It's interface introspection (figuring out what's
   1089 there), not interface specification.  The specification is in the QAPI
   1090 schema.  To understand how QMP is to be used, you need to study the
   1091 QAPI schema.
   1092 
   1093 Like any other command, query-qmp-schema is itself defined in the QAPI
   1094 schema, along with the SchemaInfo type.  This text attempts to give an
   1095 overview how things work.  For details you need to consult the QAPI
   1096 schema.
   1097 
   1098 SchemaInfo objects have common members "name", "meta-type",
   1099 "features", and additional variant members depending on the value of
   1100 meta-type.
   1101 
   1102 Each SchemaInfo object describes a wire ABI entity of a certain
   1103 meta-type: a command, event or one of several kinds of type.
   1104 
   1105 SchemaInfo for commands and events have the same name as in the QAPI
   1106 schema.
   1107 
   1108 Command and event names are part of the wire ABI, but type names are
   1109 not.  Therefore, the SchemaInfo for types have auto-generated
   1110 meaningless names.  For readability, the examples in this section use
   1111 meaningful type names instead.
   1112 
   1113 Optional member "features" exposes the entity's feature strings as a
   1114 JSON array of strings.
   1115 
   1116 To examine a type, start with a command or event using it, then follow
   1117 references by name.
   1118 
   1119 QAPI schema definitions not reachable that way are omitted.
   1120 
   1121 The SchemaInfo for a command has meta-type "command", and variant
   1122 members "arg-type", "ret-type" and "allow-oob".  On the wire, the
   1123 "arguments" member of a client's "execute" command must conform to the
   1124 object type named by "arg-type".  The "return" member that the server
   1125 passes in a success response conforms to the type named by "ret-type".
   1126 When "allow-oob" is true, it means the command supports out-of-band
   1127 execution.  It defaults to false.
   1128 
   1129 If the command takes no arguments, "arg-type" names an object type
   1130 without members.  Likewise, if the command returns nothing, "ret-type"
   1131 names an object type without members.
   1132 
   1133 Example: the SchemaInfo for command query-qmp-schema ::
   1134 
   1135  { "name": "query-qmp-schema", "meta-type": "command",
   1136    "arg-type": "q_empty", "ret-type": "SchemaInfoList" }
   1137 
   1138    Type "q_empty" is an automatic object type without members, and type
   1139    "SchemaInfoList" is the array of SchemaInfo type.
   1140 
   1141 The SchemaInfo for an event has meta-type "event", and variant member
   1142 "arg-type".  On the wire, a "data" member that the server passes in an
   1143 event conforms to the object type named by "arg-type".
   1144 
   1145 If the event carries no additional information, "arg-type" names an
   1146 object type without members.  The event may not have a data member on
   1147 the wire then.
   1148 
   1149 Each command or event defined with 'data' as MEMBERS object in the
   1150 QAPI schema implicitly defines an object type.
   1151 
   1152 Example: the SchemaInfo for EVENT_C from section Events_ ::
   1153 
   1154     { "name": "EVENT_C", "meta-type": "event",
   1155       "arg-type": "q_obj-EVENT_C-arg" }
   1156 
   1157     Type "q_obj-EVENT_C-arg" is an implicitly defined object type with
   1158     the two members from the event's definition.
   1159 
   1160 The SchemaInfo for struct and union types has meta-type "object".
   1161 
   1162 The SchemaInfo for a struct type has variant member "members".
   1163 
   1164 The SchemaInfo for a union type additionally has variant members "tag"
   1165 and "variants".
   1166 
   1167 "members" is a JSON array describing the object's common members, if
   1168 any.  Each element is a JSON object with members "name" (the member's
   1169 name), "type" (the name of its type), "features" (a JSON array of
   1170 feature strings), and "default".  The latter two are optional.  The
   1171 member is optional if "default" is present.  Currently, "default" can
   1172 only have value null.  Other values are reserved for future
   1173 extensions.  The "members" array is in no particular order; clients
   1174 must search the entire object when learning whether a particular
   1175 member is supported.
   1176 
   1177 Example: the SchemaInfo for MyType from section `Struct types`_ ::
   1178 
   1179     { "name": "MyType", "meta-type": "object",
   1180       "members": [
   1181           { "name": "member1", "type": "str" },
   1182           { "name": "member2", "type": "int" },
   1183           { "name": "member3", "type": "str", "default": null } ] }
   1184 
   1185 "features" exposes the command's feature strings as a JSON array of
   1186 strings.
   1187 
   1188 Example: the SchemaInfo for TestType from section Features_::
   1189 
   1190     { "name": "TestType", "meta-type": "object",
   1191       "members": [
   1192           { "name": "number", "type": "int" } ],
   1193       "features": ["allow-negative-numbers"] }
   1194 
   1195 "tag" is the name of the common member serving as type tag.
   1196 "variants" is a JSON array describing the object's variant members.
   1197 Each element is a JSON object with members "case" (the value of type
   1198 tag this element applies to) and "type" (the name of an object type
   1199 that provides the variant members for this type tag value).  The
   1200 "variants" array is in no particular order, and is not guaranteed to
   1201 list cases in the same order as the corresponding "tag" enum type.
   1202 
   1203 Example: the SchemaInfo for union BlockdevOptions from section
   1204 `Union types`_ ::
   1205 
   1206     { "name": "BlockdevOptions", "meta-type": "object",
   1207       "members": [
   1208           { "name": "driver", "type": "BlockdevDriver" },
   1209           { "name": "read-only", "type": "bool", "default": null } ],
   1210       "tag": "driver",
   1211       "variants": [
   1212           { "case": "file", "type": "BlockdevOptionsFile" },
   1213           { "case": "qcow2", "type": "BlockdevOptionsQcow2" } ] }
   1214 
   1215 Note that base types are "flattened": its members are included in the
   1216 "members" array.
   1217 
   1218 The SchemaInfo for an alternate type has meta-type "alternate", and
   1219 variant member "members".  "members" is a JSON array.  Each element is
   1220 a JSON object with member "type", which names a type.  Values of the
   1221 alternate type conform to exactly one of its member types.  There is
   1222 no guarantee on the order in which "members" will be listed.
   1223 
   1224 Example: the SchemaInfo for BlockdevRef from section `Alternate types`_ ::
   1225 
   1226     { "name": "BlockdevRef", "meta-type": "alternate",
   1227       "members": [
   1228           { "type": "BlockdevOptions" },
   1229           { "type": "str" } ] }
   1230 
   1231 The SchemaInfo for an array type has meta-type "array", and variant
   1232 member "element-type", which names the array's element type.  Array
   1233 types are implicitly defined.  For convenience, the array's name may
   1234 resemble the element type; however, clients should examine member
   1235 "element-type" instead of making assumptions based on parsing member
   1236 "name".
   1237 
   1238 Example: the SchemaInfo for ['str'] ::
   1239 
   1240     { "name": "[str]", "meta-type": "array",
   1241       "element-type": "str" }
   1242 
   1243 The SchemaInfo for an enumeration type has meta-type "enum" and
   1244 variant member "members".
   1245 
   1246 "members" is a JSON array describing the enumeration values.  Each
   1247 element is a JSON object with member "name" (the member's name), and
   1248 optionally "features" (a JSON array of feature strings).  The
   1249 "members" array is in no particular order; clients must search the
   1250 entire array when learning whether a particular value is supported.
   1251 
   1252 Example: the SchemaInfo for MyEnum from section `Enumeration types`_ ::
   1253 
   1254     { "name": "MyEnum", "meta-type": "enum",
   1255       "members": [
   1256         { "name": "value1" },
   1257         { "name": "value2" },
   1258         { "name": "value3" }
   1259       ] }
   1260 
   1261 The SchemaInfo for a built-in type has the same name as the type in
   1262 the QAPI schema (see section `Built-in Types`_), with one exception
   1263 detailed below.  It has variant member "json-type" that shows how
   1264 values of this type are encoded on the wire.
   1265 
   1266 Example: the SchemaInfo for str ::
   1267 
   1268     { "name": "str", "meta-type": "builtin", "json-type": "string" }
   1269 
   1270 The QAPI schema supports a number of integer types that only differ in
   1271 how they map to C.  They are identical as far as SchemaInfo is
   1272 concerned.  Therefore, they get all mapped to a single type "int" in
   1273 SchemaInfo.
   1274 
   1275 As explained above, type names are not part of the wire ABI.  Not even
   1276 the names of built-in types.  Clients should examine member
   1277 "json-type" instead of hard-coding names of built-in types.
   1278 
   1279 
   1280 Compatibility considerations
   1281 ============================
   1282 
   1283 Maintaining backward compatibility at the Client JSON Protocol level
   1284 while evolving the schema requires some care.  This section is about
   1285 syntactic compatibility, which is necessary, but not sufficient, for
   1286 actual compatibility.
   1287 
   1288 Clients send commands with argument data, and receive command
   1289 responses with return data and events with event data.
   1290 
   1291 Adding opt-in functionality to the send direction is backwards
   1292 compatible: adding commands, optional arguments, enumeration values,
   1293 union and alternate branches; turning an argument type into an
   1294 alternate of that type; making mandatory arguments optional.  Clients
   1295 oblivious of the new functionality continue to work.
   1296 
   1297 Incompatible changes include removing commands, command arguments,
   1298 enumeration values, union and alternate branches, adding mandatory
   1299 command arguments, and making optional arguments mandatory.
   1300 
   1301 The specified behavior of an absent optional argument should remain
   1302 the same.  With proper documentation, this policy still allows some
   1303 flexibility; for example, when an optional 'buffer-size' argument is
   1304 specified to default to a sensible buffer size, the actual default
   1305 value can still be changed.  The specified default behavior is not the
   1306 exact size of the buffer, only that the default size is sensible.
   1307 
   1308 Adding functionality to the receive direction is generally backwards
   1309 compatible: adding events, adding return and event data members.
   1310 Clients are expected to ignore the ones they don't know.
   1311 
   1312 Removing "unreachable" stuff like events that can't be triggered
   1313 anymore, optional return or event data members that can't be sent
   1314 anymore, and return or event data member (enumeration) values that
   1315 can't be sent anymore makes no difference to clients, except for
   1316 introspection.  The latter can conceivably confuse clients, so tread
   1317 carefully.
   1318 
   1319 Incompatible changes include removing return and event data members.
   1320 
   1321 Any change to a command definition's 'data' or one of the types used
   1322 there (recursively) needs to consider send direction compatibility.
   1323 
   1324 Any change to a command definition's 'return', an event definition's
   1325 'data', or one of the types used there (recursively) needs to consider
   1326 receive direction compatibility.
   1327 
   1328 Any change to types used in both contexts need to consider both.
   1329 
   1330 Enumeration type values and complex and alternate type members may be
   1331 reordered freely.  For enumerations and alternate types, this doesn't
   1332 affect the wire encoding.  For complex types, this might make the
   1333 implementation emit JSON object members in a different order, which
   1334 the Client JSON Protocol permits.
   1335 
   1336 Since type names are not visible in the Client JSON Protocol, types
   1337 may be freely renamed.  Even certain refactorings are invisible, such
   1338 as splitting members from one type into a common base type.
   1339 
   1340 
   1341 Code generation
   1342 ===============
   1343 
   1344 The QAPI code generator qapi-gen.py generates code and documentation
   1345 from the schema.  Together with the core QAPI libraries, this code
   1346 provides everything required to take JSON commands read in by a Client
   1347 JSON Protocol server, unmarshal the arguments into the underlying C
   1348 types, call into the corresponding C function, map the response back
   1349 to a Client JSON Protocol response to be returned to the user, and
   1350 introspect the commands.
   1351 
   1352 As an example, we'll use the following schema, which describes a
   1353 single complex user-defined type, along with command which takes a
   1354 list of that type as a parameter, and returns a single element of that
   1355 type.  The user is responsible for writing the implementation of
   1356 qmp_my_command(); everything else is produced by the generator. ::
   1357 
   1358     $ cat example-schema.json
   1359     { 'struct': 'UserDefOne',
   1360       'data': { 'integer': 'int', '*string': 'str' } }
   1361 
   1362     { 'command': 'my-command',
   1363       'data': { 'arg1': ['UserDefOne'] },
   1364       'returns': 'UserDefOne' }
   1365 
   1366     { 'event': 'MY_EVENT' }
   1367 
   1368 We run qapi-gen.py like this::
   1369 
   1370     $ python scripts/qapi-gen.py --output-dir="qapi-generated" \
   1371     --prefix="example-" example-schema.json
   1372 
   1373 For a more thorough look at generated code, the testsuite includes
   1374 tests/qapi-schema/qapi-schema-tests.json that covers more examples of
   1375 what the generator will accept, and compiles the resulting C code as
   1376 part of 'make check-unit'.
   1377 
   1378 
   1379 Code generated for QAPI types
   1380 -----------------------------
   1381 
   1382 The following files are created:
   1383 
   1384  ``$(prefix)qapi-types.h``
   1385      C types corresponding to types defined in the schema
   1386 
   1387  ``$(prefix)qapi-types.c``
   1388      Cleanup functions for the above C types
   1389 
   1390 The $(prefix) is an optional parameter used as a namespace to keep the
   1391 generated code from one schema/code-generation separated from others so code
   1392 can be generated/used from multiple schemas without clobbering previously
   1393 created code.
   1394 
   1395 Example::
   1396 
   1397     $ cat qapi-generated/example-qapi-types.h
   1398     [Uninteresting stuff omitted...]
   1399 
   1400     #ifndef EXAMPLE_QAPI_TYPES_H
   1401     #define EXAMPLE_QAPI_TYPES_H
   1402 
   1403     #include "qapi/qapi-builtin-types.h"
   1404 
   1405     typedef struct UserDefOne UserDefOne;
   1406 
   1407     typedef struct UserDefOneList UserDefOneList;
   1408 
   1409     typedef struct q_obj_my_command_arg q_obj_my_command_arg;
   1410 
   1411     struct UserDefOne {
   1412         int64_t integer;
   1413         bool has_string;
   1414         char *string;
   1415     };
   1416 
   1417     void qapi_free_UserDefOne(UserDefOne *obj);
   1418     G_DEFINE_AUTOPTR_CLEANUP_FUNC(UserDefOne, qapi_free_UserDefOne)
   1419 
   1420     struct UserDefOneList {
   1421         UserDefOneList *next;
   1422         UserDefOne *value;
   1423     };
   1424 
   1425     void qapi_free_UserDefOneList(UserDefOneList *obj);
   1426     G_DEFINE_AUTOPTR_CLEANUP_FUNC(UserDefOneList, qapi_free_UserDefOneList)
   1427 
   1428     struct q_obj_my_command_arg {
   1429         UserDefOneList *arg1;
   1430     };
   1431 
   1432     #endif /* EXAMPLE_QAPI_TYPES_H */
   1433     $ cat qapi-generated/example-qapi-types.c
   1434     [Uninteresting stuff omitted...]
   1435 
   1436     void qapi_free_UserDefOne(UserDefOne *obj)
   1437     {
   1438         Visitor *v;
   1439 
   1440         if (!obj) {
   1441             return;
   1442         }
   1443 
   1444         v = qapi_dealloc_visitor_new();
   1445         visit_type_UserDefOne(v, NULL, &obj, NULL);
   1446         visit_free(v);
   1447     }
   1448 
   1449     void qapi_free_UserDefOneList(UserDefOneList *obj)
   1450     {
   1451         Visitor *v;
   1452 
   1453         if (!obj) {
   1454             return;
   1455         }
   1456 
   1457         v = qapi_dealloc_visitor_new();
   1458         visit_type_UserDefOneList(v, NULL, &obj, NULL);
   1459         visit_free(v);
   1460     }
   1461 
   1462     [Uninteresting stuff omitted...]
   1463 
   1464 For a modular QAPI schema (see section `Include directives`_), code for
   1465 each sub-module SUBDIR/SUBMODULE.json is actually generated into ::
   1466 
   1467  SUBDIR/$(prefix)qapi-types-SUBMODULE.h
   1468  SUBDIR/$(prefix)qapi-types-SUBMODULE.c
   1469 
   1470 If qapi-gen.py is run with option --builtins, additional files are
   1471 created:
   1472 
   1473  ``qapi-builtin-types.h``
   1474      C types corresponding to built-in types
   1475 
   1476  ``qapi-builtin-types.c``
   1477      Cleanup functions for the above C types
   1478 
   1479 
   1480 Code generated for visiting QAPI types
   1481 --------------------------------------
   1482 
   1483 These are the visitor functions used to walk through and convert
   1484 between a native QAPI C data structure and some other format (such as
   1485 QObject); the generated functions are named visit_type_FOO() and
   1486 visit_type_FOO_members().
   1487 
   1488 The following files are generated:
   1489 
   1490  ``$(prefix)qapi-visit.c``
   1491      Visitor function for a particular C type, used to automagically
   1492      convert QObjects into the corresponding C type and vice-versa, as
   1493      well as for deallocating memory for an existing C type
   1494 
   1495  ``$(prefix)qapi-visit.h``
   1496      Declarations for previously mentioned visitor functions
   1497 
   1498 Example::
   1499 
   1500     $ cat qapi-generated/example-qapi-visit.h
   1501     [Uninteresting stuff omitted...]
   1502 
   1503     #ifndef EXAMPLE_QAPI_VISIT_H
   1504     #define EXAMPLE_QAPI_VISIT_H
   1505 
   1506     #include "qapi/qapi-builtin-visit.h"
   1507     #include "example-qapi-types.h"
   1508 
   1509 
   1510     bool visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp);
   1511 
   1512     bool visit_type_UserDefOne(Visitor *v, const char *name,
   1513                      UserDefOne **obj, Error **errp);
   1514 
   1515     bool visit_type_UserDefOneList(Visitor *v, const char *name,
   1516                      UserDefOneList **obj, Error **errp);
   1517 
   1518     bool visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp);
   1519 
   1520     #endif /* EXAMPLE_QAPI_VISIT_H */
   1521     $ cat qapi-generated/example-qapi-visit.c
   1522     [Uninteresting stuff omitted...]
   1523 
   1524     bool visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
   1525     {
   1526         if (!visit_type_int(v, "integer", &obj->integer, errp)) {
   1527             return false;
   1528         }
   1529         if (visit_optional(v, "string", &obj->has_string)) {
   1530             if (!visit_type_str(v, "string", &obj->string, errp)) {
   1531                 return false;
   1532             }
   1533         }
   1534         return true;
   1535     }
   1536 
   1537     bool visit_type_UserDefOne(Visitor *v, const char *name,
   1538                      UserDefOne **obj, Error **errp)
   1539     {
   1540         bool ok = false;
   1541 
   1542         if (!visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), errp)) {
   1543             return false;
   1544         }
   1545         if (!*obj) {
   1546             /* incomplete */
   1547             assert(visit_is_dealloc(v));
   1548             ok = true;
   1549             goto out_obj;
   1550         }
   1551         if (!visit_type_UserDefOne_members(v, *obj, errp)) {
   1552             goto out_obj;
   1553         }
   1554         ok = visit_check_struct(v, errp);
   1555     out_obj:
   1556         visit_end_struct(v, (void **)obj);
   1557         if (!ok && visit_is_input(v)) {
   1558             qapi_free_UserDefOne(*obj);
   1559             *obj = NULL;
   1560         }
   1561         return ok;
   1562     }
   1563 
   1564     bool visit_type_UserDefOneList(Visitor *v, const char *name,
   1565                      UserDefOneList **obj, Error **errp)
   1566     {
   1567         bool ok = false;
   1568         UserDefOneList *tail;
   1569         size_t size = sizeof(**obj);
   1570 
   1571         if (!visit_start_list(v, name, (GenericList **)obj, size, errp)) {
   1572             return false;
   1573         }
   1574 
   1575         for (tail = *obj; tail;
   1576              tail = (UserDefOneList *)visit_next_list(v, (GenericList *)tail, size)) {
   1577             if (!visit_type_UserDefOne(v, NULL, &tail->value, errp)) {
   1578                 goto out_obj;
   1579             }
   1580         }
   1581 
   1582         ok = visit_check_list(v, errp);
   1583     out_obj:
   1584         visit_end_list(v, (void **)obj);
   1585         if (!ok && visit_is_input(v)) {
   1586             qapi_free_UserDefOneList(*obj);
   1587             *obj = NULL;
   1588         }
   1589         return ok;
   1590     }
   1591 
   1592     bool visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp)
   1593     {
   1594         if (!visit_type_UserDefOneList(v, "arg1", &obj->arg1, errp)) {
   1595             return false;
   1596         }
   1597         return true;
   1598     }
   1599 
   1600     [Uninteresting stuff omitted...]
   1601 
   1602 For a modular QAPI schema (see section `Include directives`_), code for
   1603 each sub-module SUBDIR/SUBMODULE.json is actually generated into ::
   1604 
   1605  SUBDIR/$(prefix)qapi-visit-SUBMODULE.h
   1606  SUBDIR/$(prefix)qapi-visit-SUBMODULE.c
   1607 
   1608 If qapi-gen.py is run with option --builtins, additional files are
   1609 created:
   1610 
   1611  ``qapi-builtin-visit.h``
   1612      Visitor functions for built-in types
   1613 
   1614  ``qapi-builtin-visit.c``
   1615      Declarations for these visitor functions
   1616 
   1617 
   1618 Code generated for commands
   1619 ---------------------------
   1620 
   1621 These are the marshaling/dispatch functions for the commands defined
   1622 in the schema.  The generated code provides qmp_marshal_COMMAND(), and
   1623 declares qmp_COMMAND() that the user must implement.
   1624 
   1625 The following files are generated:
   1626 
   1627  ``$(prefix)qapi-commands.c``
   1628      Command marshal/dispatch functions for each QMP command defined in
   1629      the schema
   1630 
   1631  ``$(prefix)qapi-commands.h``
   1632      Function prototypes for the QMP commands specified in the schema
   1633 
   1634  ``$(prefix)qapi-commands.trace-events``
   1635      Trace event declarations, see :ref:`tracing`.
   1636 
   1637  ``$(prefix)qapi-init-commands.h``
   1638      Command initialization prototype
   1639 
   1640  ``$(prefix)qapi-init-commands.c``
   1641      Command initialization code
   1642 
   1643 Example::
   1644 
   1645     $ cat qapi-generated/example-qapi-commands.h
   1646     [Uninteresting stuff omitted...]
   1647 
   1648     #ifndef EXAMPLE_QAPI_COMMANDS_H
   1649     #define EXAMPLE_QAPI_COMMANDS_H
   1650 
   1651     #include "example-qapi-types.h"
   1652 
   1653     UserDefOne *qmp_my_command(UserDefOneList *arg1, Error **errp);
   1654     void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp);
   1655 
   1656     #endif /* EXAMPLE_QAPI_COMMANDS_H */
   1657 
   1658     $ cat qapi-generated/example-qapi-commands.trace-events
   1659     # AUTOMATICALLY GENERATED, DO NOT MODIFY
   1660 
   1661     qmp_enter_my_command(const char *json) "%s"
   1662     qmp_exit_my_command(const char *result, bool succeeded) "%s %d"
   1663 
   1664     $ cat qapi-generated/example-qapi-commands.c
   1665     [Uninteresting stuff omitted...]
   1666 
   1667 
   1668     static void qmp_marshal_output_UserDefOne(UserDefOne *ret_in,
   1669                                     QObject **ret_out, Error **errp)
   1670     {
   1671         Visitor *v;
   1672 
   1673         v = qobject_output_visitor_new_qmp(ret_out);
   1674         if (visit_type_UserDefOne(v, "unused", &ret_in, errp)) {
   1675             visit_complete(v, ret_out);
   1676         }
   1677         visit_free(v);
   1678         v = qapi_dealloc_visitor_new();
   1679         visit_type_UserDefOne(v, "unused", &ret_in, NULL);
   1680         visit_free(v);
   1681     }
   1682 
   1683     void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
   1684     {
   1685         Error *err = NULL;
   1686         bool ok = false;
   1687         Visitor *v;
   1688         UserDefOne *retval;
   1689         q_obj_my_command_arg arg = {0};
   1690 
   1691         v = qobject_input_visitor_new_qmp(QOBJECT(args));
   1692         if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
   1693             goto out;
   1694         }
   1695         if (visit_type_q_obj_my_command_arg_members(v, &arg, errp)) {
   1696             ok = visit_check_struct(v, errp);
   1697         }
   1698         visit_end_struct(v, NULL);
   1699         if (!ok) {
   1700             goto out;
   1701         }
   1702 
   1703         if (trace_event_get_state_backends(TRACE_QMP_ENTER_MY_COMMAND)) {
   1704             g_autoptr(GString) req_json = qobject_to_json(QOBJECT(args));
   1705 
   1706             trace_qmp_enter_my_command(req_json->str);
   1707         }
   1708 
   1709         retval = qmp_my_command(arg.arg1, &err);
   1710         if (err) {
   1711             trace_qmp_exit_my_command(error_get_pretty(err), false);
   1712             error_propagate(errp, err);
   1713             goto out;
   1714         }
   1715 
   1716         qmp_marshal_output_UserDefOne(retval, ret, errp);
   1717 
   1718         if (trace_event_get_state_backends(TRACE_QMP_EXIT_MY_COMMAND)) {
   1719             g_autoptr(GString) ret_json = qobject_to_json(*ret);
   1720 
   1721             trace_qmp_exit_my_command(ret_json->str, true);
   1722         }
   1723 
   1724     out:
   1725         visit_free(v);
   1726         v = qapi_dealloc_visitor_new();
   1727         visit_start_struct(v, NULL, NULL, 0, NULL);
   1728         visit_type_q_obj_my_command_arg_members(v, &arg, NULL);
   1729         visit_end_struct(v, NULL);
   1730         visit_free(v);
   1731     }
   1732 
   1733     [Uninteresting stuff omitted...]
   1734     $ cat qapi-generated/example-qapi-init-commands.h
   1735     [Uninteresting stuff omitted...]
   1736     #ifndef EXAMPLE_QAPI_INIT_COMMANDS_H
   1737     #define EXAMPLE_QAPI_INIT_COMMANDS_H
   1738 
   1739     #include "qapi/qmp/dispatch.h"
   1740 
   1741     void example_qmp_init_marshal(QmpCommandList *cmds);
   1742 
   1743     #endif /* EXAMPLE_QAPI_INIT_COMMANDS_H */
   1744     $ cat qapi-generated/example-qapi-init-commands.c
   1745     [Uninteresting stuff omitted...]
   1746     void example_qmp_init_marshal(QmpCommandList *cmds)
   1747     {
   1748         QTAILQ_INIT(cmds);
   1749 
   1750         qmp_register_command(cmds, "my-command",
   1751                              qmp_marshal_my_command, QCO_NO_OPTIONS);
   1752     }
   1753     [Uninteresting stuff omitted...]
   1754 
   1755 For a modular QAPI schema (see section `Include directives`_), code for
   1756 each sub-module SUBDIR/SUBMODULE.json is actually generated into::
   1757 
   1758  SUBDIR/$(prefix)qapi-commands-SUBMODULE.h
   1759  SUBDIR/$(prefix)qapi-commands-SUBMODULE.c
   1760 
   1761 
   1762 Code generated for events
   1763 -------------------------
   1764 
   1765 This is the code related to events defined in the schema, providing
   1766 qapi_event_send_EVENT().
   1767 
   1768 The following files are created:
   1769 
   1770  ``$(prefix)qapi-events.h``
   1771      Function prototypes for each event type
   1772 
   1773  ``$(prefix)qapi-events.c``
   1774      Implementation of functions to send an event
   1775 
   1776  ``$(prefix)qapi-emit-events.h``
   1777      Enumeration of all event names, and common event code declarations
   1778 
   1779  ``$(prefix)qapi-emit-events.c``
   1780      Common event code definitions
   1781 
   1782 Example::
   1783 
   1784     $ cat qapi-generated/example-qapi-events.h
   1785     [Uninteresting stuff omitted...]
   1786 
   1787     #ifndef EXAMPLE_QAPI_EVENTS_H
   1788     #define EXAMPLE_QAPI_EVENTS_H
   1789 
   1790     #include "qapi/util.h"
   1791     #include "example-qapi-types.h"
   1792 
   1793     void qapi_event_send_my_event(void);
   1794 
   1795     #endif /* EXAMPLE_QAPI_EVENTS_H */
   1796     $ cat qapi-generated/example-qapi-events.c
   1797     [Uninteresting stuff omitted...]
   1798 
   1799     void qapi_event_send_my_event(void)
   1800     {
   1801         QDict *qmp;
   1802 
   1803         qmp = qmp_event_build_dict("MY_EVENT");
   1804 
   1805         example_qapi_event_emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
   1806 
   1807         qobject_unref(qmp);
   1808     }
   1809 
   1810     [Uninteresting stuff omitted...]
   1811     $ cat qapi-generated/example-qapi-emit-events.h
   1812     [Uninteresting stuff omitted...]
   1813 
   1814     #ifndef EXAMPLE_QAPI_EMIT_EVENTS_H
   1815     #define EXAMPLE_QAPI_EMIT_EVENTS_H
   1816 
   1817     #include "qapi/util.h"
   1818 
   1819     typedef enum example_QAPIEvent {
   1820         EXAMPLE_QAPI_EVENT_MY_EVENT,
   1821         EXAMPLE_QAPI_EVENT__MAX,
   1822     } example_QAPIEvent;
   1823 
   1824     #define example_QAPIEvent_str(val) \
   1825         qapi_enum_lookup(&example_QAPIEvent_lookup, (val))
   1826 
   1827     extern const QEnumLookup example_QAPIEvent_lookup;
   1828 
   1829     void example_qapi_event_emit(example_QAPIEvent event, QDict *qdict);
   1830 
   1831     #endif /* EXAMPLE_QAPI_EMIT_EVENTS_H */
   1832     $ cat qapi-generated/example-qapi-emit-events.c
   1833     [Uninteresting stuff omitted...]
   1834 
   1835     const QEnumLookup example_QAPIEvent_lookup = {
   1836         .array = (const char *const[]) {
   1837             [EXAMPLE_QAPI_EVENT_MY_EVENT] = "MY_EVENT",
   1838         },
   1839         .size = EXAMPLE_QAPI_EVENT__MAX
   1840     };
   1841 
   1842     [Uninteresting stuff omitted...]
   1843 
   1844 For a modular QAPI schema (see section `Include directives`_), code for
   1845 each sub-module SUBDIR/SUBMODULE.json is actually generated into ::
   1846 
   1847  SUBDIR/$(prefix)qapi-events-SUBMODULE.h
   1848  SUBDIR/$(prefix)qapi-events-SUBMODULE.c
   1849 
   1850 
   1851 Code generated for introspection
   1852 --------------------------------
   1853 
   1854 The following files are created:
   1855 
   1856  ``$(prefix)qapi-introspect.c``
   1857      Defines a string holding a JSON description of the schema
   1858 
   1859  ``$(prefix)qapi-introspect.h``
   1860      Declares the above string
   1861 
   1862 Example::
   1863 
   1864     $ cat qapi-generated/example-qapi-introspect.h
   1865     [Uninteresting stuff omitted...]
   1866 
   1867     #ifndef EXAMPLE_QAPI_INTROSPECT_H
   1868     #define EXAMPLE_QAPI_INTROSPECT_H
   1869 
   1870     #include "qapi/qmp/qlit.h"
   1871 
   1872     extern const QLitObject example_qmp_schema_qlit;
   1873 
   1874     #endif /* EXAMPLE_QAPI_INTROSPECT_H */
   1875     $ cat qapi-generated/example-qapi-introspect.c
   1876     [Uninteresting stuff omitted...]
   1877 
   1878     const QLitObject example_qmp_schema_qlit = QLIT_QLIST(((QLitObject[]) {
   1879         QLIT_QDICT(((QLitDictEntry[]) {
   1880             { "arg-type", QLIT_QSTR("0"), },
   1881             { "meta-type", QLIT_QSTR("command"), },
   1882             { "name", QLIT_QSTR("my-command"), },
   1883             { "ret-type", QLIT_QSTR("1"), },
   1884             {}
   1885         })),
   1886         QLIT_QDICT(((QLitDictEntry[]) {
   1887             { "arg-type", QLIT_QSTR("2"), },
   1888             { "meta-type", QLIT_QSTR("event"), },
   1889             { "name", QLIT_QSTR("MY_EVENT"), },
   1890             {}
   1891         })),
   1892         /* "0" = q_obj_my-command-arg */
   1893         QLIT_QDICT(((QLitDictEntry[]) {
   1894             { "members", QLIT_QLIST(((QLitObject[]) {
   1895                 QLIT_QDICT(((QLitDictEntry[]) {
   1896                     { "name", QLIT_QSTR("arg1"), },
   1897                     { "type", QLIT_QSTR("[1]"), },
   1898                     {}
   1899                 })),
   1900                 {}
   1901             })), },
   1902             { "meta-type", QLIT_QSTR("object"), },
   1903             { "name", QLIT_QSTR("0"), },
   1904             {}
   1905         })),
   1906         /* "1" = UserDefOne */
   1907         QLIT_QDICT(((QLitDictEntry[]) {
   1908             { "members", QLIT_QLIST(((QLitObject[]) {
   1909                 QLIT_QDICT(((QLitDictEntry[]) {
   1910                     { "name", QLIT_QSTR("integer"), },
   1911                     { "type", QLIT_QSTR("int"), },
   1912                     {}
   1913                 })),
   1914                 QLIT_QDICT(((QLitDictEntry[]) {
   1915                     { "default", QLIT_QNULL, },
   1916                     { "name", QLIT_QSTR("string"), },
   1917                     { "type", QLIT_QSTR("str"), },
   1918                     {}
   1919                 })),
   1920                 {}
   1921             })), },
   1922             { "meta-type", QLIT_QSTR("object"), },
   1923             { "name", QLIT_QSTR("1"), },
   1924             {}
   1925         })),
   1926         /* "2" = q_empty */
   1927         QLIT_QDICT(((QLitDictEntry[]) {
   1928             { "members", QLIT_QLIST(((QLitObject[]) {
   1929                 {}
   1930             })), },
   1931             { "meta-type", QLIT_QSTR("object"), },
   1932             { "name", QLIT_QSTR("2"), },
   1933             {}
   1934         })),
   1935         QLIT_QDICT(((QLitDictEntry[]) {
   1936             { "element-type", QLIT_QSTR("1"), },
   1937             { "meta-type", QLIT_QSTR("array"), },
   1938             { "name", QLIT_QSTR("[1]"), },
   1939             {}
   1940         })),
   1941         QLIT_QDICT(((QLitDictEntry[]) {
   1942             { "json-type", QLIT_QSTR("int"), },
   1943             { "meta-type", QLIT_QSTR("builtin"), },
   1944             { "name", QLIT_QSTR("int"), },
   1945             {}
   1946         })),
   1947         QLIT_QDICT(((QLitDictEntry[]) {
   1948             { "json-type", QLIT_QSTR("string"), },
   1949             { "meta-type", QLIT_QSTR("builtin"), },
   1950             { "name", QLIT_QSTR("str"), },
   1951             {}
   1952         })),
   1953         {}
   1954     }));
   1955 
   1956     [Uninteresting stuff omitted...]