xref: /qemu/include/qapi/qmp/json-parser.h (revision 86cdf9ec)
17b1b5d19SPaolo Bonzini /*
27b1b5d19SPaolo Bonzini  * JSON Parser
37b1b5d19SPaolo Bonzini  *
47b1b5d19SPaolo Bonzini  * Copyright IBM, Corp. 2009
57b1b5d19SPaolo Bonzini  *
67b1b5d19SPaolo Bonzini  * Authors:
77b1b5d19SPaolo Bonzini  *  Anthony Liguori   <aliguori@us.ibm.com>
87b1b5d19SPaolo Bonzini  *
97b1b5d19SPaolo Bonzini  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
107b1b5d19SPaolo Bonzini  * See the COPYING.LIB file in the top-level directory.
117b1b5d19SPaolo Bonzini  *
127b1b5d19SPaolo Bonzini  */
137b1b5d19SPaolo Bonzini 
14*86cdf9ecSMarkus Armbruster #ifndef QAPI_QMP_JSON_PARSER_H
15*86cdf9ecSMarkus Armbruster #define QAPI_QMP_JSON_PARSER_H
167b1b5d19SPaolo Bonzini 
17*86cdf9ecSMarkus Armbruster typedef struct JSONLexer {
18*86cdf9ecSMarkus Armbruster     int start_state, state;
19*86cdf9ecSMarkus Armbruster     GString *token;
20*86cdf9ecSMarkus Armbruster     int x, y;
21*86cdf9ecSMarkus Armbruster } JSONLexer;
227b1b5d19SPaolo Bonzini 
23*86cdf9ecSMarkus Armbruster typedef struct JSONMessageParser {
24*86cdf9ecSMarkus Armbruster     void (*emit)(void *opaque, QObject *json, Error *err);
25*86cdf9ecSMarkus Armbruster     void *opaque;
26*86cdf9ecSMarkus Armbruster     va_list *ap;
27*86cdf9ecSMarkus Armbruster     JSONLexer lexer;
28*86cdf9ecSMarkus Armbruster     int brace_count;
29*86cdf9ecSMarkus Armbruster     int bracket_count;
30*86cdf9ecSMarkus Armbruster     GQueue tokens;
31*86cdf9ecSMarkus Armbruster     uint64_t token_size;
32*86cdf9ecSMarkus Armbruster } JSONMessageParser;
33abe7c206SMarkus Armbruster 
34*86cdf9ecSMarkus Armbruster void json_message_parser_init(JSONMessageParser *parser,
35*86cdf9ecSMarkus Armbruster                               void (*emit)(void *opaque, QObject *json,
36*86cdf9ecSMarkus Armbruster                                            Error *err),
37*86cdf9ecSMarkus Armbruster                               void *opaque, va_list *ap);
38*86cdf9ecSMarkus Armbruster 
39*86cdf9ecSMarkus Armbruster void json_message_parser_feed(JSONMessageParser *parser,
40*86cdf9ecSMarkus Armbruster                              const char *buffer, size_t size);
41*86cdf9ecSMarkus Armbruster 
42*86cdf9ecSMarkus Armbruster void json_message_parser_flush(JSONMessageParser *parser);
43*86cdf9ecSMarkus Armbruster 
44*86cdf9ecSMarkus Armbruster void json_message_parser_destroy(JSONMessageParser *parser);
457b1b5d19SPaolo Bonzini 
467b1b5d19SPaolo Bonzini #endif
47