20 lines
596 B
C++
20 lines
596 B
C++
#include <ranczo-io/utils/json_helpers.hpp>
|
|
|
|
#include <boost/json/value.hpp>
|
|
|
|
std::optional<double> ranczo::json::as_number(const boost::json::value &v) {
|
|
if(v.is_double())
|
|
return v.as_double();
|
|
if(v.is_int64())
|
|
return static_cast< double >(v.as_int64());
|
|
if(v.is_uint64())
|
|
return static_cast< double >(v.as_uint64());
|
|
if(v.is_string()) {
|
|
const auto & s = v.as_string();
|
|
double out{};
|
|
if(auto res = std::from_chars(s.data(), s.data() + s.size(), out); res.ec == std::errc{})
|
|
return out;
|
|
}
|
|
return std::nullopt;
|
|
}
|