1
#pragma once
2

            
3
#include "envoy/common/optref.h"
4
#include "envoy/common/random_generator.h"
5
#include "envoy/common/time.h"
6
#include "envoy/extensions/load_balancing_policies/override_host/v3/override_host.pb.h"
7
#include "envoy/runtime/runtime.h"
8
#include "envoy/upstream/load_balancer.h"
9
#include "envoy/upstream/upstream.h"
10

            
11
#include "source/common/protobuf/protobuf.h"
12
#include "source/common/upstream/load_balancer_factory_base.h"
13

            
14
#include "absl/status/statusor.h"
15

            
16
namespace Envoy {
17
namespace Extensions {
18
namespace LoadBalancingPolicies {
19
namespace OverrideHost {
20

            
21
using ::envoy::extensions::load_balancing_policies::override_host::v3::OverrideHost;
22
using ::Envoy::Random::RandomGenerator;
23
using ::Envoy::Runtime::Loader;
24
using ::Envoy::Upstream::ClusterInfo;
25
using ::Envoy::Upstream::PrioritySet;
26

            
27
class OverrideHostLoadBalancerFactory
28
    : public Upstream::TypedLoadBalancerFactoryBase<OverrideHost> {
29
public:
30
  OverrideHostLoadBalancerFactory()
31
28
      : TypedLoadBalancerFactoryBase("envoy.load_balancing_policies.override_host") {}
32

            
33
  absl::StatusOr<Upstream::LoadBalancerConfigPtr>
34
  loadConfig(Server::Configuration::ServerFactoryContext& context,
35
             const Protobuf::Message& config) override;
36

            
37
  Upstream::ThreadAwareLoadBalancerPtr
38
  create(Envoy::OptRef<const Upstream::LoadBalancerConfig> lb_config,
39
         const ClusterInfo& cluster_info, const PrioritySet& priority_set, Loader& runtime,
40
         RandomGenerator& random, TimeSource& time_source) override;
41
};
42

            
43
} // namespace OverrideHost
44
} // namespace LoadBalancingPolicies
45
} // namespace Extensions
46
} // namespace Envoy