*/
#include "qemu/osdep.h"
+#include "qapi/compat-policy.h"
#include "qapi/qobject-output-visitor.h"
#include "qapi/visitor-impl.h"
#include "qemu/queue.h"
struct QObjectOutputVisitor {
Visitor visitor;
+
QSLIST_HEAD(, QStackEntry) stack; /* Stack of unfinished containers */
QObject *root; /* Root of the output visit */
QObject **result; /* User's storage location for result */
return true;
}
+static bool qobject_output_policy_skip(Visitor *v, const char *name,
+ unsigned special_features)
+{
+ CompatPolicy *pol = &v->compat_policy;
+
+ return ((special_features & 1u << QAPI_DEPRECATED)
+ && pol->deprecated_output == COMPAT_POLICY_OUTPUT_HIDE)
+ || ((special_features & 1u << QAPI_UNSTABLE)
+ && pol->unstable_output == COMPAT_POLICY_OUTPUT_HIDE);
+}
+
/* Finish building, and return the root object.
* The root object is never null. The caller becomes the object's
* owner, and should use qobject_unref() when done with it. */
v->visitor.type_number = qobject_output_type_number;
v->visitor.type_any = qobject_output_type_any;
v->visitor.type_null = qobject_output_type_null;
+ v->visitor.policy_skip = qobject_output_policy_skip;
v->visitor.complete = qobject_output_complete;
v->visitor.free = qobject_output_free;