Signed-off-by: Marc-André Lureau <[email protected]>
---
include/qom/object.h | 36 ++++++++++++++++++++++++++++++++++++
qom/object.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+)
diff --git a/include/qom/object.h b/include/qom/object.h
index 271d736956da..9684db935d23 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1990,6 +1990,42 @@ ObjectProperty
*object_class_property_add_enum(ObjectClass *klass,
int (*get)(Object *, Error **),
void (*set)(Object *, int, Error **));
+/**
+ * object_property_add_qapi:
+ * @obj: the object to add a property to
+ * @name: the name of the property
+ * @qapi_type: QAPI type info descriptor
+ * @get: The getter to be called to read a property. If this is NULL, then
+ * the property cannot be read.
+ * @set: the setter to be called to write a property. If this is NULL,
+ * then the property cannot be written.
+ * @release: called when the property is removed from the object. This is
+ * meant to allow a property to free its opaque upon object
+ * destruction. This may be NULL.
+ * @opaque: an opaque pointer to pass to the callbacks for the property
+ *
+ * Add a property with a QAPI type association. The property type name
+ * is derived from @qapi_type->name.
+ *
+ * Returns: The newly added property on success, or %NULL on failure.
+ */
+ObjectProperty *
+object_property_add_qapi(Object *obj, const char *name,
+ const QAPITypeInfo *qapi_type,
+ ObjectPropertyAccessor *get,
+ ObjectPropertyAccessor *set,
+ ObjectPropertyRelease *release,
+ void *opaque);
+
+ObjectProperty *
+object_class_property_add_qapi(ObjectClass *klass,
+ const char *name,
+ const QAPITypeInfo *qapi_type,
+ ObjectPropertyAccessor *get,
+ ObjectPropertyAccessor *set,
+ ObjectPropertyRelease *release,
+ void *opaque);
+
/**
* object_property_add_tm:
* @obj: the object to add a property to
diff --git a/qom/object.c b/qom/object.c
index 93d44a9444ca..1bfb6b933339 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2595,6 +2595,38 @@ object_class_property_add_enum(ObjectClass *klass, const
char *name,
prop);
}
+ObjectProperty *
+object_property_add_qapi(Object *obj, const char *name,
+ const QAPITypeInfo *qapi_type,
+ ObjectPropertyAccessor *get,
+ ObjectPropertyAccessor *set,
+ ObjectPropertyRelease *release,
+ void *opaque)
+{
+ ObjectProperty *prop;
+
+ prop = object_property_add(obj, name, qapi_type->name,
+ get, set, release, opaque);
+ prop->qapi_type = qapi_type;
+ return prop;
+}
+
+ObjectProperty *
+object_class_property_add_qapi(ObjectClass *klass, const char *name,
+ const QAPITypeInfo *qapi_type,
+ ObjectPropertyAccessor *get,
+ ObjectPropertyAccessor *set,
+ ObjectPropertyRelease *release,
+ void *opaque)
+{
+ ObjectProperty *prop;
+
+ prop = object_class_property_add(klass, name, qapi_type->name,
+ get, set, release, opaque);
+ prop->qapi_type = qapi_type;
+ return prop;
+}
+
typedef struct TMProperty {
void (*get)(Object *, struct tm *, Error **);
} TMProperty;
--
2.55.0.543.g5ebe2ebe4ea8