Line data Source code
1 : #include "source/common/http/dependency_manager.h" 2 : 3 : #include "absl/container/flat_hash_set.h" 4 : #include "absl/strings/substitute.h" 5 : 6 : namespace Envoy { 7 : namespace Http { 8 : 9 : using envoy::extensions::filters::common::dependency::v3::Dependency; 10 : 11 299 : absl::Status DependencyManager::validDecodeDependencies() { 12 299 : using DependencyTuple = std::tuple<const std::string&, int>; 13 299 : absl::flat_hash_set<DependencyTuple> satisfied; 14 : 15 304 : for (const auto& [name, dependencies] : filter_chain_) { 16 300 : for (const auto& requirement : dependencies.decode_required()) { 17 0 : if (!satisfied.contains({requirement.name(), requirement.type()})) { 18 0 : return absl::NotFoundError(absl::Substitute( 19 0 : "Dependency violation: filter '$0' requires a $1 named '$2'", name, 20 0 : Dependency::DependencyType_Name(requirement.type()), requirement.name())); 21 0 : } 22 0 : } 23 300 : for (const auto& provided : dependencies.decode_provided()) { 24 0 : satisfied.insert({provided.name(), provided.type()}); 25 0 : } 26 300 : } 27 : 28 299 : return absl::OkStatus(); 29 299 : } 30 : 31 : } // namespace Http 32 : } // namespace Envoy