| 223 | namespace common_internal { |
| 224 | |
| 225 | absl::Status MapValueEqual( |
| 226 | const MapValue& lhs, const MapValue& rhs, |
| 227 | const google::protobuf::DescriptorPool* absl_nonnull descriptor_pool, |
| 228 | google::protobuf::MessageFactory* absl_nonnull message_factory, |
| 229 | google::protobuf::Arena* absl_nonnull arena, Value* absl_nonnull result) { |
| 230 | ABSL_DCHECK(descriptor_pool != nullptr); |
| 231 | ABSL_DCHECK(message_factory != nullptr); |
| 232 | ABSL_DCHECK(arena != nullptr); |
| 233 | ABSL_DCHECK(result != nullptr); |
| 234 | |
| 235 | CEL_ASSIGN_OR_RETURN(auto lhs_size, lhs.Size()); |
| 236 | CEL_ASSIGN_OR_RETURN(auto rhs_size, rhs.Size()); |
| 237 | if (lhs_size != rhs_size) { |
| 238 | *result = FalseValue(); |
| 239 | return absl::OkStatus(); |
| 240 | } |
| 241 | CEL_ASSIGN_OR_RETURN(auto lhs_iterator, lhs.NewIterator()); |
| 242 | Value lhs_key; |
| 243 | Value lhs_value; |
| 244 | Value rhs_value; |
| 245 | for (size_t index = 0; index < lhs_size; ++index) { |
| 246 | ABSL_CHECK(lhs_iterator->HasNext()); // Crash OK |
| 247 | CEL_RETURN_IF_ERROR( |
| 248 | lhs_iterator->Next(descriptor_pool, message_factory, arena, &lhs_key)); |
| 249 | bool rhs_value_found; |
| 250 | CEL_ASSIGN_OR_RETURN( |
| 251 | rhs_value_found, |
| 252 | rhs.Find(lhs_key, descriptor_pool, message_factory, arena, &rhs_value)); |
| 253 | if (!rhs_value_found) { |
| 254 | *result = FalseValue(); |
| 255 | return absl::OkStatus(); |
| 256 | } |
| 257 | CEL_RETURN_IF_ERROR( |
| 258 | lhs.Get(lhs_key, descriptor_pool, message_factory, arena, &lhs_value)); |
| 259 | CEL_RETURN_IF_ERROR(lhs_value.Equal(rhs_value, descriptor_pool, |
| 260 | message_factory, arena, result)); |
| 261 | if (result->IsFalse()) { |
| 262 | return absl::OkStatus(); |
| 263 | } |
| 264 | } |
| 265 | ABSL_DCHECK(!lhs_iterator->HasNext()); |
| 266 | *result = TrueValue(); |
| 267 | return absl::OkStatus(); |
| 268 | } |
| 269 | |
| 270 | absl::Status MapValueEqual( |
| 271 | const CustomMapValueInterface& lhs, const MapValue& rhs, |
no test coverage detected