Merge remote-tracking branch 'remotes/vivier2/tags/trivial-branch-for-5.2-pull-reques...
[qemu.git] / include / qapi / qmp / qlit.h
1 /*
2 * Copyright IBM, Corp. 2009
3 * Copyright (c) 2013, 2015, 2017 Red Hat Inc.
4 *
5 * Authors:
6 * Anthony Liguori <aliguori@us.ibm.com>
7 * Markus Armbruster <armbru@redhat.com>
8 * Marc-André Lureau <marcandre.lureau@redhat.com>
9 *
10 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
11 * See the COPYING.LIB file in the top-level directory.
12 *
13 */
14 #ifndef QLIT_H
15 #define QLIT_H
16
17 #include "qobject.h"
18
19 typedef struct QLitDictEntry QLitDictEntry;
20 typedef struct QLitObject QLitObject;
21
22 struct QLitObject {
23 QType type;
24 union {
25 bool qbool;
26 int64_t qnum;
27 const char *qstr;
28 QLitDictEntry *qdict;
29 QLitObject *qlist;
30 } value;
31 };
32
33 struct QLitDictEntry {
34 const char *key;
35 QLitObject value;
36 };
37
38 #define QLIT_QNULL \
39 { .type = QTYPE_QNULL }
40 #define QLIT_QBOOL(val) \
41 { .type = QTYPE_QBOOL, .value.qbool = (val) }
42 #define QLIT_QNUM(val) \
43 { .type = QTYPE_QNUM, .value.qnum = (val) }
44 #define QLIT_QSTR(val) \
45 { .type = QTYPE_QSTRING, .value.qstr = (val) }
46 #define QLIT_QDICT(val) \
47 { .type = QTYPE_QDICT, .value.qdict = (val) }
48 #define QLIT_QLIST(val) \
49 { .type = QTYPE_QLIST, .value.qlist = (val) }
50
51 bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs);
52
53 QObject *qobject_from_qlit(const QLitObject *qlit);
54
55 #endif /* QLIT_H */