Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/geoip/geoip_provider_driver.h" 4 : 5 : #include "source/common/protobuf/protobuf.h" 6 : #include "source/common/protobuf/utility.h" 7 : 8 : namespace Envoy { 9 : namespace Extensions { 10 : namespace GeoipProviders { 11 : namespace Common { 12 : 13 : /** 14 : * Common base class for geoip provider factory registrations. Removes a substantial amount of 15 : * boilerplate. 16 : */ 17 : template <class ConfigProto> class FactoryBase : public Geolocation::GeoipProviderFactory { 18 : public: 19 : // GeoipProviderFactory 20 : Geolocation::DriverSharedPtr 21 : createGeoipProviderDriver(const Protobuf::Message& config, const std::string& stat_prefix, 22 0 : Server::Configuration::FactoryContext& context) override { 23 0 : return createGeoipProviderDriverTyped(MessageUtil::downcastAndValidate<const ConfigProto&>( 24 0 : config, context.messageValidationVisitor()), 25 0 : stat_prefix, context); 26 0 : } 27 : 28 38 : std::string name() const override { return name_; } 29 : 30 4 : std::string category() const override { return "envoy.geoip_providers"; } 31 : 32 : protected: 33 2 : FactoryBase(const std::string& name) : name_(name) {} 34 : 35 : private: 36 : virtual Geolocation::DriverSharedPtr 37 : createGeoipProviderDriverTyped(const ConfigProto& proto_config, const std::string& stat_prefix, 38 : Server::Configuration::FactoryContext& context) PURE; 39 : 40 : const std::string name_; 41 : }; 42 : 43 : } // namespace Common 44 : } // namespace GeoipProviders 45 : } // namespace Extensions 46 : } // namespace Envoy