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