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