1
#pragma once
2

            
3
#include "envoy/compression/decompressor/config.h"
4

            
5
namespace Envoy {
6
namespace Extensions {
7
namespace Compression {
8
namespace Common {
9
namespace Decompressor {
10

            
11
template <class ConfigProto>
12
class DecompressorLibraryFactoryBase
13
    : public Envoy::Compression::Decompressor::NamedDecompressorLibraryConfigFactory {
14
public:
15
  Envoy::Compression::Decompressor::DecompressorFactoryPtr
16
  createDecompressorFactoryFromProto(const Protobuf::Message& proto_config,
17
334
                                     Server::Configuration::FactoryContext& context) override {
18
334
    return createDecompressorFactoryFromProtoTyped(
19
334
        MessageUtil::downcastAndValidate<const ConfigProto&>(proto_config,
20
334
                                                             context.messageValidationVisitor()),
21
334
        context);
22
334
  }
23

            
24
10
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
25
10
    return std::make_unique<ConfigProto>();
26
10
  }
27

            
28
101
  std::string name() const override { return name_; }
29

            
30
protected:
31
346
  DecompressorLibraryFactoryBase(const std::string& name) : name_(name) {}
32

            
33
private:
34
  virtual Envoy::Compression::Decompressor::DecompressorFactoryPtr
35
  createDecompressorFactoryFromProtoTyped(const ConfigProto& proto_config,
36
                                          Server::Configuration::FactoryContext& context) PURE;
37

            
38
  const std::string name_;
39
};
40

            
41
} // namespace Decompressor
42
} // namespace Common
43
} // namespace Compression
44
} // namespace Extensions
45
} // namespace Envoy