[json-glib] generator: Add an OutputStream-based method



commit d9b2845572123ed79a6626d90d2d2298c9c3d5a7
Author: Emmanuele Bassi <ebassi linux intel com>
Date:   Mon Aug 2 17:07:36 2010 +0100

    generator: Add an OutputStream-based method
    
    Currently, only synchronous API.
    
    The output handling is pretty trivial, unlike the input handling in
    JsonParser; this is a really basic convenience API.

 doc/reference/json-glib-sections.txt |    1 +
 json-glib/json-generator.c           |   37 ++++++++++++++++++++++++++++++++++
 json-glib/json-generator.h           |   22 ++++++++++++-------
 3 files changed, 52 insertions(+), 8 deletions(-)
---
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt
index b985593..27ce45a 100644
--- a/doc/reference/json-glib-sections.txt
+++ b/doc/reference/json-glib-sections.txt
@@ -180,6 +180,7 @@ JsonGeneratorClass
 json_generator_new
 json_generator_to_file
 json_generator_to_data
+json_generator_to_stream
 json_generator_set_root
 
 <SUBSECTION Standard>
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index c77830e..0df5c0b 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -619,6 +619,43 @@ json_generator_to_file (JsonGenerator  *generator,
 }
 
 /**
+ * json_generator_to_stream:
+ * @generator: a #JsonGenerator
+ * @stream: a #GOutputStream
+ * @cancellable: (allow-none): a #GCancellable, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Outputs JSON data and streams it (synchronously) to @stream.
+ *
+ * Return value: %TRUE if the write operation was successful, and %FALSE
+ *   on failure. In case of error, the #GError will be filled accordingly
+ *
+ * Since: 0.12
+ */
+gboolean
+json_generator_to_stream (JsonGenerator  *generator,
+                          GOutputStream  *stream,
+                          GCancellable   *cancellable,
+                          GError        **error)
+{
+  gboolean retval;
+  gchar *buffer;
+  gsize len;
+
+  g_return_val_if_fail (JSON_IS_GENERATOR (generator), FALSE);
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+
+  buffer = json_generator_to_data (generator, &len);
+  retval = g_output_stream_write (stream, buffer, len, cancellable, error);
+  g_free (buffer);
+
+  return retval;
+}
+
+/**
  * json_generator_set_root:
  * @generator: a #JsonGenerator
  * @node: a #JsonNode
diff --git a/json-glib/json-generator.h b/json-glib/json-generator.h
index 743ec27..858bbe8 100644
--- a/json-glib/json-generator.h
+++ b/json-glib/json-generator.h
@@ -29,6 +29,7 @@
 #define __JSON_GENERATOR_H__
 
 #include <json-glib/json-types.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
@@ -76,14 +77,19 @@ struct _JsonGeneratorClass
 
 GType json_generator_get_type (void) G_GNUC_CONST;
 
-JsonGenerator *json_generator_new (void);
-gchar *        json_generator_to_data  (JsonGenerator  *generator,
-                                        gsize          *length);
-gboolean       json_generator_to_file  (JsonGenerator  *generator,
-                                        const gchar    *filename,
-                                        GError        **error);
-void           json_generator_set_root (JsonGenerator  *generator,
-                                        JsonNode       *node);
+JsonGenerator *json_generator_new       (void);
+gchar *        json_generator_to_data   (JsonGenerator  *generator,
+                                         gsize          *length);
+gboolean       json_generator_to_file   (JsonGenerator  *generator,
+                                         const gchar    *filename,
+                                         GError        **error);
+gboolean       json_generator_to_stream (JsonGenerator  *generator,
+                                         GOutputStream  *stream,
+                                         GCancellable   *cancellable,
+                                         GError        **error);
+
+void           json_generator_set_root  (JsonGenerator  *generator,
+                                         JsonNode       *node);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]