Commit aa3a982e authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qapi: Improve qobject visitor documentation



Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1488544368-30622-29-git-send-email-armbru@redhat.com>
parent 1f41a645
Loading
Loading
Loading
Loading
+36 −1
Original line number Diff line number Diff line
/*
 * Input Visitor
 *
 * Copyright (C) 2017 Red Hat, Inc.
 * Copyright IBM, Corp. 2011
 *
 * Authors:
@@ -20,7 +21,41 @@
typedef struct QObjectInputVisitor QObjectInputVisitor;

/*
 * Return a new input visitor that converts a QObject to a QAPI object.
 * Create a QObject input visitor for @obj
 *
 * A QObject input visitor visit builds a QAPI object from a QObject.
 * This simultaneously walks the QAPI object being built and the
 * QObject.  The latter walk starts at @obj.
 *
 * visit_type_FOO() creates an instance of QAPI type FOO.  The visited
 * QObject must match FOO.  QDict matches struct/union types, QList
 * matches list types, QString matches type 'str' and enumeration
 * types, QInt matches integer types, QFloat matches type 'number',
 * QBool matches type 'bool'.  Type 'any' is matched by QObject.  A
 * QAPI alternate type is matched when one of its member types is.
 *
 * visit_start_struct() ... visit_end_struct() visits a QDict and
 * creates a QAPI struct/union.  Visits in between visit the
 * dictionary members.  visit_optional() is true when the QDict has
 * this member.  visit_check_struct() fails if unvisited members
 * remain.
 *
 * visit_start_list() ... visit_end_list() visits a QList and creates
 * a QAPI list.  Visits in between visit list members, one after the
 * other.  visit_next_list() returns NULL when all QList members have
 * been visited.  visit_check_list() fails if unvisited members
 * remain.
 *
 * visit_start_alternate() ... visit_end_alternate() visits a QObject
 * and creates a QAPI alternate.  The visit in between visits the same
 * QObject and initializes the alternate member that is in use.
 *
 * Error messages refer to parts of @obj in JavaScript/Python syntax.
 * For example, 'a.b[2]' refers to the second member of the QList
 * member 'b' of the QDict member 'a' of QDict @obj.
 *
 * The caller is responsible for freeing the visitor with
 * visit_free().
 */
Visitor *qobject_input_visitor_new(QObject *obj);

+31 −4
Original line number Diff line number Diff line
@@ -19,11 +19,38 @@

typedef struct QObjectOutputVisitor QObjectOutputVisitor;

/*
 * Create a new QObject output visitor.
/**
 * Create a QObject output visitor for @obj
 *
 * A QObject output visitor visit builds a QObject from QAPI Object.
 * This simultaneously walks the QAPI object and the QObject being
 * built.  The latter walk starts at @obj.
 *
 * visit_type_FOO() creates a QObject for QAPI type FOO.  It creates a
 * QDict for struct/union types, a QList for list types, QString for
 * type 'str' and enumeration types, QInt for integer types, QFloat
 * for type 'number', QBool for type 'bool'.  For type 'any', it
 * increments the QObject's reference count.  For QAPI alternate
 * types, it creates the QObject for the member that is in use.
 *
 * visit_start_struct() ... visit_end_struct() visits a QAPI
 * struct/union and creates a QDict.  Visits in between visit the
 * members.  visit_optional() is true when the struct/union has this
 * member.  visit_check_struct() does nothing.
 *
 * visit_start_list() ... visit_end_list() visits a QAPI list and
 * creates a QList.  Visits in between visit list members, one after
 * the other.  visit_next_list() returns NULL when all QAPI list
 * members have been visited.  visit_check_list() does nothing.
 *
 * visit_start_alternate() ... visit_end_alternate() visits a QAPI
 * alternate.  The visit in between creates the QObject for the
 * alternate member that is in use.
 *
 * Errors are not expected to happen.
 *
 * If everything else succeeds, pass @result to visit_complete() to
 * collect the result of the visit.
 * The caller is responsible for freeing the visitor with
 * visit_free().
 */
Visitor *qobject_output_visitor_new(QObject **result);