1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/extensions/load_balancing_policies/cluster_provided/v3/cluster_provided.pb.h"
6
#include "envoy/upstream/load_balancer.h"
7

            
8
#include "source/common/upstream/load_balancer_factory_base.h"
9

            
10
namespace Envoy {
11
namespace Extensions {
12
namespace LoadBalancingPolicies {
13
namespace ClusterProvided {
14

            
15
class ClusterProvidedLbConfig : public Upstream::LoadBalancerConfig {
16
public:
17
315
  ClusterProvidedLbConfig() = default;
18
};
19

            
20
class Factory
21
    : public Upstream::TypedLoadBalancerFactoryBase<
22
          envoy::extensions::load_balancing_policies::cluster_provided::v3::ClusterProvided> {
23
public:
24
497
  Factory() : TypedLoadBalancerFactoryBase("envoy.load_balancing_policies.cluster_provided") {}
25

            
26
  Upstream::ThreadAwareLoadBalancerPtr create(OptRef<const Upstream::LoadBalancerConfig> lb_config,
27
                                              const Upstream::ClusterInfo& cluster_info,
28
                                              const Upstream::PrioritySet& priority_set,
29
                                              Runtime::Loader& runtime,
30
                                              Random::RandomGenerator& random,
31
                                              TimeSource& time_source) override;
32

            
33
  absl::StatusOr<Upstream::LoadBalancerConfigPtr>
34
1
  loadConfig(Server::Configuration::ServerFactoryContext&, const Protobuf::Message&) override {
35
1
    return std::make_unique<ClusterProvidedLbConfig>();
36
1
  }
37
  absl::StatusOr<Upstream::LoadBalancerConfigPtr>
38
314
  loadLegacy(Server::Configuration::ServerFactoryContext&, const Upstream::ClusterProto&) override {
39
314
    return std::make_unique<ClusterProvidedLbConfig>();
40
314
  }
41
};
42

            
43
DECLARE_FACTORY(Factory);
44

            
45
} // namespace ClusterProvided
46
} // namespace LoadBalancingPolicies
47
} // namespace Extensions
48
} // namespace Envoy