]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-json: json-ostream - Add support for writing literal JSON text from an input...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 7 Aug 2019 22:28:05 +0000 (00:28 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Sat, 18 Nov 2023 18:58:04 +0000 (18:58 +0000)
src/lib-json/json-ostream.c
src/lib-json/json-ostream.h

index 587185b3eb877050587547dd91c06e723373b827..e21b6d41d8e501be702abc04facdb7714ce876ec 100644 (file)
@@ -958,6 +958,33 @@ void json_ostream_nwrite_text(struct json_ostream *stream,
        json_ostream_nwrite_value(stream, name, JSON_TYPE_TEXT, &jvalue);
 }
 
+int json_ostream_write_text_stream(struct json_ostream *stream,
+                                  const char *name, struct istream *input)
+{
+       struct json_value jvalue;
+
+       i_zero(&jvalue);
+       jvalue.content_type = JSON_CONTENT_TYPE_STREAM;
+       jvalue.content.stream = input;
+
+       return json_ostream_write_value(stream, name, JSON_TYPE_TEXT,
+                                       &jvalue);
+}
+
+void json_ostream_nwrite_text_stream(struct json_ostream *stream,
+                                    const char *name, struct istream *input)
+{
+       struct json_value jvalue;
+
+       i_zero(&jvalue);
+       jvalue.content_type = JSON_CONTENT_TYPE_STREAM;
+       jvalue.content.stream = input;
+
+       json_ostream_nwrite_value(stream, name, JSON_TYPE_TEXT, &jvalue);
+       if (input->stream_errno != 0)
+               stream->nfailed = TRUE;
+}
+
 /*
  * Nodes
  */
index f2867fe406b8ee9bff1a76403ca05cf935f3d46c..1c10bf75b5a5cb412830f52065dac85ab2bf479c 100644 (file)
@@ -259,4 +259,11 @@ int json_ostream_write_text(struct json_ostream *stream,
 void json_ostream_nwrite_text(struct json_ostream *stream,
                              const char *name, const char *str);
 
+/* Try to write the stream to the output stream directly (JSON-text, not as
+   a string). Returns 1 if buffered, 0 if not, -1 if error. */
+int json_ostream_write_text_stream(struct json_ostream *stream,
+                                   const char *name, struct istream *input);
+void json_ostream_nwrite_text_stream(struct json_ostream *stream,
+                                     const char *name, struct istream *input);
+
 #endif