1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/config/typed_config.h"
6
#include "envoy/registry/registry.h"
7

            
8
#include "source/common/formatter/substitution_formatter.h"
9
#include "source/extensions/filters/common/expr/evaluator.h"
10

            
11
namespace Envoy {
12
namespace Extensions {
13
namespace Formatter {
14

            
15
class CELFormatter : public ::Envoy::Formatter::FormatterProvider {
16
public:
17
  CELFormatter(const ::Envoy::LocalInfo::LocalInfo& local_info,
18
               Extensions::Filters::Common::Expr::BuilderInstanceSharedConstPtr expr_builder,
19
               const cel::expr::Expr& input_expr, absl::optional<size_t>& max_length, bool typed);
20

            
21
  absl::optional<std::string> format(const Envoy::Formatter::Context& context,
22
                                     const StreamInfo::StreamInfo&) const override;
23
  Protobuf::Value formatValue(const Envoy::Formatter::Context& context,
24
                              const StreamInfo::StreamInfo&) const override;
25

            
26
private:
27
  const ::Envoy::LocalInfo::LocalInfo& local_info_;
28
  const absl::optional<size_t> max_length_;
29
  const Extensions::Filters::Common::Expr::CompiledExpression compiled_expr_;
30
  const bool typed_;
31
};
32

            
33
class CELFormatterCommandParser : public ::Envoy::Formatter::CommandParser {
34
public:
35
25
  CELFormatterCommandParser() = default;
36
  ::Envoy::Formatter::FormatterProviderPtr parse(absl::string_view command,
37
                                                 absl::string_view subcommand,
38
                                                 absl::optional<size_t> max_length) const override;
39
};
40

            
41
} // namespace Formatter
42
} // namespace Extensions
43
} // namespace Envoy