Line data Source code
1 : #include "source/common/http/request_id_extension_impl.h" 2 : 3 : #include "source/common/config/utility.h" 4 : 5 : namespace Envoy { 6 : namespace Http { 7 : 8 : absl::StatusOr<RequestIDExtensionSharedPtr> RequestIDExtensionFactory::fromProto( 9 : const envoy::extensions::filters::network::http_connection_manager::v3::RequestIDExtension& 10 : config, 11 140 : Server::Configuration::FactoryContext& context) { 12 140 : const std::string type{TypeUtil::typeUrlToDescriptorFullName(config.typed_config().type_url())}; 13 140 : auto* factory = 14 140 : Registry::FactoryRegistry<Server::Configuration::RequestIDExtensionFactory>::getFactoryByType( 15 140 : type); 16 140 : if (factory == nullptr) { 17 0 : return absl::InvalidArgumentError( 18 0 : fmt::format("Didn't find a registered implementation for type: '{}'", type)); 19 0 : } 20 : 21 140 : ProtobufTypes::MessagePtr message = Config::Utility::translateAnyToFactoryConfig( 22 140 : config.typed_config(), context.messageValidationVisitor(), *factory); 23 140 : return factory->createExtensionInstance(*message, context); 24 140 : } 25 : 26 : } // namespace Http 27 : } // namespace Envoy