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