ESPHome 2025.5.2
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
filter.h
Go to the documentation of this file.
1#pragma once
2
5#include <queue>
6#include <utility>
7#include <map>
8#include <vector>
9
10namespace esphome {
11namespace text_sensor {
12
13class TextSensor;
14
20class Filter {
21 public:
31 virtual optional<std::string> new_value(std::string value) = 0;
32
34 virtual void initialize(TextSensor *parent, Filter *next);
35
36 void input(const std::string &value);
37
38 void output(const std::string &value);
39
40 protected:
41 friend TextSensor;
42
43 Filter *next_{nullptr};
45};
46
47using lambda_filter_t = std::function<optional<std::string>(std::string)>;
48
56class LambdaFilter : public Filter {
57 public:
58 explicit LambdaFilter(lambda_filter_t lambda_filter);
59
60 optional<std::string> new_value(std::string value) override;
61
63 void set_lambda_filter(const lambda_filter_t &lambda_filter);
64
65 protected:
67};
68
70class ToUpperFilter : public Filter {
71 public:
72 optional<std::string> new_value(std::string value) override;
73};
74
76class ToLowerFilter : public Filter {
77 public:
78 optional<std::string> new_value(std::string value) override;
79};
80
82class AppendFilter : public Filter {
83 public:
84 AppendFilter(std::string suffix) : suffix_(std::move(suffix)) {}
85 optional<std::string> new_value(std::string value) override;
86
87 protected:
88 std::string suffix_;
89};
90
92class PrependFilter : public Filter {
93 public:
94 PrependFilter(std::string prefix) : prefix_(std::move(prefix)) {}
95 optional<std::string> new_value(std::string value) override;
96
97 protected:
98 std::string prefix_;
99};
100
102class SubstituteFilter : public Filter {
103 public:
104 SubstituteFilter(std::vector<std::string> from_strings, std::vector<std::string> to_strings)
105 : from_strings_(std::move(from_strings)), to_strings_(std::move(to_strings)) {}
106 optional<std::string> new_value(std::string value) override;
107
108 protected:
109 std::vector<std::string> from_strings_;
110 std::vector<std::string> to_strings_;
111};
112
114class MapFilter : public Filter {
115 public:
116 MapFilter(std::map<std::string, std::string> mappings) : mappings_(std::move(mappings)) {}
117 optional<std::string> new_value(std::string value) override;
118
119 protected:
120 std::map<std::string, std::string> mappings_;
121};
122
123} // namespace text_sensor
124} // namespace esphome
A simple filter that adds a string to the end of another string.
Definition filter.h:82
AppendFilter(std::string suffix)
Definition filter.h:84
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:20
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:56
lambda_filter_t lambda_filter_
Definition filter.h:66
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:114
optional< std::string > new_value(std::string value) override
Definition filter.cpp:75
MapFilter(std::map< std::string, std::string > mappings)
Definition filter.h:116
std::map< std::string, std::string > mappings_
Definition filter.h:120
A simple filter that adds a string to the start of another string.
Definition filter.h:92
PrependFilter(std::string prefix)
Definition filter.h:94
optional< std::string > new_value(std::string value) override
Definition filter.cpp:62
A simple filter that replaces a substring with another substring.
Definition filter.h:102
optional< std::string > new_value(std::string value) override
Definition filter.cpp:65
std::vector< std::string > to_strings_
Definition filter.h:110
std::vector< std::string > from_strings_
Definition filter.h:109
SubstituteFilter(std::vector< std::string > from_strings, std::vector< std::string > to_strings)
Definition filter.h:104
A simple filter that converts all text to lowercase.
Definition filter.h:76
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:70
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:47
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7