14#include <spdlog/spdlog.h>
21 return std::visit([](
auto&& arg) -> std::string {
22 using T = std::decay_t<
decltype(arg)>;
24 if constexpr (std::is_same_v<T, bool>) {
25 return arg ?
"true" :
"false";
27 else if constexpr (std::is_same_v<T, int>) {
28 return std::to_string(arg);
30 else if constexpr (std::is_same_v<T, float>) {
31 return std::to_string(arg);
33 else if constexpr (std::is_same_v<T, std::string>) {
45 std::string lower_val(value_str);
46 std::transform(lower_val.begin(), lower_val.end(), lower_val.begin(),
47 [](
unsigned char c){ return std::tolower(c); });
49 if (lower_val ==
"true" || lower_val ==
"1")
return true;
50 if (lower_val ==
"false" || lower_val ==
"0")
return false;
54 char* endptr =
nullptr;
55 long long_val = std::strtol(value_str.data(), &endptr, 10);
57 if (endptr != value_str.data() && *endptr ==
'\0' && !value_str.empty()) {
58 return static_cast<int>(long_val);
64 float float_val = std::strtof(value_str.data(), &endptr);
65 if (endptr != value_str.data()) {
70 return std::string(value_str);
77 for (
const auto& [key, val] : descriptor.
params) {
78 if (!result.empty()) {
93 while (start < params_str.size()) {
94 size_t end = params_str.find(
';', start);
95 std::string_view pair = (end == std::string_view::npos)
96 ? params_str.substr(start)
97 : params_str.substr(start, end - start);
99 size_t eq_pos = pair.find(
'=');
100 if (eq_pos != std::string_view::npos) {
101 std::string key(pair.substr(0, eq_pos));
102 std::string_view val_view(pair.substr(eq_pos + 1));
107 if (end == std::string_view::npos)
break;
std::variant< float, int, bool, std::string > OperationValue
Supported types for operation parameters. Using variant instead of std::any for compile-time type saf...
bool deserializeOperationParameters(std::string_view params_str, Operations::OperationDescriptor &descriptor)
Deserializes a string representation back into an OperationDescriptor's parameters map....
Operations::OperationValue deserializeParameter(std::string_view value_str)
Deserializes a string representation back into an OperationValue. This function attempts to infer the...
std::string serializeOperationParameters(const Operations::OperationDescriptor &descriptor)
Serializes an entire OperationDescriptor's parameters map to a string representation....
std::string serializeParameter(const Operations::OperationValue &value)
Namespace containing utilities for serializing and deserializing OperationDescriptor parameters....
Descriptor of an operation with its parameters and unique identifier.
Declaration of OperationSerialization interface.
A universal container for operation settings with unique identifier.
std::unordered_map< std::string, OperationValue > params
Generic parameter storage using variant (Type Safe).