From 9fe9d6a934aa40250a804de9b7ac2a4daefcc774 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 8 Jul 2018 18:46:38 +0200 Subject: Expose SerdByteSink in public API --- serd/serd.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'serd') diff --git a/serd/serd.h b/serd/serd.h index ee15ce9a..7dae8b3b 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -107,6 +107,11 @@ typedef struct SerdWriterImpl SerdWriter; */ typedef struct SerdSinkImpl SerdSink; +/** + A sink for bytes that receives string output. +*/ +typedef struct SerdByteSinkImpl SerdByteSink; + /** Return status code. */ @@ -419,6 +424,43 @@ typedef size_t (*SerdWriteFunc)(const void* buf, size_t nmemb, void* stream); +/** + Create a new byte sink. + + @param write_func Function called with bytes to consume. + @param stream Context parameter passed to `sink`. + @param block_size Number of bytes to write per call. +*/ +SERD_API +SerdByteSink* +serd_byte_sink_new(SerdWriteFunc write_func, void* stream, size_t block_size); + +/** + Write to `sink`. + + Compatible with SerdWriteFunc. +*/ +SERD_API +size_t +serd_byte_sink_write(const void* buf, + size_t size, + size_t nmemb, + SerdByteSink* sink); + +/** + Flush any pending output in `sink` to the underlying write function. +*/ +SERD_API +void +serd_byte_sink_flush(SerdByteSink* sink); + +/** + Free `sink`. +*/ +SERD_API +void +serd_byte_sink_free(SerdByteSink* sink); + /** @} @name Syntax Utilities -- cgit v1.2.1