| 624 | } |
| 625 | |
| 626 | Status AppendValue(const rj::Value& json_obj) override { |
| 627 | if (json_obj.IsNull()) { |
| 628 | return this->AppendNull(); |
| 629 | } |
| 630 | RETURN_NOT_OK(builder_->Append()); |
| 631 | if (!json_obj.IsArray()) { |
| 632 | return JSONTypeError("array", json_obj.GetType()); |
| 633 | } |
| 634 | auto size = json_obj.Size(); |
| 635 | for (uint32_t i = 0; i < size; ++i) { |
| 636 | const auto& json_pair = json_obj[i]; |
| 637 | if (!json_pair.IsArray()) { |
| 638 | return JSONTypeError("array", json_pair.GetType()); |
| 639 | } |
| 640 | if (json_pair.Size() != 2) { |
| 641 | return Status::Invalid("key item pair must have exactly two elements, had ", |
| 642 | json_pair.Size()); |
| 643 | } |
| 644 | if (json_pair[0].IsNull()) { |
| 645 | return Status::Invalid("null key is invalid"); |
| 646 | } |
| 647 | RETURN_NOT_OK(key_converter_->AppendValue(json_pair[0])); |
| 648 | RETURN_NOT_OK(item_converter_->AppendValue(json_pair[1])); |
| 649 | } |
| 650 | return Status::OK(); |
| 651 | } |
| 652 | |
| 653 | std::shared_ptr<ArrayBuilder> builder() override { return builder_; } |
| 654 |
no test coverage detected