# -*- 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}
#
# Features:
# @enum-feat: Also _one_ {and only}
#
# @two is undocumented
##
{ 'enum': 'Enum', 'data':
  [ { 'name': 'one', 'if': 'IFONE' }, 'two' ],
  'features': [ 'enum-feat' ],
  'if': 'IFCOND' }

##
# @Base:
# @base1:
# the first member
##
{ 'struct': 'Base', 'data': { 'base1': 'Enum' },
  'if': { 'all': ['IFALL1', 'IFALL2'] } }

##
# @Variant1:
# A paragraph
#
# Another paragraph (but no @var: line)
#
# 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'] } } } }

##
# @SugaredUnion:
# Features:
# @union-feat2: a feature
##
{ 'union': 'SugaredUnion',
  'features': [ 'union-feat2' ],
  'data': { 'one': 'Variant1', 'two': { 'type': 'Variant2', 'if': 'IFTWO' } } }

##
# @Alternate:
# @i: an integer
#     @b is undocumented
#
# Features:
# @alt-feat: a feature
##
{ 'alternate': 'Alternate',
  'features': [ 'alt-feat' ],
  'data': { 'i': 'int', 'b': 'bool' },
  'if': { 'not': 'IFNOT' } }

##
# == Another subsection
##

##
# @cmd:
# @arg1: the first argument
#
# @arg2: the second
#        argument
#
# 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' }
