MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / MessageFieldToJson

Method MessageFieldToJson

internal/json.cc:835–912  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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;

Callers

nothing calls this directly

Calls 15

MutableListValueClass · 0.85
typeMethod · 0.80
GetEnumMethod · 0.80
GetStringFieldFunction · 0.70
GetBytesFieldFunction · 0.70
GetReflectionMethod · 0.45
GetDoubleMethod · 0.45
GetFloatMethod · 0.45
GetUInt64Method · 0.45
GetBoolMethod · 0.45
GetUInt32Method · 0.45
nameMethod · 0.45

Tested by

no test coverage detected