xref: /qemu/include/qom/object_interfaces.h (revision d6edb15576643ab348a9f73e115c2e037edf7460)
1269e09f3SIgor Mammedov #ifndef OBJECT_INTERFACES_H
2269e09f3SIgor Mammedov #define OBJECT_INTERFACES_H
3269e09f3SIgor Mammedov 
4269e09f3SIgor Mammedov #include "qom/object.h"
5269e09f3SIgor Mammedov 
6269e09f3SIgor Mammedov #define TYPE_USER_CREATABLE "user-creatable"
7269e09f3SIgor Mammedov 
8269e09f3SIgor Mammedov #define USER_CREATABLE_CLASS(klass) \
9269e09f3SIgor Mammedov      OBJECT_CLASS_CHECK(UserCreatableClass, (klass), \
10269e09f3SIgor Mammedov                         TYPE_USER_CREATABLE)
11269e09f3SIgor Mammedov #define USER_CREATABLE_GET_CLASS(obj) \
12269e09f3SIgor Mammedov      OBJECT_GET_CLASS(UserCreatableClass, (obj), \
13269e09f3SIgor Mammedov                       TYPE_USER_CREATABLE)
14269e09f3SIgor Mammedov #define USER_CREATABLE(obj) \
15269e09f3SIgor Mammedov      INTERFACE_CHECK(UserCreatable, (obj), \
16269e09f3SIgor Mammedov                      TYPE_USER_CREATABLE)
17269e09f3SIgor Mammedov 
18269e09f3SIgor Mammedov 
19269e09f3SIgor Mammedov typedef struct UserCreatable {
20269e09f3SIgor Mammedov     /* <private> */
21269e09f3SIgor Mammedov     Object Parent;
22269e09f3SIgor Mammedov } UserCreatable;
23269e09f3SIgor Mammedov 
24269e09f3SIgor Mammedov /**
25269e09f3SIgor Mammedov  * UserCreatableClass:
26269e09f3SIgor Mammedov  * @parent_class: the base class
27269e09f3SIgor Mammedov  * @complete: callback to be called after @obj's properties are set.
28*d6edb155SLin Ma  * @can_be_deleted: callback to be called before an object is removed
29*d6edb155SLin Ma  * to check if @obj can be removed safely.
30269e09f3SIgor Mammedov  *
31269e09f3SIgor Mammedov  * Interface is designed to work with -object/object-add/object_add
32269e09f3SIgor Mammedov  * commands.
33269e09f3SIgor Mammedov  * Interface is mandatory for objects that are designed to be user
34269e09f3SIgor Mammedov  * creatable (i.e. -object/object-add/object_add, will accept only
35269e09f3SIgor Mammedov  * objects that inherit this interface).
36269e09f3SIgor Mammedov  *
37269e09f3SIgor Mammedov  * Interface also provides an optional ability to do the second
38269e09f3SIgor Mammedov  * stage * initialization of the object after its properties were
39269e09f3SIgor Mammedov  * set.
40269e09f3SIgor Mammedov  *
41269e09f3SIgor Mammedov  * For objects created without using -object/object-add/object_add,
42269e09f3SIgor Mammedov  * @user_creatable_complete() wrapper should be called manually if
43269e09f3SIgor Mammedov  * object's type implements USER_CREATABLE interface and needs
44269e09f3SIgor Mammedov  * complete() callback to be called.
45269e09f3SIgor Mammedov  */
46269e09f3SIgor Mammedov typedef struct UserCreatableClass {
47269e09f3SIgor Mammedov     /* <private> */
48269e09f3SIgor Mammedov     InterfaceClass parent_class;
49269e09f3SIgor Mammedov 
50269e09f3SIgor Mammedov     /* <public> */
51269e09f3SIgor Mammedov     void (*complete)(UserCreatable *uc, Error **errp);
52*d6edb155SLin Ma     bool (*can_be_deleted)(UserCreatable *uc, Error **errp);
53269e09f3SIgor Mammedov } UserCreatableClass;
54269e09f3SIgor Mammedov 
55269e09f3SIgor Mammedov /**
56269e09f3SIgor Mammedov  * user_creatable_complete:
57269e09f3SIgor Mammedov  * @obj: the object whose complete() method is called if defined
58269e09f3SIgor Mammedov  * @errp: if an error occurs, a pointer to an area to store the error
59269e09f3SIgor Mammedov  *
60269e09f3SIgor Mammedov  * Wrapper to call complete() method if one of types it's inherited
61269e09f3SIgor Mammedov  * from implements USER_CREATABLE interface, otherwise the call does
62269e09f3SIgor Mammedov  * nothing.
63269e09f3SIgor Mammedov  */
64269e09f3SIgor Mammedov void user_creatable_complete(Object *obj, Error **errp);
65*d6edb155SLin Ma 
66*d6edb155SLin Ma /**
67*d6edb155SLin Ma  * user_creatable_can_be_deleted:
68*d6edb155SLin Ma  * @uc: the object whose can_be_deleted() method is called if implemented
69*d6edb155SLin Ma  * @errp: if an error occurs, a pointer to an area to store the error
70*d6edb155SLin Ma  *
71*d6edb155SLin Ma  * Wrapper to call can_be_deleted() method if one of types it's inherited
72*d6edb155SLin Ma  * from implements USER_CREATABLE interface.
73*d6edb155SLin Ma  */
74*d6edb155SLin Ma bool user_creatable_can_be_deleted(UserCreatable *uc, Error **errp);
75269e09f3SIgor Mammedov #endif
76