blob: 11bf4e8f67cd5944b2dad7633091430b34b1df55 [file]
// 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