1 /* 2 * Core Definitions for QAPI Visitor implementations 3 * 4 * Copyright (C) 2012-2016 Red Hat, Inc. 5 * 6 * Author: Paolo Bonizni <pbonzini@redhat.com> 7 * 8 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 9 * See the COPYING.LIB file in the top-level directory. 10 * 11 */ 12 #ifndef QAPI_VISITOR_IMPL_H 13 #define QAPI_VISITOR_IMPL_H 14 15 #include "qapi/visitor.h" 16 17 /* 18 * There are three classes of visitors; setting the class determines 19 * how QAPI enums are visited, as well as what additional restrictions 20 * can be asserted. 21 */ 22 typedef enum VisitorType { 23 VISITOR_INPUT, 24 VISITOR_OUTPUT, 25 VISITOR_DEALLOC, 26 } VisitorType; 27 28 struct Visitor 29 { 30 /* Must be set */ 31 void (*start_struct)(Visitor *v, const char *name, void **obj, 32 size_t size, Error **errp); 33 void (*end_struct)(Visitor *v, Error **errp); 34 35 void (*start_list)(Visitor *v, const char *name, Error **errp); 36 /* Must be set */ 37 GenericList *(*next_list)(Visitor *v, GenericList **list, size_t size); 38 /* Must be set */ 39 void (*end_list)(Visitor *v); 40 41 /* Optional, needed for input and dealloc visitors. */ 42 void (*start_alternate)(Visitor *v, const char *name, 43 GenericAlternate **obj, size_t size, 44 bool promote_int, Error **errp); 45 46 /* Optional, needed for dealloc visitor. */ 47 void (*end_alternate)(Visitor *v); 48 49 /* Must be set. */ 50 void (*type_int64)(Visitor *v, const char *name, int64_t *obj, 51 Error **errp); 52 /* Must be set. */ 53 void (*type_uint64)(Visitor *v, const char *name, uint64_t *obj, 54 Error **errp); 55 /* Optional; fallback is type_uint64(). */ 56 void (*type_size)(Visitor *v, const char *name, uint64_t *obj, 57 Error **errp); 58 /* Must be set. */ 59 void (*type_bool)(Visitor *v, const char *name, bool *obj, Error **errp); 60 void (*type_str)(Visitor *v, const char *name, char **obj, Error **errp); 61 void (*type_number)(Visitor *v, const char *name, double *obj, 62 Error **errp); 63 void (*type_any)(Visitor *v, const char *name, QObject **obj, 64 Error **errp); 65 66 /* May be NULL; most useful for input visitors. */ 67 void (*optional)(Visitor *v, const char *name, bool *present); 68 69 /* Must be set */ 70 VisitorType type; 71 }; 72 73 #endif 74