| 833 | } |
| 834 | |
| 835 | absl::Status MessageFieldToJson( |
| 836 | const google::protobuf::Message& message, |
| 837 | const google::protobuf::FieldDescriptor* absl_nonnull field, |
| 838 | google::protobuf::MessageLite* absl_nonnull result) { |
| 839 | if (field->is_map()) { |
| 840 | return MessageMapFieldToJson(message, field, MutableStructValue(result)); |
| 841 | } |
| 842 | if (field->is_repeated()) { |
| 843 | return MessageRepeatedFieldToJson(message, field, |
| 844 | MutableListValue(result)); |
| 845 | } |
| 846 | const auto* reflection = message.GetReflection(); |
| 847 | switch (field->type()) { |
| 848 | case FieldDescriptor::TYPE_DOUBLE: |
| 849 | SetNumberValue(result, reflection->GetDouble(message, field)); |
| 850 | break; |
| 851 | case FieldDescriptor::TYPE_FLOAT: |
| 852 | SetNumberValue(result, reflection->GetFloat(message, field)); |
| 853 | break; |
| 854 | case FieldDescriptor::TYPE_FIXED64: |
| 855 | ABSL_FALLTHROUGH_INTENDED; |
| 856 | case FieldDescriptor::TYPE_UINT64: |
| 857 | SetNumberValue(result, reflection->GetUInt64(message, field)); |
| 858 | break; |
| 859 | case FieldDescriptor::TYPE_BOOL: |
| 860 | SetBoolValue(result, reflection->GetBool(message, field)); |
| 861 | break; |
| 862 | case FieldDescriptor::TYPE_STRING: |
| 863 | StringValueToJson( |
| 864 | well_known_types::GetStringField(message, field, scratch_), result); |
| 865 | break; |
| 866 | case FieldDescriptor::TYPE_GROUP: |
| 867 | ABSL_FALLTHROUGH_INTENDED; |
| 868 | case FieldDescriptor::TYPE_MESSAGE: |
| 869 | return ToJson((reflection->GetMessage)(message, field), result); |
| 870 | case FieldDescriptor::TYPE_BYTES: |
| 871 | BytesValueToJson( |
| 872 | well_known_types::GetBytesField(message, field, scratch_), result); |
| 873 | break; |
| 874 | case FieldDescriptor::TYPE_FIXED32: |
| 875 | ABSL_FALLTHROUGH_INTENDED; |
| 876 | case FieldDescriptor::TYPE_UINT32: |
| 877 | SetNumberValue(result, reflection->GetUInt32(message, field)); |
| 878 | break; |
| 879 | case FieldDescriptor::TYPE_ENUM: { |
| 880 | const auto* enum_descriptor = field->enum_type(); |
| 881 | if (enum_descriptor->full_name() == "google.protobuf.NullValue") { |
| 882 | SetNullValue(result); |
| 883 | } else { |
| 884 | const auto* enum_value_descriptor = |
| 885 | reflection->GetEnum(message, field); |
| 886 | if (enum_value_descriptor != nullptr) { |
| 887 | SetStringValue(result, enum_value_descriptor->name()); |
| 888 | } else { |
| 889 | SetNumberValue(result, reflection->GetEnumValue(message, field)); |
| 890 | } |
| 891 | } |
| 892 | } break; |
nothing calls this directly
no test coverage detected