26#ifndef MYSQL_HARNESS_CONFIG_OPTION_INCLUDED
27#define MYSQL_HARNESS_CONFIG_OPTION_INCLUDED
41#include "harness_export.h"
71 T min_value = std::numeric_limits<T>::min(),
77 using integral_type = std::conditional_t<std::is_same_v<T, bool>, uint8_t,
T>;
79 integral_type int_result;
82 if (ptr == end && ec == std::errc{}) {
87 if (int_result <=
static_cast<integral_type
>(max_value) &&
88 int_result >=
static_cast<integral_type
>(min_value)) {
93 throw std::invalid_argument(option_desc +
" needs value between " +
96 std::string(
value) +
"'");
106 T min_value = std::numeric_limits<T>::min(),
108 return option_as_int<T>(
value, option_desc, min_value, max_value);
116 constexpr IntOption(
T min_value = std::numeric_limits<T>::min(),
126 const std::string &option_desc) {
127 if (!
value.has_value())
return {};
138template <
typename Option>
144 const std::string &option_desc) {
148 for (
const auto &element : array) {
149 result.push_back(Option()(element, option_desc));
160 const std::string & ) {
170 if (
value ==
"true" ||
value ==
"1")
return true;
171 if (
value ==
"false" ||
value ==
"0")
return false;
173 throw std::invalid_argument(
174 option_desc +
" needs a value of either 0, 1, false or true, was '" +
190 const std::string &option_desc) {
202template <
typename Dur>
209 using __base::__base;
212 const std::string &option_desc) {
215 return std::chrono::duration_cast<duration_type>(
216 std::chrono::duration<double>(
result));
Definition: config_option.h:139
value_type operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:143
std::vector< typename Option::value_type > value_type
Definition: config_option.h:141
Definition: config_option.h:165
bool value_type
Definition: config_option.h:167
bool operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:169
Definition: config_option.h:203
Dur duration_type
Definition: config_option.h:206
duration_type operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:211
Definition: config_option.h:180
FloatingPointOption(value_type min_value=0, value_type max_value=std::numeric_limits< value_type >::max())
Definition: config_option.h:184
value_type max_value_
Definition: config_option.h:197
value_type operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:189
V value_type
Definition: config_option.h:182
value_type min_value_
Definition: config_option.h:196
Definition: config_option.h:112
std::optional< T > operator()(const std::optional< std::string > &value, const std::string &option_desc)
Definition: config_option.h:125
T min_value_
Definition: config_option.h:134
T value_type
Definition: config_option.h:114
T max_value_
Definition: config_option.h:135
constexpr IntOption(T min_value=std::numeric_limits< T >::min(), T max_value=std::numeric_limits< T >::max())
Definition: config_option.h:116
T operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:120
Definition: config_option.h:156
std::string operator()(const std::string &value, const std::string &)
Definition: config_option.h:159
std::string value_type
Definition: config_option.h:158
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
#define T
Definition: jit_executor_value.cc:373
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:50
stdx::expected< T, std::error_code > from_chars(const std::string &value, int base=10)
convert a numeric string to a number.
Definition: destination.cc:61
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
ValueType max(X &&first)
Definition: gtid.h:103
T option_as_uint(const std::string_view &value, const std::string &option_desc, T min_value=std::numeric_limits< T >::min(), T max_value=std::numeric_limits< T >::max())
Get a unsigned integer.
Definition: config_option.h:105
HARNESS_EXPORT std::vector< std::string > split_string(const std::string_view &data, const char delimiter, bool allow_empty=true)
Splits a string using a delimiter.
Definition: string_utils.cc:37
double HARNESS_EXPORT option_as_double(const std::string &value, const std::string &option_desc, double min_value=0, double max_value=std::numeric_limits< double >::max())
Definition: config_option.cc:34
T option_as_int(const std::string_view &value, const std::string &option_desc, T min_value=std::numeric_limits< T >::min(), T max_value=std::numeric_limits< T >::max())
Gets an integer using the given option value.
Definition: config_option.h:70
FloatingPointOption< double > DoubleOption
Definition: config_option.h:200
struct result result
Definition: result.h:34