| 1646 | } |
| 1647 | |
| 1648 | class JsonDebugStringState final { |
| 1649 | public: |
| 1650 | JsonDebugStringState(const JsonAccessor* absl_nonnull accessor, |
| 1651 | std::string* absl_nonnull output) |
| 1652 | : accessor_(accessor), output_(output) {} |
| 1653 | |
| 1654 | void ValueDebugString(const google::protobuf::MessageLite& message) { |
| 1655 | const auto kind_case = accessor_->GetKindCase(message); |
| 1656 | switch (kind_case) { |
| 1657 | case google::protobuf::Value::KIND_NOT_SET: |
| 1658 | ABSL_FALLTHROUGH_INTENDED; |
| 1659 | case google::protobuf::Value::kNullValue: |
| 1660 | output_->append("null"); |
| 1661 | break; |
| 1662 | case google::protobuf::Value::kBoolValue: |
| 1663 | if (accessor_->GetBoolValue(message)) { |
| 1664 | output_->append("true"); |
| 1665 | } else { |
| 1666 | output_->append("false"); |
| 1667 | } |
| 1668 | break; |
| 1669 | case google::protobuf::Value::kNumberValue: |
| 1670 | output_->append( |
| 1671 | JsonNumberDebugString(accessor_->GetNumberValue(message))); |
| 1672 | break; |
| 1673 | case google::protobuf::Value::kStringValue: |
| 1674 | output_->append(JsonStringDebugString( |
| 1675 | accessor_->GetStringValue(message, scratch_))); |
| 1676 | break; |
| 1677 | case google::protobuf::Value::kListValue: |
| 1678 | ListValueDebugString(accessor_->GetListValue(message)); |
| 1679 | break; |
| 1680 | case google::protobuf::Value::kStructValue: |
| 1681 | StructDebugString(accessor_->GetStructValue(message)); |
| 1682 | break; |
| 1683 | default: |
| 1684 | // Should not get here, but if for some terrible reason |
| 1685 | // `google.protobuf.Value` is expanded, just skip. |
| 1686 | break; |
| 1687 | } |
| 1688 | } |
| 1689 | |
| 1690 | void ListValueDebugString(const google::protobuf::MessageLite& message) { |
| 1691 | const int size = accessor_->ValuesSize(message); |
| 1692 | output_->push_back('['); |
| 1693 | for (int i = 0; i < size; ++i) { |
| 1694 | if (i > 0) { |
| 1695 | output_->append(", "); |
| 1696 | } |
| 1697 | ValueDebugString(accessor_->Values(message, i)); |
| 1698 | } |
| 1699 | output_->push_back(']'); |
| 1700 | } |
| 1701 | |
| 1702 | void StructDebugString(const google::protobuf::MessageLite& message) { |
| 1703 | const int size = accessor_->FieldsSize(message); |
| 1704 | std::string key_scratch; |
| 1705 | well_known_types::StringValue key; |
no outgoing calls
no test coverage detected