xref: /qemu/include/qobject/json-parser.h (revision 407bc4bf9027f7ac4333e47cd900d773b99a23e3)
14a5fcab7SAnthony Liguori /*
24a5fcab7SAnthony Liguori  * JSON Parser
34a5fcab7SAnthony Liguori  *
44a5fcab7SAnthony Liguori  * Copyright IBM, Corp. 2009
54a5fcab7SAnthony Liguori  *
64a5fcab7SAnthony Liguori  * Authors:
74a5fcab7SAnthony Liguori  *  Anthony Liguori   <aliguori@us.ibm.com>
84a5fcab7SAnthony Liguori  *
94a5fcab7SAnthony Liguori  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
104a5fcab7SAnthony Liguori  * See the COPYING.LIB file in the top-level directory.
114a5fcab7SAnthony Liguori  *
124a5fcab7SAnthony Liguori  */
134a5fcab7SAnthony Liguori 
14*86cdf9ecSMarkus Armbruster #ifndef QAPI_QMP_JSON_PARSER_H
15*86cdf9ecSMarkus Armbruster #define QAPI_QMP_JSON_PARSER_H
164a5fcab7SAnthony Liguori 
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;
224a5fcab7SAnthony Liguori 
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);
454a5fcab7SAnthony Liguori 
464a5fcab7SAnthony Liguori #endif
47