xref: /openbmc/qemu/include/qapi/qobject-output-visitor.h (revision 5c49c6c241e524b6ba7768de07cab6f2056feb90)
1b3db211fSDaniel P. Berrange /*
2b3db211fSDaniel P. Berrange  * Output Visitor
3b3db211fSDaniel P. Berrange  *
4b3db211fSDaniel P. Berrange  * Copyright IBM, Corp. 2011
5b3db211fSDaniel P. Berrange  *
6b3db211fSDaniel P. Berrange  * Authors:
7b3db211fSDaniel P. Berrange  *  Anthony Liguori   <aliguori@us.ibm.com>
8b3db211fSDaniel P. Berrange  *
9b3db211fSDaniel P. Berrange  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10b3db211fSDaniel P. Berrange  * See the COPYING.LIB file in the top-level directory.
11b3db211fSDaniel P. Berrange  *
12b3db211fSDaniel P. Berrange  */
13b3db211fSDaniel P. Berrange 
14b3db211fSDaniel P. Berrange #ifndef QOBJECT_OUTPUT_VISITOR_H
15b3db211fSDaniel P. Berrange #define QOBJECT_OUTPUT_VISITOR_H
16b3db211fSDaniel P. Berrange 
17b3db211fSDaniel P. Berrange #include "qapi/visitor.h"
18b3db211fSDaniel P. Berrange 
197d5e199aSDaniel P. Berrange typedef struct QObjectOutputVisitor QObjectOutputVisitor;
20b3db211fSDaniel P. Berrange 
21aa3a982eSMarkus Armbruster /**
22aa3a982eSMarkus Armbruster  * Create a QObject output visitor for @obj
23b3db211fSDaniel P. Berrange  *
24aa3a982eSMarkus Armbruster  * A QObject output visitor visit builds a QObject from QAPI Object.
25aa3a982eSMarkus Armbruster  * This simultaneously walks the QAPI object and the QObject being
26aa3a982eSMarkus Armbruster  * built.  The latter walk starts at @obj.
27aa3a982eSMarkus Armbruster  *
28aa3a982eSMarkus Armbruster  * visit_type_FOO() creates a QObject for QAPI type FOO.  It creates a
29aa3a982eSMarkus Armbruster  * QDict for struct/union types, a QList for list types, QString for
30*01b2ffceSMarc-André Lureau  * type 'str' and enumeration types, QNum for integer and float
31*01b2ffceSMarc-André Lureau  * types, QBool for type 'bool'.  For type 'any', it increments the
32*01b2ffceSMarc-André Lureau  * QObject's reference count.  For QAPI alternate types, it creates
33*01b2ffceSMarc-André Lureau  * the QObject for the member that is in use.
34aa3a982eSMarkus Armbruster  *
35aa3a982eSMarkus Armbruster  * visit_start_struct() ... visit_end_struct() visits a QAPI
36aa3a982eSMarkus Armbruster  * struct/union and creates a QDict.  Visits in between visit the
37aa3a982eSMarkus Armbruster  * members.  visit_optional() is true when the struct/union has this
38aa3a982eSMarkus Armbruster  * member.  visit_check_struct() does nothing.
39aa3a982eSMarkus Armbruster  *
40aa3a982eSMarkus Armbruster  * visit_start_list() ... visit_end_list() visits a QAPI list and
41aa3a982eSMarkus Armbruster  * creates a QList.  Visits in between visit list members, one after
42aa3a982eSMarkus Armbruster  * the other.  visit_next_list() returns NULL when all QAPI list
43aa3a982eSMarkus Armbruster  * members have been visited.  visit_check_list() does nothing.
44aa3a982eSMarkus Armbruster  *
45aa3a982eSMarkus Armbruster  * visit_start_alternate() ... visit_end_alternate() visits a QAPI
46aa3a982eSMarkus Armbruster  * alternate.  The visit in between creates the QObject for the
47aa3a982eSMarkus Armbruster  * alternate member that is in use.
48aa3a982eSMarkus Armbruster  *
49aa3a982eSMarkus Armbruster  * Errors are not expected to happen.
50aa3a982eSMarkus Armbruster  *
51aa3a982eSMarkus Armbruster  * The caller is responsible for freeing the visitor with
52aa3a982eSMarkus Armbruster  * visit_free().
53b3db211fSDaniel P. Berrange  */
547d5e199aSDaniel P. Berrange Visitor *qobject_output_visitor_new(QObject **result);
55b3db211fSDaniel P. Berrange 
56b3db211fSDaniel P. Berrange #endif
57