ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
user_services.cpp
Go to the documentation of this file.
1#include "user_services.h"
2#include "esphome/core/log.h"
4
5namespace esphome::api {
6
7template<> bool get_execute_arg_value<bool>(const ExecuteServiceArgument &arg) { return arg.bool_; }
9 if (arg.legacy_int != 0)
10 return arg.legacy_int;
11 return arg.int_;
12}
13template<> float get_execute_arg_value<float>(const ExecuteServiceArgument &arg) { return arg.float_; }
14template<> std::string get_execute_arg_value<std::string>(const ExecuteServiceArgument &arg) { return arg.string_; }
15// Zero-copy StringRef version for YAML-generated services (string_ is null-terminated after decode)
17
18// Legacy std::vector versions for external components using custom_api_device.h - optimized with reserve
19template<> std::vector<bool> get_execute_arg_value<std::vector<bool>>(const ExecuteServiceArgument &arg) {
20 std::vector<bool> result;
21 result.reserve(arg.bool_array.size());
22 result.insert(result.end(), arg.bool_array.begin(), arg.bool_array.end());
23 return result;
24}
25template<> std::vector<int32_t> get_execute_arg_value<std::vector<int32_t>>(const ExecuteServiceArgument &arg) {
26 std::vector<int32_t> result;
27 result.reserve(arg.int_array.size());
28 result.insert(result.end(), arg.int_array.begin(), arg.int_array.end());
29 return result;
30}
31template<> std::vector<float> get_execute_arg_value<std::vector<float>>(const ExecuteServiceArgument &arg) {
32 std::vector<float> result;
33 result.reserve(arg.float_array.size());
34 result.insert(result.end(), arg.float_array.begin(), arg.float_array.end());
35 return result;
36}
37template<> std::vector<std::string> get_execute_arg_value<std::vector<std::string>>(const ExecuteServiceArgument &arg) {
38 std::vector<std::string> result;
39 result.reserve(arg.string_array.size());
40 result.insert(result.end(), arg.string_array.begin(), arg.string_array.end());
41 return result;
42}
43
44// New FixedVector const reference versions for YAML-generated services - zero-copy
45template<>
49template<>
53template<>
57template<>
62
67// Zero-copy StringRef version for YAML-generated services
69
70// Legacy std::vector versions for external components using custom_api_device.h
81
82// New FixedVector const reference versions for YAML-generated services
95
96} // namespace esphome::api
Fixed-capacity vector - allocates once at runtime, never reallocates This avoids std::vector template...
Definition helpers.h:299
StringRef is a reference to a string owned by something else.
Definition string_ref.h:26
@ SERVICE_ARG_TYPE_BOOL_ARRAY
Definition api_pb2.h:78
@ SERVICE_ARG_TYPE_STRING_ARRAY
Definition api_pb2.h:81
@ SERVICE_ARG_TYPE_FLOAT_ARRAY
Definition api_pb2.h:80
float get_execute_arg_value< float >(const ExecuteServiceArgument &arg)
bool get_execute_arg_value< bool >(const ExecuteServiceArgument &arg)
int32_t get_execute_arg_value< int32_t >(const ExecuteServiceArgument &arg)
enums::ServiceArgType to_service_arg_type()
enums::ServiceArgType to_service_arg_type< StringRef >()
StringRef get_execute_arg_value< StringRef >(const ExecuteServiceArgument &arg)
enums::ServiceArgType to_service_arg_type< int32_t >()
enums::ServiceArgType to_service_arg_type< bool >()
enums::ServiceArgType to_service_arg_type< std::string >()
std::string get_execute_arg_value< std::string >(const ExecuteServiceArgument &arg)
T get_execute_arg_value(const ExecuteServiceArgument &arg)
enums::ServiceArgType to_service_arg_type< float >()