/* * JSON Parser * * Copyright IBM, Corp. 2009 * * Authors: * Anthony Liguori * * 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 cur_x, cur_y; int x, y; } JSONLexer; typedef struct JSONParserContext { Error *err; GQueue *stack; va_list *ap; } JSONParserContext; typedef struct JSONMessageParser { void (*emit)(void *opaque, QObject *json, Error *err); void *opaque; JSONLexer lexer; JSONParserContext parser; unsigned int brace_count; unsigned int bracket_count; unsigned int token_count; bool error; 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