1
#pragma once
2

            
3
#include "envoy/compression/compressor/config.h"
4
#include "envoy/compression/compressor/factory.h"
5
#include "envoy/server/filter_config.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace Compression {
10
namespace Common {
11
namespace Compressor {
12

            
13
template <class ConfigProto>
14
class CompressorLibraryFactoryBase
15
    : public Envoy::Compression::Compressor::NamedCompressorLibraryConfigFactory {
16
public:
17
  Envoy::Compression::Compressor::CompressorFactoryPtr
18
  createCompressorFactoryFromProto(const Protobuf::Message& proto_config,
19
392
                                   Server::Configuration::GenericFactoryContext& context) override {
20
392
    return createCompressorFactoryFromProtoTyped(
21
392
        MessageUtil::downcastAndValidate<const ConfigProto&>(proto_config,
22
392
                                                             context.messageValidationVisitor()),
23
392
        context);
24
392
  }
25

            
26
62
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
27
62
    return std::make_unique<ConfigProto>();
28
62
  }
29

            
30
115
  std::string name() const override { return name_; }
31

            
32
protected:
33
355
  CompressorLibraryFactoryBase(const std::string& name) : name_(name) {}
34

            
35
private:
36
  virtual Envoy::Compression::Compressor::CompressorFactoryPtr
37
  createCompressorFactoryFromProtoTyped(const ConfigProto&,
38
                                        Server::Configuration::GenericFactoryContext&) PURE;
39

            
40
  const std::string name_;
41
};
42

            
43
} // namespace Compressor
44
} // namespace Common
45
} // namespace Compression
46
} // namespace Extensions
47
} // namespace Envoy