Mercurial > dovecot > core-2.2
view src/lib/json-parser.h @ 23007:36e01285b5b8
lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author | Stephan Bosch <stephan.bosch@dovecot.fi> |
---|---|
date | Mon, 18 Mar 2019 00:52:37 +0100 |
parents | a3872143befd |
children |
line wrap: on
line source
#ifndef JSON_PARSER_H #define JSON_PARSER_H enum json_type { /* { key: */ JSON_TYPE_OBJECT_KEY, /* : { new object */ JSON_TYPE_OBJECT, /* } (not returned for the root object) */ JSON_TYPE_OBJECT_END, JSON_TYPE_ARRAY, JSON_TYPE_ARRAY_END, JSON_TYPE_STRING, JSON_TYPE_NUMBER, JSON_TYPE_TRUE, JSON_TYPE_FALSE, JSON_TYPE_NULL }; enum json_parser_flags { /* By default we assume that the input is an object and parsing skips the root level "{" and "}". If this flag is set, it's possible to parse any other type of JSON values directly. */ JSON_PARSER_NO_ROOT_OBJECT = 0x01 }; /* Parse JSON tokens from the input stream. */ struct json_parser *json_parser_init(struct istream *input); struct json_parser *json_parser_init_flags(struct istream *input, enum json_parser_flags flags); int json_parser_deinit(struct json_parser **parser, const char **error_r); /* Parse the next token. Returns 1 if found, 0 if more input stream is non-blocking and needs more input, -1 if input stream is at EOF. */ int json_parse_next(struct json_parser *parser, enum json_type *type_r, const char **value_r); /* Skip the next object value. If it's an object, its members are also skipped. */ void json_parse_skip_next(struct json_parser *parser); /* Return the following string as input stream. Returns 1 if ok, 0 if input stream is non-blocking and needs more input, -1 if the next token isn't a string (call json_parse_next()). */ int json_parse_next_stream(struct json_parser *parser, struct istream **input_r); /* Append data to already opened JSON string. src should be valid UTF-8 data. */ void json_append_escaped(string_t *dest, const char *src); /* Same as json_append_escaped(), but append non-\0 terminated input. */ void json_append_escaped_data(string_t *dest, const unsigned char *src, size_t size); void ostream_escaped_json_format(string_t *dest, unsigned char src); #endif