25#ifndef MYSQL_HARNESS_CONFIG_OPTION_INCLUDED
26#define MYSQL_HARNESS_CONFIG_OPTION_INCLUDED
36#include "harness_export.h"
43 double max_value = std::numeric_limits<double>::max());
65T
option_as_int(
const std::string_view &value,
const std::string &option_desc,
66 T min_value = std::numeric_limits<T>::min(),
67 T max_value = std::numeric_limits<T>::max()) {
68 const char *
start = value.data();
69 const char *
end =
start + value.size();
72 using integral_type = std::conditional_t<std::is_same_v<T, bool>, uint8_t, T>;
74 integral_type int_result;
77 if (ptr ==
end && ec == std::errc{}) {
82 if (int_result <=
static_cast<integral_type
>(max_value) &&
83 int_result >=
static_cast<integral_type
>(min_value)) {
88 throw std::invalid_argument(option_desc +
" needs value between " +
91 std::string(value) +
"'");
101 T min_value = std::numeric_limits<T>::min(),
102 T max_value = std::numeric_limits<T>::max()) {
103 return option_as_int<T>(value, option_desc, min_value, max_value);
109 constexpr IntOption(T min_value = std::numeric_limits<T>::min(),
110 T max_value = std::numeric_limits<T>::max())
113 T
operator()(
const std::string &value,
const std::string &option_desc) {
126 const std::string & ) {
133 bool operator()(
const std::string &value,
const std::string &option_desc) {
134 if (value ==
"true" || value ==
"1")
return true;
135 if (value ==
"false" || value ==
"0")
return false;
137 throw std::invalid_argument(
138 option_desc +
" needs a value of either 0, 1, false or true, was '" +
150 value_type max_value = std::numeric_limits<value_type>::max())
154 const std::string &option_desc) {
166template <
typename Dur>
172 using __base::__base;
175 const std::string &option_desc) {
178 return std::chrono::duration_cast<std::chrono::milliseconds>(
179 std::chrono::duration<double>(
result));
Definition: config_option.h:131
bool operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:133
Definition: config_option.h:167
Dur duration_type
Definition: config_option.h:169
duration_type operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:174
Definition: config_option.h:144
FloatingPointOption(value_type min_value=0, value_type max_value=std::numeric_limits< value_type >::max())
Definition: config_option.h:148
value_type max_value_
Definition: config_option.h:161
value_type operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:153
V value_type
Definition: config_option.h:146
value_type min_value_
Definition: config_option.h:160
Definition: config_option.h:107
T min_value_
Definition: config_option.h:119
T max_value_
Definition: config_option.h:120
constexpr IntOption(T min_value=std::numeric_limits< T >::min(), T max_value=std::numeric_limits< T >::max())
Definition: config_option.h:109
T operator()(const std::string &value, const std::string &option_desc)
Definition: config_option.h:113
Definition: config_option.h:123
std::string operator()(const std::string &value, const std::string &)
Definition: config_option.h:125
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:49
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:100
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:32
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:65
FloatingPointOption< double > DoubleOption
Definition: config_option.h:164
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:191
static std::enable_if_t< std::is_unsigned< T >::value, stdx::expected< T, std::error_code > > from_chars(const std::string &value, int base=10)
convert a numeric string to a number.
Definition: tcp_address.cc:62