17b1b5d19SPaolo Bonzini /* 27b1b5d19SPaolo Bonzini * JSON Parser 37b1b5d19SPaolo Bonzini * 47b1b5d19SPaolo Bonzini * Copyright IBM, Corp. 2009 57b1b5d19SPaolo Bonzini * 67b1b5d19SPaolo Bonzini * Authors: 77b1b5d19SPaolo Bonzini * Anthony Liguori <aliguori@us.ibm.com> 87b1b5d19SPaolo Bonzini * 97b1b5d19SPaolo Bonzini * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 107b1b5d19SPaolo Bonzini * See the COPYING.LIB file in the top-level directory. 117b1b5d19SPaolo Bonzini * 127b1b5d19SPaolo Bonzini */ 137b1b5d19SPaolo Bonzini 14*86cdf9ecSMarkus Armbruster #ifndef QAPI_QMP_JSON_PARSER_H 15*86cdf9ecSMarkus Armbruster #define QAPI_QMP_JSON_PARSER_H 167b1b5d19SPaolo Bonzini 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; 227b1b5d19SPaolo Bonzini 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); 457b1b5d19SPaolo Bonzini 467b1b5d19SPaolo Bonzini #endif 47