ESPHome 2025.12.0-dev
Loading...
Searching...
No Matches
filter.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace esphome {
7namespace text_sensor {
8
9class TextSensor;
10
16class Filter {
17 public:
27 virtual optional<std::string> new_value(std::string value) = 0;
28
30 virtual void initialize(TextSensor *parent, Filter *next);
31
32 void input(const std::string &value);
33
34 void output(const std::string &value);
35
36 protected:
37 friend TextSensor;
38
39 Filter *next_{nullptr};
41};
42
43using lambda_filter_t = std::function<optional<std::string>(std::string)>;
44
52class LambdaFilter : public Filter {
53 public:
54 explicit LambdaFilter(lambda_filter_t lambda_filter);
55
56 optional<std::string> new_value(std::string value) override;
57
59 void set_lambda_filter(const lambda_filter_t &lambda_filter);
60
61 protected:
63};
64
71 public:
72 explicit StatelessLambdaFilter(optional<std::string> (*lambda_filter)(std::string)) : lambda_filter_(lambda_filter) {}
73
74 optional<std::string> new_value(std::string value) override { return this->lambda_filter_(value); }
75
76 protected:
78};
79
81class ToUpperFilter : public Filter {
82 public:
83 optional<std::string> new_value(std::string value) override;
84};
85
87class ToLowerFilter : public Filter {
88 public:
89 optional<std::string> new_value(std::string value) override;
90};
91
93class AppendFilter : public Filter {
94 public:
95 AppendFilter(std::string suffix) : suffix_(std::move(suffix)) {}
96 optional<std::string> new_value(std::string value) override;
97
98 protected:
99 std::string suffix_;
100};
101
103class PrependFilter : public Filter {
104 public:
105 PrependFilter(std::string prefix) : prefix_(std::move(prefix)) {}
106 optional<std::string> new_value(std::string value) override;
107
108 protected:
109 std::string prefix_;
110};
111
113 std::string from;
114 std::string to;
115};
116
118class SubstituteFilter : public Filter {
119 public:
120 explicit SubstituteFilter(const std::initializer_list<Substitution> &substitutions);
121 optional<std::string> new_value(std::string value) override;
122
123 protected:
125};
126
151class MapFilter : public Filter {
152 public:
153 explicit MapFilter(const std::initializer_list<Substitution> &mappings);
154 optional<std::string> new_value(std::string value) override;
155
156 protected:
158};
159
160} // namespace text_sensor
161} // namespace esphome
Fixed-capacity vector - allocates once at runtime, never reallocates This avoids std::vector template...
Definition helpers.h:184
A simple filter that adds a string to the end of another string.
Definition filter.h:93
AppendFilter(std::string suffix)
Definition filter.h:95
optional< std::string > new_value(std::string value) override
Definition filter.cpp:59
Apply a filter to text sensor values such as to_upper.
Definition filter.h:16
void output(const std::string &value)
Definition filter.cpp:18
void input(const std::string &value)
Definition filter.cpp:12
virtual void initialize(TextSensor *parent, Filter *next)
Initialize this filter, please note this can be called more than once.
Definition filter.cpp:27
virtual optional< std::string > new_value(std::string value)=0
This will be called every time the filter receives a new value.
This class allows for creation of simple template filters.
Definition filter.h:52
lambda_filter_t lambda_filter_
Definition filter.h:62
LambdaFilter(lambda_filter_t lambda_filter)
Definition filter.cpp:34
void set_lambda_filter(const lambda_filter_t &lambda_filter)
Definition filter.cpp:36
optional< std::string > new_value(std::string value) override
Definition filter.cpp:38
const lambda_filter_t & get_lambda_filter() const
Definition filter.cpp:35
A filter that maps values from one set to another.
Definition filter.h:151
optional< std::string > new_value(std::string value) override
Definition filter.cpp:80
MapFilter(const std::initializer_list< Substitution > &mappings)
Definition filter.cpp:78
FixedVector< Substitution > mappings_
Definition filter.h:157
A simple filter that adds a string to the start of another string.
Definition filter.h:103
PrependFilter(std::string prefix)
Definition filter.h:105
optional< std::string > new_value(std::string value) override
Definition filter.cpp:62
Optimized lambda filter for stateless lambdas (no capture).
Definition filter.h:70
optional< std::string >(* lambda_filter_)(std::string)
Definition filter.h:77
StatelessLambdaFilter(optional< std::string >(*lambda_filter)(std::string))
Definition filter.h:72
optional< std::string > new_value(std::string value) override
Definition filter.h:74
A simple filter that replaces a substring with another substring.
Definition filter.h:118
FixedVector< Substitution > substitutions_
Definition filter.h:124
SubstituteFilter(const std::initializer_list< Substitution > &substitutions)
Definition filter.cpp:65
optional< std::string > new_value(std::string value) override
Definition filter.cpp:68
A simple filter that converts all text to lowercase.
Definition filter.h:87
optional< std::string > new_value(std::string value) override
Definition filter.cpp:52
A simple filter that converts all text to uppercase.
Definition filter.h:81
optional< std::string > new_value(std::string value) override
Definition filter.cpp:45
std::function< optional< std::string >(std::string)> lambda_filter_t
Definition filter.h:43
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7