186cdf9ecSMarkus Armbruster /* 286cdf9ecSMarkus Armbruster * JSON Parser 386cdf9ecSMarkus Armbruster * 486cdf9ecSMarkus Armbruster * Copyright IBM, Corp. 2009 586cdf9ecSMarkus Armbruster * 686cdf9ecSMarkus Armbruster * Authors: 786cdf9ecSMarkus Armbruster * Anthony Liguori <aliguori@us.ibm.com> 886cdf9ecSMarkus Armbruster * 986cdf9ecSMarkus Armbruster * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 1086cdf9ecSMarkus Armbruster * See the COPYING.LIB file in the top-level directory. 1186cdf9ecSMarkus Armbruster * 1286cdf9ecSMarkus Armbruster */ 1386cdf9ecSMarkus Armbruster 1486cdf9ecSMarkus Armbruster #ifndef JSON_PARSER_INT_H 1586cdf9ecSMarkus Armbruster #define JSON_PARSER_INT_H 1686cdf9ecSMarkus Armbruster 1786cdf9ecSMarkus Armbruster #include "qapi/qmp/json-parser.h" 1886cdf9ecSMarkus Armbruster 1986cdf9ecSMarkus Armbruster typedef enum json_token_type { 20*2ce4ee64SMarkus Armbruster JSON_ERROR = 0, /* must be zero, see json_lexer[] */ 21*2ce4ee64SMarkus Armbruster /* Gap for lexer states */ 22*2ce4ee64SMarkus Armbruster JSON_LCURLY = 100, 23*2ce4ee64SMarkus Armbruster JSON_MIN = JSON_LCURLY, 2486cdf9ecSMarkus Armbruster JSON_RCURLY, 2586cdf9ecSMarkus Armbruster JSON_LSQUARE, 2686cdf9ecSMarkus Armbruster JSON_RSQUARE, 2786cdf9ecSMarkus Armbruster JSON_COLON, 2886cdf9ecSMarkus Armbruster JSON_COMMA, 2986cdf9ecSMarkus Armbruster JSON_INTEGER, 3086cdf9ecSMarkus Armbruster JSON_FLOAT, 3186cdf9ecSMarkus Armbruster JSON_KEYWORD, 3286cdf9ecSMarkus Armbruster JSON_STRING, 3386cdf9ecSMarkus Armbruster JSON_INTERP, 3486cdf9ecSMarkus Armbruster JSON_END_OF_INPUT, 35c0ee3afaSMarkus Armbruster JSON_MAX = JSON_END_OF_INPUT 3686cdf9ecSMarkus Armbruster } JSONTokenType; 3786cdf9ecSMarkus Armbruster 3886cdf9ecSMarkus Armbruster typedef struct JSONToken JSONToken; 3986cdf9ecSMarkus Armbruster 4086cdf9ecSMarkus Armbruster /* json-lexer.c */ 4186cdf9ecSMarkus Armbruster void json_lexer_init(JSONLexer *lexer, bool enable_interpolation); 4286cdf9ecSMarkus Armbruster void json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size); 4386cdf9ecSMarkus Armbruster void json_lexer_flush(JSONLexer *lexer); 4486cdf9ecSMarkus Armbruster void json_lexer_destroy(JSONLexer *lexer); 4586cdf9ecSMarkus Armbruster 4686cdf9ecSMarkus Armbruster /* json-streamer.c */ 4786cdf9ecSMarkus Armbruster void json_message_process_token(JSONLexer *lexer, GString *input, 4886cdf9ecSMarkus Armbruster JSONTokenType type, int x, int y); 4986cdf9ecSMarkus Armbruster 5086cdf9ecSMarkus Armbruster /* json-parser.c */ 5186cdf9ecSMarkus Armbruster JSONToken *json_token(JSONTokenType type, int x, int y, GString *tokstr); 5286cdf9ecSMarkus Armbruster QObject *json_parser_parse(GQueue *tokens, va_list *ap, Error **errp); 5386cdf9ecSMarkus Armbruster 5486cdf9ecSMarkus Armbruster #endif 55