/* * JSON streaming support * * 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 QEMU_JSON_STREAMER_H #define QEMU_JSON_STREAMER_H #include "qapi/qmp/json-lexer.h" typedef struct JSONToken { int type; int x; int y; char str[]; } JSONToken; 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_process_token(JSONLexer *lexer, GString *input, JSONTokenType type, int x, int y); 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