1 /* json-parser.h - JSON streams parser 2 * 3 * This file is part of JSON-GLib 4 * Copyright (C) 2007 OpenedHand Ltd. 5 * Copyright (C) 2009 Intel Corp. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 19 * 20 * Author: 21 * Emmanuele Bassi <ebassi@linux.intel.com> 22 */ 23 24 #ifndef __JSON_PARSER_H__ 25 #define __JSON_PARSER_H__ 26 27 #if !defined(__JSON_GLIB_INSIDE__) && !defined(JSON_COMPILATION) 28 #error "Only <json-glib/json-glib.h> can be included directly." 29 #endif 30 31 #include <gio/gio.h> 32 #include <json-glib/json-types.h> 33 34 G_BEGIN_DECLS 35 36 #define JSON_TYPE_PARSER (json_parser_get_type ()) 37 #define JSON_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), JSON_TYPE_PARSER, JsonParser)) 38 #define JSON_IS_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), JSON_TYPE_PARSER)) 39 #define JSON_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), JSON_TYPE_PARSER, JsonParserClass)) 40 #define JSON_IS_PARSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), JSON_TYPE_PARSER)) 41 #define JSON_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), JSON_TYPE_PARSER, JsonParserClass)) 42 43 #define JSON_PARSER_ERROR (json_parser_error_quark ()) 44 45 typedef struct _JsonParser JsonParser; 46 typedef struct _JsonParserPrivate JsonParserPrivate; 47 typedef struct _JsonParserClass JsonParserClass; 48 49 /** 50 * JsonParserError: 51 * @JSON_PARSER_ERROR_PARSE: parse error 52 * @JSON_PARSER_ERROR_TRAILING_COMMA: unexpected trailing comma 53 * @JSON_PARSER_ERROR_MISSING_COMMA: expected comma 54 * @JSON_PARSER_ERROR_MISSING_COLON: expected colon 55 * @JSON_PARSER_ERROR_INVALID_BAREWORD: invalid bareword 56 * @JSON_PARSER_ERROR_EMPTY_MEMBER_NAME: empty member name (Since: 0.16) 57 * @JSON_PARSER_ERROR_INVALID_DATA: invalid data (Since: 0.18) 58 * @JSON_PARSER_ERROR_UNKNOWN: unknown error 59 * 60 * Error enumeration for #JsonParser 61 * 62 * This enumeration can be extended at later date 63 */ 64 typedef enum { 65 JSON_PARSER_ERROR_PARSE, 66 JSON_PARSER_ERROR_TRAILING_COMMA, 67 JSON_PARSER_ERROR_MISSING_COMMA, 68 JSON_PARSER_ERROR_MISSING_COLON, 69 JSON_PARSER_ERROR_INVALID_BAREWORD, 70 JSON_PARSER_ERROR_EMPTY_MEMBER_NAME, 71 JSON_PARSER_ERROR_INVALID_DATA, 72 73 JSON_PARSER_ERROR_UNKNOWN 74 } JsonParserError; 75 76 /** 77 * JsonParser: 78 * 79 * JSON data streams parser. The contents of the #JsonParser structure are 80 * private and should only be accessed via the provided API. 81 */ 82 struct _JsonParser 83 { 84 /*< private >*/ 85 GObject parent_instance; 86 87 JsonParserPrivate *priv; 88 }; 89 90 /** 91 * JsonParserClass: 92 * @parse_start: class handler for the JsonParser::parse-start signal 93 * @object_start: class handler for the JsonParser::object-start signal 94 * @object_member: class handler for the JsonParser::object-member signal 95 * @object_end: class handler for the JsonParser::object-end signal 96 * @array_start: class handler for the JsonParser::array-start signal 97 * @array_element: class handler for the JsonParser::array-element signal 98 * @array_end: class handler for the JsonParser::array-end signal 99 * @parse_end: class handler for the JsonParser::parse-end signal 100 * @error: class handler for the JsonParser::error signal 101 * 102 * #JsonParser class. 103 */ 104 struct _JsonParserClass 105 { 106 /*< private >*/ 107 GObjectClass parent_class; 108 109 /*< public >*/ 110 void (* parse_start) (JsonParser *parser); 111 112 void (* object_start) (JsonParser *parser); 113 void (* object_member) (JsonParser *parser, 114 JsonObject *object, 115 const gchar *member_name); 116 void (* object_end) (JsonParser *parser, 117 JsonObject *object); 118 119 void (* array_start) (JsonParser *parser); 120 void (* array_element) (JsonParser *parser, 121 JsonArray *array, 122 gint index_); 123 void (* array_end) (JsonParser *parser, 124 JsonArray *array); 125 126 void (* parse_end) (JsonParser *parser); 127 128 void (* error) (JsonParser *parser, 129 const GError *error); 130 131 /*< private >*/ 132 /* padding for future expansion */ 133 void (* _json_reserved1) (void); 134 void (* _json_reserved2) (void); 135 void (* _json_reserved3) (void); 136 void (* _json_reserved4) (void); 137 void (* _json_reserved5) (void); 138 void (* _json_reserved6) (void); 139 void (* _json_reserved7) (void); 140 void (* _json_reserved8) (void); 141 }; 142 143 JSON_AVAILABLE_IN_1_0 144 GQuark json_parser_error_quark (void); 145 JSON_AVAILABLE_IN_1_0 146 GType json_parser_get_type (void) G_GNUC_CONST; 147 148 JSON_AVAILABLE_IN_1_0 149 JsonParser *json_parser_new (void); 150 JSON_AVAILABLE_IN_1_2 151 JsonParser *json_parser_new_immutable (void); 152 JSON_AVAILABLE_IN_1_0 153 gboolean json_parser_load_from_file (JsonParser *parser, 154 const gchar *filename, 155 GError **error); 156 JSON_AVAILABLE_IN_1_6 157 gboolean json_parser_load_from_mapped_file (JsonParser *parser, 158 const gchar *filename, 159 GError **error); 160 JSON_AVAILABLE_IN_1_0 161 gboolean json_parser_load_from_data (JsonParser *parser, 162 const gchar *data, 163 gssize length, 164 GError **error); 165 JSON_AVAILABLE_IN_1_0 166 gboolean json_parser_load_from_stream (JsonParser *parser, 167 GInputStream *stream, 168 GCancellable *cancellable, 169 GError **error); 170 JSON_AVAILABLE_IN_1_0 171 void json_parser_load_from_stream_async (JsonParser *parser, 172 GInputStream *stream, 173 GCancellable *cancellable, 174 GAsyncReadyCallback callback, 175 gpointer user_data); 176 JSON_AVAILABLE_IN_1_0 177 gboolean json_parser_load_from_stream_finish (JsonParser *parser, 178 GAsyncResult *result, 179 GError **error); 180 181 JSON_AVAILABLE_IN_1_0 182 JsonNode * json_parser_get_root (JsonParser *parser); 183 JSON_AVAILABLE_IN_1_4 184 JsonNode * json_parser_steal_root (JsonParser *parser); 185 186 JSON_AVAILABLE_IN_1_0 187 guint json_parser_get_current_line (JsonParser *parser); 188 JSON_AVAILABLE_IN_1_0 189 guint json_parser_get_current_pos (JsonParser *parser); 190 JSON_AVAILABLE_IN_1_0 191 gboolean json_parser_has_assignment (JsonParser *parser, 192 gchar **variable_name); 193 194 #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC 195 G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonParser, g_object_unref) 196 #endif 197 198 G_END_DECLS 199 200 #endif /* __JSON_PARSER_H__ */ 201