diff options
author | Haavard <havardpe@yahoo-inc.com> | 2017-02-08 14:52:08 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2017-02-09 10:01:06 +0000 |
commit | 771e8ed7e6852cd40db5aee3dc2eefe5209fc3a0 (patch) | |
tree | cfe3fc4a9217839c25315d58c9eb56f9cb3d3760 /vespalib | |
parent | e5d2f5aa1c8502ea614137c5bf2cb5f131e781da (diff) |
support decoding json from abstract input in API
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/vespa/vespalib/data/slime/json_format.cpp | 24 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/data/slime/json_format.h | 1 |
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); }; |