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

Function ProtoMessageFromValue

extensions/protobuf/value.h:59–94  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

57}
58
59inline absl::Status ProtoMessageFromValue(const Value& value,
60 google::protobuf::Message& dest_message) {
61 const auto* dest_descriptor = dest_message.GetDescriptor();
62 const google::protobuf::Message* src_message = nullptr;
63 if (auto legacy_struct_value =
64 cel::common_internal::AsLegacyStructValue(value);
65 legacy_struct_value) {
66 src_message = legacy_struct_value->message_ptr();
67 }
68 if (auto parsed_message_value = value.AsParsedMessage();
69 parsed_message_value) {
70 src_message = cel::to_address(*parsed_message_value);
71 }
72 if (src_message != nullptr) {
73 const auto* src_descriptor = src_message->GetDescriptor();
74 if (dest_descriptor == src_descriptor) {
75 dest_message.CopyFrom(*src_message);
76 return absl::OkStatus();
77 }
78 if (dest_descriptor->full_name() == src_descriptor->full_name()) {
79 absl::Cord serialized;
80 if (!src_message->SerializePartialToCord(&serialized)) {
81 return absl::UnknownError(absl::StrCat("failed to serialize message: ",
82 src_descriptor->full_name()));
83 }
84 if (!dest_message.ParsePartialFromCord(serialized)) {
85 return absl::UnknownError(absl::StrCat("failed to parse message: ",
86 dest_descriptor->full_name()));
87 }
88 return absl::OkStatus();
89 }
90 }
91 return TypeConversionError(value.GetRuntimeType(),
92 MessageType(dest_descriptor))
93 .NativeValue();
94}
95
96} // namespace cel::extensions
97

Callers 1

MatchAndExplainMethod · 0.85

Calls 10

AsLegacyStructValueFunction · 0.85
to_addressFunction · 0.85
TypeConversionErrorFunction · 0.85
message_ptrMethod · 0.80
CopyFromMethod · 0.80
MessageTypeClass · 0.50
GetDescriptorMethod · 0.45
AsParsedMessageMethod · 0.45
NativeValueMethod · 0.45
GetRuntimeTypeMethod · 0.45

Tested by 1

MatchAndExplainMethod · 0.68