| // Copyright 2026 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #include "validator/graph_internals.h" |
| |
| #include <string> |
| #include <utility> |
| |
| #include "absl/container/flat_hash_set.h" |
| #include "absl/strings/str_cat.h" |
| #include "absl/strings/string_view.h" |
| #include "proto/ingredient_assertion.pb.h" |
| #include "proto/validation_status.pb.h" |
| |
| namespace credentio { |
| namespace { |
| |
| ValidationStatus FromOriginalValidator(ValidationStatus status) { |
| std::string explanation = "from original validator"; |
| if (!status.explanation().empty()) { |
| absl::StrAppend(&explanation, ": ", status.explanation()); |
| } |
| status.set_explanation(std::move(explanation)); |
| return status; |
| } |
| |
| } // namespace |
| |
| void PropagateFailuresFromIngredientAssertion( |
| const IngredientAssertionV3& ingredient_assertion, |
| ValidationStatusSet& validation, |
| absl::flat_hash_set<std::pair<absl::string_view, absl::string_view>>& |
| existing_failures) { |
| const auto& failures = |
| ingredient_assertion.validation_results().active_manifest().failures(); |
| if (failures.empty()) { |
| return; |
| } |
| for (const auto& failure : failures) { |
| if (validation.failures_size() >= 10000) { |
| break; |
| } |
| if (existing_failures.insert(std::make_pair(failure.code(), failure.url())) |
| .second) { |
| *validation.add_failures() = FromOriginalValidator(failure); |
| } |
| } |
| } |
| |
| } // namespace credentio |