| 260 | FS(rapidjson::Value* json, rapidjson::Document::AllocatorType& allocator) |
| 261 | : json(json), allocator(allocator) {} |
| 262 | bool field(const std::string& name, const SerializeFunc& cb) override { |
| 263 | if (!json->HasMember(name.c_str())) { |
| 264 | rapidjson::Value name_value{name.c_str(), allocator}; |
| 265 | json->AddMember(name_value, rapidjson::Value(), allocator); |
| 266 | } |
| 267 | rapidjson::Value& member = (*json)[name.c_str()]; |
| 268 | RapidSerializer s(&member, allocator); |
| 269 | auto res = cb(&s); |
| 270 | if (s.removed) { |
| 271 | json->RemoveMember(name.c_str()); |
| 272 | } |
| 273 | return res; |
| 274 | } |
| 275 | }; |
| 276 | |
| 277 | if (!json()->IsObject()) { |