summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-02-08 14:52:08 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-02-09 10:01:06 +0000
commit771e8ed7e6852cd40db5aee3dc2eefe5209fc3a0 (patch)
treecfe3fc4a9217839c25315d58c9eb56f9cb3d3760 /vespalib
parente5d2f5aa1c8502ea614137c5bf2cb5f131e781da (diff)
support decoding json from abstract input in API
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/json_format.cpp24
-rw-r--r--vespalib/src/vespa/vespalib/data/slime/json_format.h1
2 files changed, 16 insertions, 9 deletions
diff --git a/vespalib/src/vespa/vespalib/data/slime/json_format.cpp b/vespalib/src/vespa/vespalib/data/slime/json_format.cpp
index e8ebcfb9e10..30ac5d98042 100644
--- a/vespalib/src/vespa/vespalib/data/slime/json_format.cpp
+++ b/vespalib/src/vespa/vespalib/data/slime/json_format.cpp
@@ -178,7 +178,7 @@ struct JsonDecoder {
vespalib::string key;
vespalib::string value;
- JsonDecoder(InputReader &input) : in(input), c(in.read()), key(), value() {}
+ JsonDecoder(InputReader &reader) : in(reader), c(in.read()), key(), value() {}
void next() {
if (in.obtain() > 0) {
@@ -484,18 +484,24 @@ JsonFormat::encode(const Slime &slime, Output &output, bool compact)
}
size_t
-JsonFormat::decode(const Memory &memory, Slime &slime)
+JsonFormat::decode(Input &input, Slime &slime)
{
- MemoryInput memory_input(memory);
- InputReader input(memory_input);
- JsonDecoder decoder(input);
+ InputReader reader(input);
+ JsonDecoder decoder(reader);
decoder.decodeValue(slime);
- if (input.failed()) {
+ if (reader.failed()) {
slime.wrap("partial_result");
- slime.get().setLong("offending_offset", input.get_offset());
- slime.get().setString("error_message", input.get_error_message());
+ slime.get().setLong("offending_offset", reader.get_offset());
+ slime.get().setString("error_message", reader.get_error_message());
}
- return input.failed() ? 0 : input.get_offset();
+ return reader.failed() ? 0 : reader.get_offset();
+}
+
+size_t
+JsonFormat::decode(const Memory &memory, Slime &slime)
+{
+ MemoryInput input(memory);
+ return decode(input, slime);
}
} // namespace vespalib::slime
diff --git a/vespalib/src/vespa/vespalib/data/slime/json_format.h b/vespalib/src/vespa/vespalib/data/slime/json_format.h
index e334cd55546..3d998e5bcd4 100644
--- a/vespalib/src/vespa/vespalib/data/slime/json_format.h
+++ b/vespalib/src/vespa/vespalib/data/slime/json_format.h
@@ -18,6 +18,7 @@ class Inspector;
struct JsonFormat {
static void encode(const Inspector &inspector, Output &output, bool compact);
static void encode(const Slime &slime, Output &output, bool compact);
+ static size_t decode(Input &input, Slime &slime);
static size_t decode(const Memory &memory, Slime &slime);
};