Initial Import
[profile/ivi/json-glib.git] / json-glib / json-parser.h
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 #if !defined(__JSON_GLIB_INSIDE__) && !defined(JSON_COMPILATION)
25 #error "Only <json-glib/json-glib.h> can be included directly."
26 #endif
27
28 #ifndef __JSON_PARSER_H__
29 #define __JSON_PARSER_H__
30
31 #include <glib-object.h>
32 #include <gio/gio.h>
33 #include <json-glib/json-types.h>
34
35 G_BEGIN_DECLS
36
37 #define JSON_TYPE_PARSER                (json_parser_get_type ())
38 #define JSON_PARSER(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), JSON_TYPE_PARSER, JsonParser))
39 #define JSON_IS_PARSER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), JSON_TYPE_PARSER))
40 #define JSON_PARSER_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST ((klass), JSON_TYPE_PARSER, JsonParserClass))
41 #define JSON_IS_PARSER_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), JSON_TYPE_PARSER))
42 #define JSON_PARSER_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), JSON_TYPE_PARSER, JsonParserClass))
43
44 #define JSON_PARSER_ERROR               (json_parser_error_quark ())
45
46 typedef struct _JsonParser              JsonParser;
47 typedef struct _JsonParserPrivate       JsonParserPrivate;
48 typedef struct _JsonParserClass         JsonParserClass;
49
50 /**
51  * JsonParserError:
52  * @JSON_PARSER_ERROR_PARSE: parse error
53  * @JSON_PARSER_ERROR_TRAILING_COMMA: unexpected trailing comma
54  * @JSON_PARSER_ERROR_MISSING_COMMA: expected comma
55  * @JSON_PARSER_ERROR_MISSING_COLON: expected colon
56  * @JSON_PARSER_ERROR_INVALID_BAREWORD: invalid bareword
57  * @JSON_PARSER_ERROR_UNKNOWN: unknown error
58  *
59  * Error enumeration for #JsonParser
60  *
61  * This enumeration can be extended at later date
62  */
63 typedef enum {
64   JSON_PARSER_ERROR_PARSE,
65   JSON_PARSER_ERROR_TRAILING_COMMA,
66   JSON_PARSER_ERROR_MISSING_COMMA,
67   JSON_PARSER_ERROR_MISSING_COLON,
68   JSON_PARSER_ERROR_INVALID_BAREWORD,
69   
70   JSON_PARSER_ERROR_UNKNOWN
71 } JsonParserError;
72
73 /**
74  * JsonParser:
75  * 
76  * JSON data streams parser. The contents of the #JsonParser structure are
77  * private and should only be accessed via the provided API.
78  */
79 struct _JsonParser
80 {
81   /*< private >*/
82   GObject parent_instance;
83
84   JsonParserPrivate *priv;
85 };
86
87 /**
88  * JsonParserClass:
89  * @parse_start: class handler for the JsonParser::parse-start signal
90  * @object_start: class handler for the JsonParser::object-start signal
91  * @object_member: class handler for the JsonParser::object-member signal
92  * @object_end: class handler for the JsonParser::object-end signal
93  * @array_start: class handler for the JsonParser::array-start signal
94  * @array_element: class handler for the JsonParser::array-element signal
95  * @array_end: class handler for the JsonParser::array-end signal
96  * @parse_end: class handler for the JsonParser::parse-end signal
97  * @error: class handler for the JsonParser::error signal
98  *
99  * #JsonParser class.
100  */
101 struct _JsonParserClass
102 {
103   /*< private >*/
104   GObjectClass parent_class;
105
106   /*< public  >*/
107   void (* parse_start)   (JsonParser   *parser);
108
109   void (* object_start)  (JsonParser   *parser);
110   void (* object_member) (JsonParser   *parser,
111                           JsonObject   *object,
112                           const gchar  *member_name);
113   void (* object_end)    (JsonParser   *parser,
114                           JsonObject   *object);
115
116   void (* array_start)   (JsonParser   *parser);
117   void (* array_element) (JsonParser   *parser,
118                           JsonArray    *array,
119                           gint          index_);
120   void (* array_end)     (JsonParser   *parser,
121                           JsonArray    *array);
122
123   void (* parse_end)     (JsonParser   *parser);
124   
125   void (* error)         (JsonParser   *parser,
126                           const GError *error);
127
128   /*< private >*/
129   /* padding for future expansion */
130   void (* _json_reserved1) (void);
131   void (* _json_reserved2) (void);
132   void (* _json_reserved3) (void);
133   void (* _json_reserved4) (void);
134   void (* _json_reserved5) (void);
135   void (* _json_reserved6) (void);
136   void (* _json_reserved7) (void);
137   void (* _json_reserved8) (void);
138 };
139
140 GQuark json_parser_error_quark (void);
141 GType json_parser_get_type (void) G_GNUC_CONST;
142
143 JsonParser *json_parser_new                     (void);
144 gboolean    json_parser_load_from_file          (JsonParser           *parser,
145                                                  const gchar          *filename,
146                                                  GError              **error);
147 gboolean    json_parser_load_from_data          (JsonParser           *parser,
148                                                  const gchar          *data,
149                                                  gssize                length,
150                                                  GError              **error);
151 gboolean    json_parser_load_from_stream        (JsonParser           *parser,
152                                                  GInputStream         *stream,
153                                                  GCancellable         *cancellable,
154                                                  GError              **error);
155 void        json_parser_load_from_stream_async  (JsonParser           *parser,
156                                                  GInputStream         *stream,
157                                                  GCancellable         *cancellable,
158                                                  GAsyncReadyCallback   callback,
159                                                  gpointer              user_data);
160 gboolean    json_parser_load_from_stream_finish (JsonParser           *parser,
161                                                  GAsyncResult         *result,
162                                                  GError              **error);
163
164 JsonNode *  json_parser_get_root                (JsonParser           *parser);
165
166 guint       json_parser_get_current_line        (JsonParser           *parser);
167 guint       json_parser_get_current_pos         (JsonParser           *parser);
168 gboolean    json_parser_has_assignment          (JsonParser           *parser,
169                                                  gchar               **variable_name);
170
171 G_END_DECLS
172
173 #endif /* __JSON_PARSER_H__ */