static void write_object(Writer<StringBuffer>& writer, object_t* object) { switch (object->type) { case type_nil: writer.Null(); break; case type_bool: writer.Bool(object->b); break; case type_double: writer.Double(object->d); break; case type_int: writer.Int64(object->i); break; case type_uint: writer.Uint64(object->u); break; case type_str: writer.String(object->str, object->l); break; case type_array: writer.StartArray(); for (size_t i = 0; i < object->l; ++i) write_object(writer, object->children + i); writer.EndArray(); break; case type_map: writer.StartObject(); for (size_t i = 0; i < object->l; ++i) { writer.Key(object->children[i * 2].str, object->children[i * 2].l); write_object(writer, object->children + i * 2 + 1); } writer.EndObject(); break; default: assert(0); break; } }
void operator()(Writer& w, const boost::optional<T>& value) const { if (!value) w.Null(); else Serializer<Writer, T>()(w, *value); }
void operator()(Writer& w, const boost::shared_ptr<T>& ptr) const { if (!ptr) w.Null(); else Serializer<Writer, T>()(w, *ptr); }
void write(const string& pattern_, Writer& writer_) { if (const boost::optional<std::string> value = pattern_.value()) { writer_.String(value->c_str()); } else { writer_.Null(); } }
void Serialize(Writer& writer) const { writer.StartObject(); Person::Serialize(writer); writer.String("education"); if (education_) education_->Serialize(writer); else writer.Null(); writer.EndObject(); }
/* Writes out Null using rapidJSON functions */ extern "C" int tm_json_write_null (tm_json_w_handler_t wh) { Writer<StringBuffer>* w = static_cast<Writer<StringBuffer>*>(wh.writer); w->Null(); return 0; }
void operator()(Writer& w, std::nullptr_t) const { w.Null(); }
void stringify(Writer& writer, const Undefined&) { assert(false); // Should be omitted entirely instead. writer.Null(); }
void stringify(Writer& writer, NullValue) { writer.Null(); }