| 1239 | } |
| 1240 | |
| 1241 | google::protobuf::Message* AnyFromValue(const google::protobuf::Message* prototype, |
| 1242 | const CelValue& value, google::protobuf::Arena* arena) { |
| 1243 | std::string type_name; |
| 1244 | absl::Cord payload; |
| 1245 | |
| 1246 | // In open source, any->PackFrom() returns void rather than boolean. |
| 1247 | switch (value.type()) { |
| 1248 | case CelValue::Type::kBool: { |
| 1249 | BoolValue v; |
| 1250 | type_name = v.GetTypeName(); |
| 1251 | v.set_value(value.BoolOrDie()); |
| 1252 | payload = v.SerializeAsCord(); |
| 1253 | } break; |
| 1254 | case CelValue::Type::kBytes: { |
| 1255 | BytesValue v; |
| 1256 | type_name = v.GetTypeName(); |
| 1257 | v.set_value(std::string(value.BytesOrDie().value())); |
| 1258 | payload = v.SerializeAsCord(); |
| 1259 | } break; |
| 1260 | case CelValue::Type::kDouble: { |
| 1261 | DoubleValue v; |
| 1262 | type_name = v.GetTypeName(); |
| 1263 | v.set_value(value.DoubleOrDie()); |
| 1264 | payload = v.SerializeAsCord(); |
| 1265 | } break; |
| 1266 | case CelValue::Type::kDuration: { |
| 1267 | Duration v; |
| 1268 | if (!cel::internal::EncodeDuration(value.DurationOrDie(), &v).ok()) { |
| 1269 | return nullptr; |
| 1270 | } |
| 1271 | type_name = v.GetTypeName(); |
| 1272 | payload = v.SerializeAsCord(); |
| 1273 | } break; |
| 1274 | case CelValue::Type::kInt64: { |
| 1275 | Int64Value v; |
| 1276 | type_name = v.GetTypeName(); |
| 1277 | v.set_value(value.Int64OrDie()); |
| 1278 | payload = v.SerializeAsCord(); |
| 1279 | } break; |
| 1280 | case CelValue::Type::kString: { |
| 1281 | StringValue v; |
| 1282 | type_name = v.GetTypeName(); |
| 1283 | v.set_value(std::string(value.StringOrDie().value())); |
| 1284 | payload = v.SerializeAsCord(); |
| 1285 | } break; |
| 1286 | case CelValue::Type::kTimestamp: { |
| 1287 | Timestamp v; |
| 1288 | if (!cel::internal::EncodeTime(value.TimestampOrDie(), &v).ok()) { |
| 1289 | return nullptr; |
| 1290 | } |
| 1291 | type_name = v.GetTypeName(); |
| 1292 | payload = v.SerializeAsCord(); |
| 1293 | } break; |
| 1294 | case CelValue::Type::kUint64: { |
| 1295 | UInt64Value v; |
| 1296 | type_name = v.GetTypeName(); |
| 1297 | v.set_value(value.Uint64OrDie()); |
| 1298 | payload = v.SerializeAsCord(); |
no test coverage detected