aboutsummaryrefslogtreecommitdiffstats
path: root/src/writer.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-05-10 19:29:22 +0200
committerDavid Robillard <d@drobilla.net>2019-04-13 19:15:32 +0200
commit38ab5fbb4dd2bc6cb24b80cc346546677f3d2813 (patch)
tree29e885fd426c0c8745b3daf72b18ca2e6380fcc8 /src/writer.c
parent19b358a447cf62da8aff1f4ef0235b04f39499eb (diff)
downloadserd-38ab5fbb4dd2bc6cb24b80cc346546677f3d2813.tar.gz
serd-38ab5fbb4dd2bc6cb24b80cc346546677f3d2813.tar.bz2
serd-38ab5fbb4dd2bc6cb24b80cc346546677f3d2813.zip
Add SerdSink interface and hide individual function implementations
Diffstat (limited to 'src/writer.c')
-rw-r--r--src/writer.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/writer.c b/src/writer.c
index 13dd62a6..afe6d778 100644
--- a/src/writer.c
+++ b/src/writer.c
@@ -89,6 +89,7 @@ static const SepRule rules[] = {
};
struct SerdWriterImpl {
+ SerdSink iface;
SerdSyntax syntax;
SerdStyle style;
SerdEnv* env;
@@ -114,6 +115,11 @@ typedef enum {
WRITE_LONG_STRING
} TextContext;
+static SerdStatus
+serd_writer_set_prefix(SerdWriter* writer,
+ const SerdNode* name,
+ const SerdNode* uri);
+
static bool
write_node(SerdWriter* writer,
const SerdNode* node,
@@ -693,7 +699,7 @@ write_list_obj(SerdWriter* writer,
return false;
}
-SerdStatus
+static SerdStatus
serd_writer_write_statement(SerdWriter* writer,
SerdStatementFlags flags,
const SerdNode* graph,
@@ -826,7 +832,7 @@ serd_writer_write_statement(SerdWriter* writer,
return SERD_SUCCESS;
}
-SerdStatus
+static SerdStatus
serd_writer_end_anon(SerdWriter* writer,
const SerdNode* node)
{
@@ -889,6 +895,13 @@ serd_writer_new(SerdSyntax syntax,
writer->empty = true;
writer->byte_sink = serd_byte_sink_new(
ssink, stream, (style & SERD_STYLE_BULK) ? SERD_PAGE_SIZE : 1);
+
+ writer->iface.handle = writer;
+ writer->iface.base = (SerdBaseSink)serd_writer_set_base_uri;
+ writer->iface.prefix = (SerdPrefixSink)serd_writer_set_prefix;
+ writer->iface.statement = (SerdStatementSink)serd_writer_write_statement;
+ writer->iface.end = (SerdEndSink)serd_writer_end_anon;
+
return writer;
}
@@ -987,6 +1000,12 @@ serd_writer_free(SerdWriter* writer)
free(writer);
}
+const SerdSink*
+serd_writer_get_sink(SerdWriter* writer)
+{
+ return &writer->iface;
+}
+
SerdEnv*
serd_writer_get_env(SerdWriter* writer)
{