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/error.h" 16 #include "qapi/visitor.h" 17 18 struct Visitor 19 { 20 /* Must be set */ 21 void (*start_struct)(Visitor *v, const char *name, void **obj, 22 const char *kind, size_t size, Error **errp); 23 void (*end_struct)(Visitor *v, Error **errp); 24 25 void (*start_implicit_struct)(Visitor *v, void **obj, size_t size, 26 Error **errp); 27 void (*end_implicit_struct)(Visitor *v, Error **errp); 28 29 void (*start_list)(Visitor *v, const char *name, Error **errp); 30 GenericList *(*next_list)(Visitor *v, GenericList **list, Error **errp); 31 void (*end_list)(Visitor *v, Error **errp); 32 33 void (*type_enum)(Visitor *v, const char *name, int *obj, 34 const char *const strings[], const char *kind, 35 Error **errp); 36 /* May be NULL; only needed for input visitors. */ 37 void (*get_next_type)(Visitor *v, const char *name, QType *type, 38 bool promote_int, Error **errp); 39 40 /* Must be set. */ 41 void (*type_int64)(Visitor *v, const char *name, int64_t *obj, 42 Error **errp); 43 /* Must be set. */ 44 void (*type_uint64)(Visitor *v, const char *name, uint64_t *obj, 45 Error **errp); 46 /* Optional; fallback is type_uint64(). */ 47 void (*type_size)(Visitor *v, const char *name, uint64_t *obj, 48 Error **errp); 49 /* Must be set. */ 50 void (*type_bool)(Visitor *v, const char *name, bool *obj, Error **errp); 51 void (*type_str)(Visitor *v, const char *name, char **obj, Error **errp); 52 void (*type_number)(Visitor *v, const char *name, double *obj, 53 Error **errp); 54 void (*type_any)(Visitor *v, const char *name, QObject **obj, 55 Error **errp); 56 57 /* May be NULL; most useful for input visitors. */ 58 void (*optional)(Visitor *v, const char *name, bool *present); 59 60 bool (*start_union)(Visitor *v, bool data_present, Error **errp); 61 }; 62 63 void input_type_enum(Visitor *v, const char *name, int *obj, 64 const char *const strings[], const char *kind, 65 Error **errp); 66 void output_type_enum(Visitor *v, const char *name, int *obj, 67 const char *const strings[], const char *kind, 68 Error **errp); 69 70 #endif 71