[libsolutil] JSON: Add get function.

This commit is contained in:
Alexander Arlt 2022-08-18 21:51:40 +02:00
parent 555d774f64
commit 145152038c
3 changed files with 36 additions and 3 deletions

View File

@ -109,9 +109,9 @@ AssemblyItem Assembly::createAssemblyItemFromJSON(Json::Value const& _json)
std::string name = getOrDefault<std::string>(_json, "name", "");
solAssert(!name.empty());
int begin = getOrDefault<int>(_json, "begin", -1);
int end = getOrDefault<int>(_json, "end", -1);
int srcIndex = getOrDefault<int>(_json, "source", -1);
int begin = get<int>(_json, "begin");
int end = get<int>(_json, "end");
int srcIndex = get<int>(_json, "source");
size_t modifierDepth = static_cast<size_t>(getOrDefault<int>(_json, "modifierDepth", 0));
std::string value = getOrDefault<std::string>(_json, "value", "");
std::string jumpType = getOrDefault<std::string>(_json, "jumpType", "");

View File

@ -81,6 +81,10 @@ struct helper;
{ \
return _input[_name].CHECK_TYPE(); \
} \
static TYPE get(Json::Value const& _input, std::string const& _name) \
{ \
return _input[_name].CONVERT_TYPE(); \
} \
static TYPE getOrDefault(Json::Value const& _input, std::string const& _name, TYPE _default = {}) \
{ \
TYPE result = _default; \
@ -114,6 +118,12 @@ bool ofTypeIfExists(Json::Value const& _input, std::string const& _name)
return true;
}
template<typename T>
T get(Json::Value const& _input, std::string const& _name)
{
return detail::helper<T>::get(_input, _name);
}
template<typename T>
T getOrDefault(Json::Value const& _input, std::string const& _name, T _default = {})
{

View File

@ -286,6 +286,29 @@ BOOST_AUTO_TEST_CASE(json_getOrDefault)
BOOST_CHECK(getOrDefault<std::string>(json, "no_string", "ERROR") == "ERROR");
}
BOOST_AUTO_TEST_CASE(json_get)
{
Json::Value json;
json["float"] = 3.1f;
json["double"] = 3.1;
json["int"] = 2;
json["int64"] = Json::Int64{0x4000000000000000};
json["uint64"] = Json::UInt64{0x5000000000000000};
json["string"] = "Hello World!";
BOOST_CHECK(get<float>(json, "float") == 3.1f);
BOOST_CHECK(get<double>(json, "double") == 3.1);
BOOST_CHECK(get<int>(json, "int") == 2);
BOOST_CHECK(get<Json::Int>(json, "int") == 2);
BOOST_CHECK(get<Json::UInt>(json, "int") == 2);
BOOST_CHECK(get<Json::Int64>(json, "int") == 2);
BOOST_CHECK(get<Json::Int64>(json, "int64") == 0x4000000000000000);
BOOST_CHECK(get<Json::UInt64>(json, "int64") == 0x4000000000000000);
BOOST_CHECK(get<Json::UInt64>(json, "uint64") == 0x5000000000000000);
BOOST_CHECK(get<std::string>(json, "string") == "Hello World!");
}
BOOST_AUTO_TEST_SUITE_END()
}