xref: /openbmc/qemu/include/qobject/json-parser.h (revision 54e91d1523b412b4cff7cb36c898fa9dc133e886)
1*407bc4bfSDaniel P. Berrangé /*
2*407bc4bfSDaniel P. Berrangé  * JSON Parser
3*407bc4bfSDaniel P. Berrangé  *
4*407bc4bfSDaniel P. Berrangé  * Copyright IBM, Corp. 2009
5*407bc4bfSDaniel P. Berrangé  *
6*407bc4bfSDaniel P. Berrangé  * Authors:
7*407bc4bfSDaniel P. Berrangé  *  Anthony Liguori   <aliguori@us.ibm.com>
8*407bc4bfSDaniel P. Berrangé  *
9*407bc4bfSDaniel P. Berrangé  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10*407bc4bfSDaniel P. Berrangé  * See the COPYING.LIB file in the top-level directory.
11*407bc4bfSDaniel P. Berrangé  *
12*407bc4bfSDaniel P. Berrangé  */
13*407bc4bfSDaniel P. Berrangé 
14*407bc4bfSDaniel P. Berrangé #ifndef QAPI_QMP_JSON_PARSER_H
15*407bc4bfSDaniel P. Berrangé #define QAPI_QMP_JSON_PARSER_H
16*407bc4bfSDaniel P. Berrangé 
17*407bc4bfSDaniel P. Berrangé typedef struct JSONLexer {
18*407bc4bfSDaniel P. Berrangé     int start_state, state;
19*407bc4bfSDaniel P. Berrangé     GString *token;
20*407bc4bfSDaniel P. Berrangé     int x, y;
21*407bc4bfSDaniel P. Berrangé } JSONLexer;
22*407bc4bfSDaniel P. Berrangé 
23*407bc4bfSDaniel P. Berrangé typedef struct JSONMessageParser {
24*407bc4bfSDaniel P. Berrangé     void (*emit)(void *opaque, QObject *json, Error *err);
25*407bc4bfSDaniel P. Berrangé     void *opaque;
26*407bc4bfSDaniel P. Berrangé     va_list *ap;
27*407bc4bfSDaniel P. Berrangé     JSONLexer lexer;
28*407bc4bfSDaniel P. Berrangé     int brace_count;
29*407bc4bfSDaniel P. Berrangé     int bracket_count;
30*407bc4bfSDaniel P. Berrangé     GQueue tokens;
31*407bc4bfSDaniel P. Berrangé     uint64_t token_size;
32*407bc4bfSDaniel P. Berrangé } JSONMessageParser;
33*407bc4bfSDaniel P. Berrangé 
34*407bc4bfSDaniel P. Berrangé void json_message_parser_init(JSONMessageParser *parser,
35*407bc4bfSDaniel P. Berrangé                               void (*emit)(void *opaque, QObject *json,
36*407bc4bfSDaniel P. Berrangé                                            Error *err),
37*407bc4bfSDaniel P. Berrangé                               void *opaque, va_list *ap);
38*407bc4bfSDaniel P. Berrangé 
39*407bc4bfSDaniel P. Berrangé void json_message_parser_feed(JSONMessageParser *parser,
40*407bc4bfSDaniel P. Berrangé                              const char *buffer, size_t size);
41*407bc4bfSDaniel P. Berrangé 
42*407bc4bfSDaniel P. Berrangé void json_message_parser_flush(JSONMessageParser *parser);
43*407bc4bfSDaniel P. Berrangé 
44*407bc4bfSDaniel P. Berrangé void json_message_parser_destroy(JSONMessageParser *parser);
45*407bc4bfSDaniel P. Berrangé 
46*407bc4bfSDaniel P. Berrangé #endif
47