mirror of https://gitlab.com/qemu-project/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
717 lines
24 KiB
ReStructuredText
717 lines
24 KiB
ReStructuredText
======================
|
|
The Sphinx QAPI Domain
|
|
======================
|
|
|
|
An extension to the `rST syntax
|
|
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_
|
|
in Sphinx is provided by the QAPI Domain, located in
|
|
``docs/sphinx/qapi_domain.py``. This extension is analogous to the
|
|
`Python Domain
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/python.html>`_
|
|
included with Sphinx, but provides special directives and roles
|
|
speciically for annotating and documenting QAPI definitions
|
|
specifically.
|
|
|
|
A `Domain
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/index.html>`_
|
|
provides a set of special rST directives and cross-referencing roles to
|
|
Sphinx for understanding rST markup written to document a specific
|
|
language. By itself, this QAPI extension is only sufficient to parse rST
|
|
markup written by hand; the `autodoc
|
|
<https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html>`_
|
|
functionality is provided elsewhere, in ``docs/sphinx/qapidoc.py``, by
|
|
the "Transmogrifier".
|
|
|
|
It is not expected that any developer nor documentation writer would
|
|
never need to write *nor* read these special rST forms. However, in the
|
|
event that something needs to be debugged, knowing the syntax of the
|
|
domain is quite handy. This reference may also be useful as a guide for
|
|
understanding the QAPI Domain extension code itself. Although most of
|
|
these forms will not be needed for documentation writing purposes,
|
|
understanding the cross-referencing syntax *will* be helpful when
|
|
writing rST documentation elsewhere, or for enriching the body of
|
|
QAPIDoc blocks themselves.
|
|
|
|
|
|
Concepts
|
|
========
|
|
|
|
The QAPI Domain itself provides no mechanisms for reading the QAPI
|
|
Schema or generating documentation from code that exists. It is merely
|
|
the rST syntax used to describe things. For instance, the Sphinx Python
|
|
domain adds syntax like ``:py:func:`` for describing Python functions in
|
|
documentation, but it's the autodoc module that is responsible for
|
|
reading Python code and generating such syntax. QAPI is analogous here:
|
|
qapidoc.py is responsible for reading the QAPI Schema and generating rST
|
|
syntax, and qapi_domain.py is responsible for translating that special
|
|
syntax and providing APIs for Sphinx internals.
|
|
|
|
In other words:
|
|
|
|
qapi_domain.py adds syntax like ``.. qapi:command::`` to Sphinx, and
|
|
qapidoc.py transforms the documentation in ``qapi/*.json`` into rST
|
|
using directives defined by the domain.
|
|
|
|
Or even shorter:
|
|
|
|
``:py:`` is to ``:qapi:`` as *autodoc* is to *qapidoc*.
|
|
|
|
|
|
Info Field Lists
|
|
================
|
|
|
|
`Field lists
|
|
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#field-lists>`_
|
|
are a standard syntax in reStructuredText. Sphinx `extends that syntax
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/python.html#info-field-lists>`_
|
|
to give certain field list entries special meaning and parsing to, for
|
|
example, add cross-references. The QAPI Domain takes advantage of this
|
|
field list extension to document things like Arguments, Members, Values,
|
|
and so on.
|
|
|
|
The special parsing and handling of info field lists in Sphinx is provided by
|
|
three main classes; Field, GroupedField, and TypedField. The behavior
|
|
and formatting for each configured field list entry in the domain
|
|
changes depending on which class is used.
|
|
|
|
Field:
|
|
* Creates an ungrouped field: i.e., each entry will create its own
|
|
section and they will not be combined.
|
|
* May *optionally* support an argument.
|
|
* May apply cross-reference roles to *either* the argument *or* the
|
|
content body, both, or neither.
|
|
|
|
This is used primarily for entries which are not expected to be
|
|
repeated, i.e., items that may only show up at most once. The QAPI
|
|
domain uses this class for "Errors" section.
|
|
|
|
GroupedField:
|
|
* Creates a grouped field: i.e. multiple adjacent entries will be
|
|
merged into one section, and the content will form a bulleted list.
|
|
* *Must* take an argument.
|
|
* May optionally apply a cross-reference role to the argument, but not
|
|
the body.
|
|
* Can be configured to remove the bulleted list if there is only a
|
|
single entry.
|
|
* All items will be generated with the form: "argument -- body"
|
|
|
|
This is used for entries which are expected to be repeated, but aren't
|
|
expected to have two arguments, i.e. types without names, or names
|
|
without types. The QAPI domain uses this class for features, returns,
|
|
and enum values.
|
|
|
|
TypedField:
|
|
* Creates a grouped, typed field. Multiple adjacent entres will be
|
|
merged into one section, and the content will form a bulleted list.
|
|
* *Must* take at least one argument, but supports up to two -
|
|
nominally, a name and a type.
|
|
* May optionally apply a cross-reference role to the type or the name
|
|
argument, but not the body.
|
|
* Can be configured to remove the bulleted list if there is only a
|
|
single entry.
|
|
* All items will be generated with the form "name (type) -- body"
|
|
|
|
This is used for entries that are expected to be repeated and will have
|
|
a name, a type, and a description. The QAPI domain uses this class for
|
|
arguments, alternatives, and members. Wherever type names are referenced
|
|
below, They must be a valid, documented type that will be
|
|
cross-referenced in the HTML output; or one of the built-in JSON types
|
|
(string, number, int, boolean, null, value, q_empty).
|
|
|
|
|
|
``:feat:``
|
|
----------
|
|
|
|
Document a feature attached to a QAPI definition.
|
|
|
|
:availability: This field list is available in the body of Command,
|
|
Event, Enum, Object and Alternate directives.
|
|
:syntax: ``:feat name: Lorem ipsum, dolor sit amet...``
|
|
:type: `sphinx.util.docfields.GroupedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.GroupedField.html?private=1>`_
|
|
|
|
Example::
|
|
|
|
.. qapi:object:: BlockdevOptionsVirtioBlkVhostVdpa
|
|
:since: 7.2
|
|
:ifcond: CONFIG_BLKIO
|
|
|
|
Driver specific block device options for the virtio-blk-vhost-vdpa
|
|
backend.
|
|
|
|
:memb string path: path to the vhost-vdpa character device.
|
|
:feat fdset: Member ``path`` supports the special "/dev/fdset/N" path
|
|
(since 8.1)
|
|
|
|
|
|
``:arg:``
|
|
---------
|
|
|
|
Document an argument to a QAPI command.
|
|
|
|
:availability: This field list is only available in the body of the
|
|
Command directive.
|
|
:syntax: ``:arg type name: description``
|
|
:type: `sphinx.util.docfields.TypedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.TypedField.html?private=1>`_
|
|
|
|
|
|
Example::
|
|
|
|
.. qapi:command:: job-pause
|
|
:since: 3.0
|
|
|
|
Pause an active job.
|
|
|
|
This command returns immediately after marking the active job for
|
|
pausing. Pausing an already paused job is an error.
|
|
|
|
The job will pause as soon as possible, which means transitioning
|
|
into the PAUSED state if it was RUNNING, or into STANDBY if it was
|
|
READY. The corresponding JOB_STATUS_CHANGE event will be emitted.
|
|
|
|
Cancelling a paused job automatically resumes it.
|
|
|
|
:arg string id: The job identifier.
|
|
|
|
|
|
``:error:``
|
|
-----------
|
|
|
|
Document the error condition(s) of a QAPI command.
|
|
|
|
:availability: This field list is only available in the body of the
|
|
Command directive.
|
|
:syntax: ``:error: Lorem ipsum dolor sit amet ...``
|
|
:type: `sphinx.util.docfields.Field
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.Field.html?private=1>`_
|
|
|
|
The format of the :errors: field list description is free-form rST. The
|
|
alternative spelling ":errors:" is also permitted, but strictly
|
|
analogous.
|
|
|
|
Example::
|
|
|
|
.. qapi:command:: block-job-set-speed
|
|
:since: 1.1
|
|
|
|
Set maximum speed for a background block operation.
|
|
|
|
This command can only be issued when there is an active block job.
|
|
|
|
Throttling can be disabled by setting the speed to 0.
|
|
|
|
:arg string device: The job identifier. This used to be a device
|
|
name (hence the name of the parameter), but since QEMU 2.7 it
|
|
can have other values.
|
|
:arg int speed: the maximum speed, in bytes per second, or 0 for
|
|
unlimited. Defaults to 0.
|
|
:error:
|
|
- If no background operation is active on this device,
|
|
DeviceNotActive
|
|
|
|
|
|
``:return:``
|
|
-------------
|
|
|
|
Document the return type(s) and value(s) of a QAPI command.
|
|
|
|
:availability: This field list is only available in the body of the
|
|
Command directive.
|
|
:syntax: ``:return type: Lorem ipsum dolor sit amet ...``
|
|
:type: `sphinx.util.docfields.GroupedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.GroupedField.html?private=1>`_
|
|
|
|
|
|
Example::
|
|
|
|
.. qapi:command:: query-replay
|
|
:since: 5.2
|
|
|
|
Retrieve the record/replay information. It includes current
|
|
instruction count which may be used for ``replay-break`` and
|
|
``replay-seek`` commands.
|
|
|
|
:return ReplayInfo: record/replay information.
|
|
|
|
.. qmp-example::
|
|
|
|
-> { "execute": "query-replay" }
|
|
<- { "return": {
|
|
"mode": "play", "filename": "log.rr", "icount": 220414 }
|
|
}
|
|
|
|
|
|
``:value:``
|
|
-----------
|
|
|
|
Document a possible value for a QAPI enum.
|
|
|
|
:availability: This field list is only available in the body of the Enum
|
|
directive.
|
|
:syntax: ``:value name: Lorem ipsum, dolor sit amet ...``
|
|
:type: `sphinx.util.docfields.GroupedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.GroupedField.html?private=1>`_
|
|
|
|
Example::
|
|
|
|
.. qapi:enum:: QapiErrorClass
|
|
:since: 1.2
|
|
|
|
QEMU error classes
|
|
|
|
:value GenericError: this is used for errors that don't require a specific
|
|
error class. This should be the default case for most errors
|
|
:value CommandNotFound: the requested command has not been found
|
|
:value DeviceNotActive: a device has failed to be become active
|
|
:value DeviceNotFound: the requested device has not been found
|
|
:value KVMMissingCap: the requested operation can't be fulfilled because a
|
|
required KVM capability is missing
|
|
|
|
|
|
``:alt:``
|
|
------------
|
|
|
|
Document a possible branch for a QAPI alternate.
|
|
|
|
:availability: This field list is only available in the body of the
|
|
Alternate directive.
|
|
:syntax: ``:alt type name: Lorem ipsum, dolor sit amet ...``
|
|
:type: `sphinx.util.docfields.TypedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.TypedField.html?private=1>`_
|
|
|
|
As a limitation of Sphinx, we must document the "name" of the branch in
|
|
addition to the type, even though this information is not visible on the
|
|
wire in the QMP protocol format. This limitation *may* be lifted at a
|
|
future date.
|
|
|
|
Example::
|
|
|
|
.. qapi:alternate:: StrOrNull
|
|
:since: 2.10
|
|
|
|
This is a string value or the explicit lack of a string (null
|
|
pointer in C). Intended for cases when 'optional absent' already
|
|
has a different meaning.
|
|
|
|
:alt string s: the string value
|
|
:alt null n: no string value
|
|
|
|
|
|
``:memb:``
|
|
----------
|
|
|
|
Document a member of an Event or Object.
|
|
|
|
:availability: This field list is available in the body of Event or
|
|
Object directives.
|
|
:syntax: ``:memb type name: Lorem ipsum, dolor sit amet ...``
|
|
:type: `sphinx.util.docfields.TypedField
|
|
<https://pydoc.dev/sphinx/latest/sphinx.util.docfields.TypedField.html?private=1>`_
|
|
|
|
This is fundamentally the same as ``:arg:`` and ``:alt:``, but uses the
|
|
"Members" phrasing for Events and Objects (Structs and Unions).
|
|
|
|
Example::
|
|
|
|
.. qapi:event:: JOB_STATUS_CHANGE
|
|
:since: 3.0
|
|
|
|
Emitted when a job transitions to a different status.
|
|
|
|
:memb string id: The job identifier
|
|
:memb JobStatus status: The new job status
|
|
|
|
|
|
Arbitrary field lists
|
|
---------------------
|
|
|
|
Other field list names, while valid rST syntax, are prohibited inside of
|
|
QAPI directives to help prevent accidental misspellings of info field
|
|
list names. If you want to add a new arbitrary "non-value-added" field
|
|
list to QAPI documentation, you must add the field name to the allow
|
|
list in ``docs/conf.py``
|
|
|
|
For example::
|
|
|
|
qapi_allowed_fields = {
|
|
"see also",
|
|
}
|
|
|
|
Will allow you to add arbitrary field lists in QAPI directives::
|
|
|
|
.. qapi:command:: x-fake-command
|
|
|
|
:see also: Lorem ipsum, dolor sit amet ...
|
|
|
|
|
|
Cross-references
|
|
================
|
|
|
|
Cross-reference `roles
|
|
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html>`_
|
|
in the QAPI domain are modeled closely after the `Python
|
|
cross-referencing syntax
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/python.html#cross-referencing-python-objects>`_.
|
|
|
|
QAPI definitions can be referenced using the standard `any
|
|
<https://www.sphinx-doc.org/en/master/usage/referencing.html#role-any>`_
|
|
role cross-reference syntax, such as with ```query-blockstats```. In
|
|
the event that disambiguation is needed, cross-references can also be
|
|
written using a number of explicit cross-reference roles:
|
|
|
|
* ``:qapi:mod:`block-core``` -- Reference a QAPI module. The link will
|
|
take you to the beginning of that section in the documentation.
|
|
* ``:qapi:cmd:`query-block``` -- Reference a QAPI command.
|
|
* ``:qapi:event:`JOB_STATUS_CHANGE``` -- Reference a QAPI event.
|
|
* ``:qapi:enum:`QapiErrorClass``` -- Reference a QAPI enum.
|
|
* ``:qapi:obj:`BlockdevOptionsVirtioBlkVhostVdpa`` -- Reference a QAPI
|
|
object (struct or union)
|
|
* ``:qapi:alt:`StrOrNull``` -- Reference a QAPI alternate.
|
|
* ``:qapi:type:`BlockDirtyInfo``` -- Reference *any* QAPI type; this
|
|
excludes modules, commands, and events.
|
|
* ``:qapi:any:`block-job-set-speed``` -- Reference absolutely any QAPI entity.
|
|
|
|
Type arguments in info field lists are converted into references as if
|
|
you had used the ``:qapi:type:`` role. All of the special syntax below
|
|
applies to both info field lists and standalone explicit
|
|
cross-references.
|
|
|
|
|
|
Type decorations
|
|
----------------
|
|
|
|
Type names in references can be surrounded by brackets, like
|
|
``[typename]``, to indicate an array of that type. The cross-reference
|
|
will apply only to the type name between the brackets. For example;
|
|
``:qapi:type:`[Qcow2BitmapInfoFlags]``` renders to:
|
|
:qapi:type:`[QMP:Qcow2BitmapInfoFlags]`
|
|
|
|
To indicate an optional argument/member in a field list, the type name
|
|
can be suffixed with ``?``. The cross-reference will be transformed to
|
|
"type, Optional" with the link applying only to the type name. For
|
|
example; ``:qapi:type:`BitmapSyncMode?``` renders to:
|
|
:qapi:type:`QMP:BitmapSyncMode?`
|
|
|
|
|
|
Namespaces
|
|
----------
|
|
|
|
Mimicking the `Python domain target specification syntax
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/python.html#target-specification>`_,
|
|
QAPI allows you to specify the fully qualified path for a data
|
|
type.
|
|
|
|
* A namespace can be explicitly provided;
|
|
e.g. ``:qapi:type:`QMP:BitmapSyncMode``
|
|
* A module can be explicitly provided;
|
|
``:qapi:type:`QMP:block-core.BitmapSyncMode``` will render to:
|
|
:qapi:type:`QMP:block-core.BitmapSyncMode`
|
|
* If you don't want to display the "fully qualified" name, it can be
|
|
prefixed with a tilde; ``:qapi:type:`~QMP:block-core.BitmapSyncMode```
|
|
will render to: :qapi:type:`~QMP:block-core.BitmapSyncMode`
|
|
|
|
|
|
Target resolution
|
|
-----------------
|
|
|
|
Any cross-reference to a QAPI type, whether using the ```any``` style of
|
|
reference or the more explicit ```:qapi:any:`target``` syntax, allows
|
|
for the presence or absence of either the namespace or module
|
|
information.
|
|
|
|
When absent, their value will be inferred from context by the presence
|
|
of any ``qapi:namespace`` or ``qapi:module`` directives preceding the
|
|
cross-reference.
|
|
|
|
If no results are found when using the inferred values, other
|
|
namespaces/modules will be searched as a last resort; but any explicitly
|
|
provided values must always match in order to succeed.
|
|
|
|
This allows for efficient cross-referencing with a minimum of syntax in
|
|
the large majority of cases, but additional context or namespace markup
|
|
may be required outside of the QAPI reference documents when linking to
|
|
items that share a name across multiple documented QAPI schema.
|
|
|
|
|
|
Custom link text
|
|
----------------
|
|
|
|
The name of a cross-reference link can be explicitly overridden like
|
|
`most stock Sphinx references
|
|
<https://www.sphinx-doc.org/en/master/usage/referencing.html#syntax>`_
|
|
using the ``custom text <target>`` syntax.
|
|
|
|
For example, ``:qapi:cmd:`Merge dirty bitmaps
|
|
<block-dirty-bitmap-merge>``` will render as: :qapi:cmd:`Merge dirty
|
|
bitmaps <QMP:block-dirty-bitmap-merge>`
|
|
|
|
|
|
Directives
|
|
==========
|
|
|
|
The QAPI domain adds a number of custom directives for documenting
|
|
various QAPI/QMP entities. The syntax is plain rST, and follows this
|
|
general format::
|
|
|
|
.. qapi:directive:: argument
|
|
:option:
|
|
:another-option: with an argument
|
|
|
|
Content body, arbitrary rST is allowed here.
|
|
|
|
|
|
Sphinx standard options
|
|
-----------------------
|
|
|
|
All QAPI directives inherit a number of `standard options
|
|
<https://www.sphinx-doc.org/en/master/usage/domains/index.html#basic-markup>`_
|
|
from Sphinx's ObjectDescription class.
|
|
|
|
The dashed spellings of the below options were added in Sphinx 7.2, the
|
|
undashed spellings are currently retained as aliases, but will be
|
|
removed in a future version.
|
|
|
|
* ``:no-index:`` and ``:noindex:`` -- Do not add this item into the
|
|
Index, and do not make it available for cross-referencing.
|
|
* ``no-index-entry:`` and ``:noindexentry:`` -- Do not add this item
|
|
into the Index, but allow it to be cross-referenced.
|
|
* ``no-contents-entry`` and ``:nocontentsentry:`` -- Exclude this item
|
|
from the Table of Contents.
|
|
* ``no-typesetting`` -- Create TOC, Index and cross-referencing
|
|
entities, but don't actually display the content.
|
|
|
|
|
|
QAPI standard options
|
|
---------------------
|
|
|
|
All QAPI directives -- *except* for namespace and module -- support
|
|
these common options.
|
|
|
|
* ``:namespace: name`` -- This option allows you to override the
|
|
namespace association of a given definition.
|
|
* ``:module: modname`` -- Borrowed from the Python domain, this option allows
|
|
you to override the module association of a given definition.
|
|
* ``:since: x.y`` -- Allows the documenting of "Since" information, which is
|
|
displayed in the signature bar.
|
|
* ``:ifcond: CONDITION`` -- Allows the documenting of conditional availability
|
|
information, which is displayed in an eyecatch just below the
|
|
signature bar.
|
|
* ``:deprecated:`` -- Adds an eyecatch just below the signature bar that
|
|
advertises that this definition is deprecated and should be avoided.
|
|
* ``:unstable:`` -- Adds an eyecatch just below the signature bar that
|
|
advertises that this definition is unstable and should not be used in
|
|
production code.
|
|
|
|
|
|
qapi:namespace
|
|
--------------
|
|
|
|
The ``qapi:namespace`` directive marks the start of a QAPI namespace. It
|
|
does not take a content body, nor any options. All subsequent QAPI
|
|
directives are associated with the most recent namespace. This affects
|
|
the definition's "fully qualified name", allowing two different
|
|
namespaces to create an otherwise identically named definition.
|
|
|
|
This directive also influences how reference resolution works for any
|
|
references that do not explicitly specify a namespace, so this directive
|
|
can be used to nudge references into preferring targets from within that
|
|
namespace.
|
|
|
|
Example::
|
|
|
|
.. qapi:namespace:: QMP
|
|
|
|
|
|
This directive has no visible effect.
|
|
|
|
|
|
qapi:module
|
|
-----------
|
|
|
|
The ``qapi:module`` directive marks the start of a QAPI module. It may have
|
|
a content body, but it can be omitted. All subsequent QAPI directives
|
|
are associated with the most recent module; this effects their "fully
|
|
qualified" name, but has no other effect.
|
|
|
|
Example::
|
|
|
|
.. qapi:module:: block-core
|
|
|
|
Welcome to the block-core module!
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:module:: block-core
|
|
:noindex:
|
|
|
|
Welcome to the block-core module!
|
|
|
|
|
|
qapi:command
|
|
------------
|
|
|
|
This directive documents a QMP command. It may use any of the standard
|
|
Sphinx or QAPI options, and the documentation body may contain
|
|
``:arg:``, ``:feat:``, ``:error:``, or ``:return:`` info field list
|
|
entries.
|
|
|
|
Example::
|
|
|
|
.. qapi:command:: x-fake-command
|
|
:since: 42.0
|
|
:unstable:
|
|
|
|
This command is fake, so it can't hurt you!
|
|
|
|
:arg int foo: Your favorite number.
|
|
:arg string? bar: Your favorite season.
|
|
:return [string]: A lovely computer-written poem for you.
|
|
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:command:: x-fake-command
|
|
:noindex:
|
|
:since: 42.0
|
|
:unstable:
|
|
|
|
This command is fake, so it can't hurt you!
|
|
|
|
:arg int foo: Your favorite number.
|
|
:arg string? bar: Your favorite season.
|
|
:return [string]: A lovely computer-written poem for you.
|
|
|
|
|
|
qapi:event
|
|
----------
|
|
|
|
This directive documents a QMP event. It may use any of the standard
|
|
Sphinx or QAPI options, and the documentation body may contain
|
|
``:memb:`` or ``:feat:`` info field list entries.
|
|
|
|
Example::
|
|
|
|
.. qapi:event:: COMPUTER_IS_RUINED
|
|
:since: 0.1
|
|
:deprecated:
|
|
|
|
This event is emitted when your computer is *extremely* ruined.
|
|
|
|
:memb string reason: Diagnostics as to what caused your computer to
|
|
be ruined.
|
|
:feat sadness: When present, the diagnostic message will also
|
|
explain how sad the computer is as a result of your wrongdoings.
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:event:: COMPUTER_IS_RUINED
|
|
:noindex:
|
|
:since: 0.1
|
|
:deprecated:
|
|
|
|
This event is emitted when your computer is *extremely* ruined.
|
|
|
|
:memb string reason: Diagnostics as to what caused your computer to
|
|
be ruined.
|
|
:feat sadness: When present, the diagnostic message will also explain
|
|
how sad the computer is as a result of your wrongdoings.
|
|
|
|
|
|
qapi:enum
|
|
---------
|
|
|
|
This directive documents a QAPI enum. It may use any of the standard
|
|
Sphinx or QAPI options, and the documentation body may contain
|
|
``:value:`` or ``:feat:`` info field list entries.
|
|
|
|
Example::
|
|
|
|
.. qapi:enum:: Mood
|
|
:ifcond: LIB_PERSONALITY
|
|
|
|
This enum represents your virtual machine's current mood!
|
|
|
|
:value Happy: Your VM is content and well-fed.
|
|
:value Hungry: Your VM needs food.
|
|
:value Melancholic: Your VM is experiencing existential angst.
|
|
:value Petulant: Your VM is throwing a temper tantrum.
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:enum:: Mood
|
|
:noindex:
|
|
:ifcond: LIB_PERSONALITY
|
|
|
|
This enum represents your virtual machine's current mood!
|
|
|
|
:value Happy: Your VM is content and well-fed.
|
|
:value Hungry: Your VM needs food.
|
|
:value Melancholic: Your VM is experiencing existential angst.
|
|
:value Petulant: Your VM is throwing a temper tantrum.
|
|
|
|
|
|
qapi:object
|
|
-----------
|
|
|
|
This directive documents a QAPI structure or union and represents a QMP
|
|
object. It may use any of the standard Sphinx or QAPI options, and the
|
|
documentation body may contain ``:memb:`` or ``:feat:`` info field list
|
|
entries.
|
|
|
|
Example::
|
|
|
|
.. qapi:object:: BigBlobOfStuff
|
|
|
|
This object has a bunch of disparate and unrelated things in it.
|
|
|
|
:memb int Birthday: Your birthday, represented in seconds since the
|
|
UNIX epoch.
|
|
:memb [string] Fav-Foods: A list of your favorite foods.
|
|
:memb boolean? Bizarre-Docs: True if the documentation reference
|
|
should be strange.
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:object:: BigBlobOfStuff
|
|
:noindex:
|
|
|
|
This object has a bunch of disparate and unrelated things in it.
|
|
|
|
:memb int Birthday: Your birthday, represented in seconds since the
|
|
UNIX epoch.
|
|
:memb [string] Fav-Foods: A list of your favorite foods.
|
|
:memb boolean? Bizarre-Docs: True if the documentation reference
|
|
should be strange.
|
|
|
|
|
|
qapi:alternate
|
|
--------------
|
|
|
|
This directive documents a QAPI alternate. It may use any of the
|
|
standard Sphinx or QAPI options, and the documentation body may contain
|
|
``:alt:`` or ``:feat:`` info field list entries.
|
|
|
|
Example::
|
|
|
|
.. qapi:alternate:: ErrorCode
|
|
|
|
This alternate represents an Error Code from the VM.
|
|
|
|
:alt int ec: An error code, like the type you're used to.
|
|
:alt string em: An expletive-laced error message, if your
|
|
computer is feeling particularly cranky and tired of your
|
|
antics.
|
|
|
|
Will be rendered as:
|
|
|
|
.. qapi:alternate:: ErrorCode
|
|
:noindex:
|
|
|
|
This alternate represents an Error Code from the VM.
|
|
|
|
:alt int ec: An error code, like the type you're used to.
|
|
:alt string em: An expletive-laced error message, if your
|
|
computer is feeling particularly cranky and tired of your
|
|
antics.
|