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
10018
    Server::Configuration::FactoryContext& context) {
12
10018
  const std::string type{TypeUtil::typeUrlToDescriptorFullName(config.typed_config().type_url())};
13
10018
  auto* factory =
14
10018
      Registry::FactoryRegistry<Server::Configuration::RequestIDExtensionFactory>::getFactoryByType(
15
10018
          type);
16
10018
  if (factory == nullptr) {
17
1
    return absl::InvalidArgumentError(
18
1
        fmt::format("Didn't find a registered implementation for type: '{}'", type));
19
1
  }
20

            
21
10017
  ProtobufTypes::MessagePtr message = Config::Utility::translateAnyToFactoryConfig(
22
10017
      config.typed_config(), context.messageValidationVisitor(), *factory);
23
10017
  return factory->createExtensionInstance(*message, context);
24
10018
}
25

            
26
} // namespace Http
27
} // namespace Envoy