 d85f7efe1f
			
		
	
	
		d85f7efe1f
		
	
	
	
	
		
			
			Before we enable the QGA and QSD namespaces, we need to disambiguate some of the references that would become ambiguous as a result! Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250313044312.189276-11-jsnow@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
		
			
				
	
	
		
			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 analagous 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 explicity 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.
 |