# -*- Mode: Python -*-
# vim: filetype=python
#
# Positive QAPI doc comment tests

{ 'pragma': { 'doc-required': true } }

##
# = Section
#
# == Subsection
#
# *with emphasis*
# @var {in braces}
#
# * List item one
# * Two, multiple
#   lines
#
# * Three
#   Still in list
#
# Not in list
#
# - Second list
#   Note: still in list
#
# Note: not in list
#
# 1. Third list
#    is numbered
#
# 2. another item
#
# Returns: the King
# Since: the first age
# Notes:
#
# 1. Lorem ipsum dolor sit amet
#
# 2. Ut enim ad minim veniam
#
# Duis aute irure dolor
#
# Example:
#
# -> in
# <- out
# Examples:
# - *verbatim*
# - {braces}
##

##
# @Enum:
#
# @one: The _one_ {and only}, description on the same line
#
# Features:
# @enum-feat: Also _one_ {and only}
# @enum-member-feat: a member feature
#
# @two is undocumented
##
{ 'enum': 'Enum',
  'data': [ { 'name': 'one', 'if': 'IFONE',
              'features': [ 'enum-member-feat' ] },
            'two' ],
  'features': [ 'enum-feat' ],
  'if': 'IFCOND' }

##
# @Base:
#
# @base1:
# description starts on a new line,
# not indented
##
{ 'struct': 'Base', 'data': { 'base1': 'Enum' },
  'if': { 'all': ['IFALL1', 'IFALL2'] } }

##
# @Variant1:
#
# A paragraph
#
# Another paragraph
#
# @var1 is undocumented
#
# Features:
# @variant1-feat: a feature
# @member-feat: a member feature
##
{ 'struct': 'Variant1',
  'features': [ 'variant1-feat' ],
  'data': { 'var1': { 'type': 'str',
                      'features': [ 'member-feat' ],
                      'if': 'IFSTR' } } }

##
# @Variant2:
#
##
{ 'struct': 'Variant2', 'data': {} }

##
# @Object:
#
# Features:
# @union-feat1: a feature
##
{ 'union': 'Object',
  'features': [ 'union-feat1' ],
  'base': 'Base',
  'discriminator': 'base1',
  'data': { 'one': 'Variant1',
            'two': { 'type': 'Variant2',
                     'if': { 'any': ['IFONE', 'IFTWO'] } } } }

##
# @Alternate:
#
# @i: description starts on the same line
#     remainder indented the same
#     @b is undocumented
#
# Features:
# @alt-feat: a feature
##
{ 'alternate': 'Alternate',
  'features': [ 'alt-feat' ],
  'data': { 'i': 'int', 'b': 'bool' },
  'if': { 'not': { 'any': [ 'IFONE', 'IFTWO' ] } } }

##
# == Another subsection
##

##
# @cmd:
#
# @arg1:
#     description starts on a new line,
#     indented
#
# @arg2: description starts on the same line
#     remainder indented differently
#
# Features:
# @cmd-feat1: a feature
# @cmd-feat2: another feature
# Note: @arg3 is undocumented
# Returns: @Object
# TODO: frobnicate
# Notes:
#
# - Lorem ipsum dolor sit amet
# - Ut enim ad minim veniam
#
# Duis aute irure dolor
# Example:
#
# -> in
# <- out
# Examples:
# - *verbatim*
# - {braces}
# Since: 2.10
##
{ 'command': 'cmd',
  'data': { 'arg1': 'int', '*arg2': 'str', 'arg3': 'bool' },
  'returns': 'Object',
  'features': [ 'cmd-feat1', 'cmd-feat2' ] }

##
# @cmd-boxed:
# If you're bored enough to read this, go see a video of boxed cats
# Features:
# @cmd-feat1: a feature
# @cmd-feat2: another feature
# Example:
#
# -> in
#
# <- out
##
{ 'command': 'cmd-boxed', 'boxed': true,
  'data': 'Object',
  'features': [ 'cmd-feat1', 'cmd-feat2' ] }

##
# @EVT_BOXED:
#
# Features:
# @feat3: a feature
##
{ 'event': 'EVT_BOXED',  'boxed': true,
  'features': [ 'feat3' ],
  'data': 'Object' }
