Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/router/router.h" 4 : 5 : namespace Envoy { 6 : namespace Router { 7 : 8 : class MetadataMatchCriteriaImpl; 9 : using MetadataMatchCriteriaImplConstPtr = std::unique_ptr<const MetadataMatchCriteriaImpl>; 10 : 11 : class MetadataMatchCriteriaImpl : public MetadataMatchCriteria { 12 : public: 13 : MetadataMatchCriteriaImpl(const ProtobufWkt::Struct& metadata_matches) 14 16 : : metadata_match_criteria_(extractMetadataMatchCriteria(nullptr, metadata_matches)){}; 15 : 16 : // MetadataMatchCriteria 17 0 : const std::vector<MetadataMatchCriterionConstSharedPtr>& metadataMatchCriteria() const override { 18 0 : return metadata_match_criteria_; 19 0 : } 20 : 21 : MetadataMatchCriteriaConstPtr 22 16 : mergeMatchCriteria(const ProtobufWkt::Struct& metadata_matches) const override { 23 16 : return MetadataMatchCriteriaImplConstPtr( 24 16 : new MetadataMatchCriteriaImpl(extractMetadataMatchCriteria(this, metadata_matches))); 25 16 : } 26 : 27 : MetadataMatchCriteriaConstPtr 28 : filterMatchCriteria(const std::set<std::string>& names) const override; 29 : 30 : private: 31 : MetadataMatchCriteriaImpl(const std::vector<MetadataMatchCriterionConstSharedPtr>& criteria) 32 16 : : metadata_match_criteria_(criteria){}; 33 : 34 : static std::vector<MetadataMatchCriterionConstSharedPtr> 35 : extractMetadataMatchCriteria(const MetadataMatchCriteriaImpl* parent, 36 : const ProtobufWkt::Struct& metadata_matches); 37 : 38 : const std::vector<MetadataMatchCriterionConstSharedPtr> metadata_match_criteria_; 39 : }; 40 : 41 : class MetadataMatchCriterionImpl : public MetadataMatchCriterion { 42 : public: 43 : MetadataMatchCriterionImpl(const std::string& name, const HashedValue& value) 44 32 : : name_(name), value_(value) {} 45 : 46 48 : const std::string& name() const override { return name_; } 47 0 : const HashedValue& value() const override { return value_; } 48 : 49 : private: 50 : const std::string name_; 51 : const HashedValue value_; 52 : }; 53 : 54 : } // namespace Router 55 : } // namespace Envoy