14a5fcab7SAnthony Liguori /* 24a5fcab7SAnthony Liguori * JSON Parser 34a5fcab7SAnthony Liguori * 44a5fcab7SAnthony Liguori * Copyright IBM, Corp. 2009 54a5fcab7SAnthony Liguori * 64a5fcab7SAnthony Liguori * Authors: 74a5fcab7SAnthony Liguori * Anthony Liguori <aliguori@us.ibm.com> 84a5fcab7SAnthony Liguori * 94a5fcab7SAnthony Liguori * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 104a5fcab7SAnthony Liguori * See the COPYING.LIB file in the top-level directory. 114a5fcab7SAnthony Liguori * 124a5fcab7SAnthony Liguori */ 134a5fcab7SAnthony Liguori 14*86cdf9ecSMarkus Armbruster #ifndef QAPI_QMP_JSON_PARSER_H 15*86cdf9ecSMarkus Armbruster #define QAPI_QMP_JSON_PARSER_H 164a5fcab7SAnthony Liguori 17*86cdf9ecSMarkus Armbruster typedef struct JSONLexer { 18*86cdf9ecSMarkus Armbruster int start_state, state; 19*86cdf9ecSMarkus Armbruster GString *token; 20*86cdf9ecSMarkus Armbruster int x, y; 21*86cdf9ecSMarkus Armbruster } JSONLexer; 224a5fcab7SAnthony Liguori 23*86cdf9ecSMarkus Armbruster typedef struct JSONMessageParser { 24*86cdf9ecSMarkus Armbruster void (*emit)(void *opaque, QObject *json, Error *err); 25*86cdf9ecSMarkus Armbruster void *opaque; 26*86cdf9ecSMarkus Armbruster va_list *ap; 27*86cdf9ecSMarkus Armbruster JSONLexer lexer; 28*86cdf9ecSMarkus Armbruster int brace_count; 29*86cdf9ecSMarkus Armbruster int bracket_count; 30*86cdf9ecSMarkus Armbruster GQueue tokens; 31*86cdf9ecSMarkus Armbruster uint64_t token_size; 32*86cdf9ecSMarkus Armbruster } JSONMessageParser; 33abe7c206SMarkus Armbruster 34*86cdf9ecSMarkus Armbruster void json_message_parser_init(JSONMessageParser *parser, 35*86cdf9ecSMarkus Armbruster void (*emit)(void *opaque, QObject *json, 36*86cdf9ecSMarkus Armbruster Error *err), 37*86cdf9ecSMarkus Armbruster void *opaque, va_list *ap); 38*86cdf9ecSMarkus Armbruster 39*86cdf9ecSMarkus Armbruster void json_message_parser_feed(JSONMessageParser *parser, 40*86cdf9ecSMarkus Armbruster const char *buffer, size_t size); 41*86cdf9ecSMarkus Armbruster 42*86cdf9ecSMarkus Armbruster void json_message_parser_flush(JSONMessageParser *parser); 43*86cdf9ecSMarkus Armbruster 44*86cdf9ecSMarkus Armbruster void json_message_parser_destroy(JSONMessageParser *parser); 454a5fcab7SAnthony Liguori 464a5fcab7SAnthony Liguori #endif 47