| 353 | } |
| 354 | |
| 355 | Variant stringToVariant(std::string_view value) { |
| 356 | const auto kvt = detectValueType(value); |
| 357 | return kvt.EvaluateOneOf( |
| 358 | [value](KeyValueType::Int64) { return Variant(int64_t(stoll(value))); }, |
| 359 | [value](KeyValueType::Int) { return Variant(int(stoi(value))); }, |
| 360 | [value](KeyValueType::Double) { |
| 361 | using double_conversion::StringToDoubleConverter; |
| 362 | static const StringToDoubleConverter converter{StringToDoubleConverter::NO_FLAGS, NAN, NAN, nullptr, nullptr}; |
| 363 | int countOfCharsParsedAsDouble = 0; |
| 364 | return Variant(converter.StringToDouble(value.data(), value.size(), &countOfCharsParsedAsDouble)); |
| 365 | }, |
| 366 | [value](KeyValueType::Float) { |
| 367 | using double_conversion::StringToDoubleConverter; |
| 368 | static const StringToDoubleConverter converter{StringToDoubleConverter::NO_FLAGS, NAN, NAN, nullptr, nullptr}; |
| 369 | int countOfCharsParsedAsDouble = 0; |
| 370 | return Variant(converter.StringToFloat(value.data(), value.size(), &countOfCharsParsedAsDouble)); |
| 371 | }, |
| 372 | [value](KeyValueType::String) { return Variant(make_key_string(value.data(), value.length())); }, |
| 373 | [value](KeyValueType::Bool) noexcept { return (value.size() == 4) ? Variant(true) : Variant(false); }, |
| 374 | [value](KeyValueType::Uuid) { return Variant{Uuid{value}}; }, |
| 375 | [](concepts::OneOf<KeyValueType::Undefined, KeyValueType::Null, KeyValueType::Composite, KeyValueType::Tuple, |
| 376 | KeyValueType::FloatVector> auto) noexcept { return Variant(); }); |
| 377 | } |
| 378 | |
| 379 | void utf8_to_utf16(std::string_view src, std::wstring& dst) { |
| 380 | dst.resize(src.length()); |
no test coverage detected