| /* | |
| * JSON Parser | |
| * | |
| * Copyright IBM, Corp. 2009 | |
| * | |
| * Authors: | |
| * Anthony Liguori <aliguori@us.ibm.com> | |
| * | |
| * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. | |
| * See the COPYING.LIB file in the top-level directory. | |
| * | |
| */ | |
| #ifndef QAPI_QMP_JSON_PARSER_H | |
| #define QAPI_QMP_JSON_PARSER_H | |
| typedef struct JSONLexer { | |
| int start_state, state; | |
| GString *token; | |
| int x, y; | |
| } JSONLexer; | |
| typedef struct JSONMessageParser { | |
| void (*emit)(void *opaque, QObject *json, Error *err); | |
| void *opaque; | |
| va_list *ap; | |
| JSONLexer lexer; | |
| int brace_count; | |
| int bracket_count; | |
| GQueue tokens; | |
| uint64_t token_size; | |
| } JSONMessageParser; | |
| void json_message_parser_init(JSONMessageParser *parser, | |
| void (*emit)(void *opaque, QObject *json, | |
| Error *err), | |
| void *opaque, va_list *ap); | |
| void json_message_parser_feed(JSONMessageParser *parser, | |
| const char *buffer, size_t size); | |
| void json_message_parser_flush(JSONMessageParser *parser); | |
| void json_message_parser_destroy(JSONMessageParser *parser); | |
| #endif |