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

Function ValueToCelValue

eval/public/transform_utility.cc:127–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

125}
126
127absl::StatusOr<CelValue> ValueToCelValue(const Value& value,
128 google::protobuf::Arena* arena) {
129 switch (value.kind_case()) {
130 case Value::kBoolValue:
131 return CelValue::CreateBool(value.bool_value());
132 case Value::kBytesValue:
133 return CelValue::CreateBytes(CelValue::BytesHolder(
134 arena->Create<std::string>(arena, value.bytes_value())));
135 case Value::kDoubleValue:
136 return CelValue::CreateDouble(value.double_value());
137 case Value::kEnumValue:
138 return CelValue::CreateInt64(value.enum_value().value());
139 case Value::kInt64Value:
140 return CelValue::CreateInt64(value.int64_value());
141 case Value::kListValue: {
142 std::vector<CelValue> list;
143 for (const auto& subvalue : value.list_value().values()) {
144 CEL_ASSIGN_OR_RETURN(auto list_value, ValueToCelValue(subvalue, arena));
145 list.push_back(list_value);
146 }
147 return CelValue::CreateList(
148 arena->Create<ContainerBackedListImpl>(arena, list));
149 }
150 case Value::kMapValue: {
151 std::vector<std::pair<CelValue, CelValue>> key_values;
152 for (const auto& entry : value.map_value().entries()) {
153 CEL_ASSIGN_OR_RETURN(auto map_key, ValueToCelValue(entry.key(), arena));
154 CEL_RETURN_IF_ERROR(CelValue::CheckMapKeyType(map_key));
155 CEL_ASSIGN_OR_RETURN(auto map_value,
156 ValueToCelValue(entry.value(), arena));
157 key_values.push_back(std::pair<CelValue, CelValue>(map_key, map_value));
158 }
159 CEL_ASSIGN_OR_RETURN(
160 auto cel_map,
161 CreateContainerBackedMap(absl::Span<std::pair<CelValue, CelValue>>(
162 key_values.data(), key_values.size())));
163 auto* cel_map_ptr = cel_map.release();
164 arena->Own(cel_map_ptr);
165 return CelValue::CreateMap(cel_map_ptr);
166 }
167 case Value::kNullValue:
168 return CelValue::CreateNull();
169 case Value::kObjectValue: {
170 auto cel_value =
171 CelProtoWrapper::CreateMessage(&value.object_value(), arena);
172 if (cel_value.IsError()) return *cel_value.ErrorOrDie();
173 return cel_value;
174 }
175 case Value::kStringValue:
176 return CelValue::CreateString(CelValue::StringHolder(
177 arena->Create<std::string>(arena, value.string_value())));
178 case Value::kTypeValue:
179 return CelValue::CreateCelType(CelValue::CelTypeHolder(
180 arena->Create<std::string>(arena, value.type_value())));
181 case Value::kUint64Value:
182 return CelValue::CreateUint64(value.uint64_value());
183 case Value::KIND_NOT_SET:
184 default:

Callers 1

EvalMethod · 0.85

Calls 9

CheckMapKeyTypeFunction · 0.85
kind_caseMethod · 0.80
OwnMethod · 0.80
ErrorOrDieMethod · 0.80
CreateListFunction · 0.50
CreateMapFunction · 0.50
valueMethod · 0.45
releaseMethod · 0.45
IsErrorMethod · 0.45

Tested by

no test coverage detected