add (ugly) stream support
authorSean Middleditch <sean@middleditch.us>
Tue, 12 Jan 2010 23:29:45 +0000 (15:29 -0800)
committerSean Middleditch <sean@middleditch.us>
Tue, 12 Jan 2010 23:29:45 +0000 (15:29 -0800)
janssonxx.h
test.cc

index b60e8cf..49975bf 100644 (file)
@@ -2,6 +2,10 @@
 #define JANSSONXX_H 1
 
 #include <string>
+#include <ostream>
+#include <istream>
+#include <sstream>
+#include <cstdlib>
 
 namespace jansson {
 
@@ -238,4 +242,21 @@ private:
 
 } // namespace jansson
 
+// stream JSON value out
+std::ostream& operator<<(std::ostream& os, const jansson::Value& value) {
+       char* tmp = value.save_string();
+       os << tmp;
+       free(tmp);
+       return os;
+}
+
+// read JSON value
+std::istream& operator>>(std::istream& is, jansson::Value& value) {
+       std::stringstream tmp;
+       while (is)
+               tmp << static_cast<char>(is.get());
+       value = jansson::Value::load_string(tmp.str().c_str());
+       return is;
+}
+
 #endif
diff --git a/test.cc b/test.cc
index 66ce7bb..28a83c8 100644 (file)
--- a/test.cc
+++ b/test.cc
@@ -117,5 +117,16 @@ int main() {
        free(out_cstr);
        ASSERT_EQ(out, "{\"bar\": 3,\"foo\": \"test\"}\n", "object did not serialize as expected");
 
+       std::istringstream instr(out);
+       instr >> e3;
+       ASSERT_TRUE(e3.is_object(), "e3 is not an object after stream read");
+       ASSERT_EQ(e3.size(), 2, "e3 has wrong size after stream read");
+       ASSERT_EQ(e3.get("bar").as_integer(), 3, "e3.bar has incorrect value after stream read");
+       ASSERT_EQ(e3.get("foo").as_string(), "test", "ee3.test has incorrect value after stream read");
+
+       std::ostringstream outstr;
+       outstr << e3;
+       ASSERT_EQ(instr.str(), "{\"bar\": 3,\"foo\": \"test\"}\n", "object did not serialize as expected");
+
        return 0;
 }