1
#pragma once
2

            
3
#include "envoy/config/core/v3/base.pb.h"
4

            
5
#include "source/common/protobuf/protobuf.h"
6

            
7
#include "absl/container/flat_hash_map.h"
8
#include "xds/core/v3/context_params.pb.h"
9

            
10
namespace Envoy {
11
namespace Config {
12

            
13
// Utilities for working with context parameters.
14
class XdsContextParams {
15
public:
16
  /**
17
   * Encode resource context parameters by following the xDS transport precedence algorithm and
18
   * applying parameter prefixes.
19
   *
20
   * @param node_context_params node context parameters.
21
   * @param resource_context_params context parameters from resource locator.
22
   * @param client_features client feature capabilities.
23
   * @param extra_resource_param per-resource type well known attributes.
24
   * @return xds::core::v3::ContextParams encoded context parameters.
25
   */
26
  static xds::core::v3::ContextParams
27
  encodeResource(const xds::core::v3::ContextParams& node_context_params,
28
                 const xds::core::v3::ContextParams& resource_context_params,
29
                 const std::vector<std::string>& client_features,
30
                 const absl::flat_hash_map<std::string, std::string>& extra_resource_params);
31

            
32
  /**
33
   * Encode node context parameters.
34
   *
35
   * @param node reference to the local Node information.
36
   * @param node_context_params a list of node fields to include in context parameters.
37
   *
38
   * @return xds::core::v3::ContextParams encoded node context parameters.
39
   */
40
  static xds::core::v3::ContextParams
41
  encodeNodeContext(const envoy::config::core::v3::Node& node,
42
                    const Protobuf::RepeatedPtrField<std::string>& node_context_params);
43
};
44

            
45
} // namespace Config
46
} // namespace Envoy