| 185 | } |
| 186 | |
| 187 | absl::StatusOr<Value> EvaluateIn(ExecutionFrameBase& frame, const Value& item, |
| 188 | const AttributeTrail& item_attr, |
| 189 | const Value& container, |
| 190 | const AttributeTrail& container_attr) { |
| 191 | if (item.IsError()) { |
| 192 | return item; |
| 193 | } |
| 194 | if (container.IsError()) { |
| 195 | return container; |
| 196 | } |
| 197 | |
| 198 | if (frame.unknown_processing_enabled()) { |
| 199 | auto accu = frame.attribute_utility().CreateAccumulator(); |
| 200 | accu.MaybeAdd(item, item_attr); |
| 201 | accu.MaybeAdd(container, container_attr); |
| 202 | if (!accu.IsEmpty()) { |
| 203 | return std::move(accu).Build(); |
| 204 | } |
| 205 | } |
| 206 | if (container.IsList()) { |
| 207 | return container.GetList().Contains(item, frame.descriptor_pool(), |
| 208 | frame.message_factory(), frame.arena()); |
| 209 | } |
| 210 | if (container.IsMap()) { |
| 211 | return EvaluateInMap(frame, item, container.GetMap()); |
| 212 | } |
| 213 | return cel::ErrorValue( |
| 214 | cel::runtime_internal::CreateNoMatchingOverloadError(cel::builtin::kIn)); |
| 215 | } |
| 216 | |
| 217 | class DirectInStep : public DirectExpressionStep { |
| 218 | public: |
no test coverage detected