1
#pragma once
2

            
3
#include "envoy/config/common/mutation_rules/v3/mutation_rules.pb.h"
4
#include "envoy/formatter/substitution_formatter_base.h"
5
#include "envoy/http/header_evaluator.h"
6
#include "envoy/server/factory_context.h"
7

            
8
namespace Envoy {
9
namespace Http {
10

            
11
using ProtoHeaderMutatons =
12
    Protobuf::RepeatedPtrField<envoy::config::common::mutation_rules::v3::HeaderMutation>;
13
using ProtoHeaderValueOption = envoy::config::core::v3::HeaderValueOption;
14

            
15
class HeaderMutations : public HeaderEvaluator {
16
public:
17
  static absl::StatusOr<std::unique_ptr<HeaderMutations>>
18
  create(const ProtoHeaderMutatons& header_mutations,
19
         Server::Configuration::CommonFactoryContext& context,
20
         const Formatter::CommandParserPtrVector& command_parsers = {});
21

            
22
  // Http::HeaderEvaluator
23
  void evaluateHeaders(Http::HeaderMap& headers, const Formatter::Context& context,
24
                       const StreamInfo::StreamInfo& stream_info) const override;
25

            
26
private:
27
  HeaderMutations(const ProtoHeaderMutatons& header_mutations,
28
                  Server::Configuration::CommonFactoryContext& context,
29
                  const Formatter::CommandParserPtrVector& command_parsers,
30
                  absl::Status& creation_status);
31

            
32
  std::vector<std::unique_ptr<HeaderEvaluator>> header_mutations_;
33
};
34

            
35
} // namespace Http
36
} // namespace Envoy