🔨 cleaned up array from_json methods #473
Removed some code that is not needed any more. Thus, streamlining the array from_json methods.
This commit is contained in:
parent
87eafd8d6a
commit
9355f05888
2 changed files with 16 additions and 44 deletions
30
src/json.hpp
30
src/json.hpp
|
@ -700,22 +700,15 @@ void from_json(const BasicJsonType& j, typename BasicJsonType::array_t& arr)
|
|||
}
|
||||
|
||||
// forward_list doesn't have an insert method
|
||||
template<typename BasicJsonType, typename T, typename Allocator>
|
||||
template<typename BasicJsonType, typename T, typename Allocator,
|
||||
enable_if_t<std::is_convertible<BasicJsonType, T>::value, int> = 0>
|
||||
void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l)
|
||||
{
|
||||
// do not perform the check when user wants to retrieve jsons
|
||||
// (except when it's null.. ?)
|
||||
if (j.is_null())
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
if (not std::is_same<T, BasicJsonType>::value)
|
||||
{
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
}
|
||||
|
||||
for (auto it = j.rbegin(), end = j.rend(); it != end; ++it)
|
||||
{
|
||||
l.push_front(it->template get<T>());
|
||||
|
@ -747,8 +740,8 @@ auto from_json_array_impl(const BasicJsonType& j, CompatibleArrayType& arr, prio
|
|||
using std::end;
|
||||
|
||||
arr.reserve(j.size());
|
||||
std::transform(
|
||||
j.begin(), j.end(), std::inserter(arr, end(arr)), [](const BasicJsonType & i)
|
||||
std::transform(j.begin(), j.end(),
|
||||
std::inserter(arr, end(arr)), [](const BasicJsonType & i)
|
||||
{
|
||||
// get<BasicJsonType>() returns *this, this won't call a from_json
|
||||
// method when value_type is BasicJsonType
|
||||
|
@ -758,22 +751,15 @@ auto from_json_array_impl(const BasicJsonType& j, CompatibleArrayType& arr, prio
|
|||
|
||||
template<typename BasicJsonType, typename CompatibleArrayType,
|
||||
enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value and
|
||||
std::is_convertible<BasicJsonType, typename CompatibleArrayType::value_type>::value and
|
||||
not std::is_same<typename BasicJsonType::array_t, CompatibleArrayType>::value, int> = 0>
|
||||
void from_json(const BasicJsonType& j, CompatibleArrayType& arr)
|
||||
{
|
||||
if (j.is_null())
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
|
||||
// when T == BasicJsonType, do not check if value_t is correct
|
||||
if (not std::is_same<typename CompatibleArrayType::value_type, BasicJsonType>::value)
|
||||
{
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
}
|
||||
from_json_array_impl(j, arr, priority_tag<1> {});
|
||||
}
|
||||
|
||||
|
|
|
@ -700,22 +700,15 @@ void from_json(const BasicJsonType& j, typename BasicJsonType::array_t& arr)
|
|||
}
|
||||
|
||||
// forward_list doesn't have an insert method
|
||||
template<typename BasicJsonType, typename T, typename Allocator>
|
||||
template<typename BasicJsonType, typename T, typename Allocator,
|
||||
enable_if_t<std::is_convertible<BasicJsonType, T>::value, int> = 0>
|
||||
void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l)
|
||||
{
|
||||
// do not perform the check when user wants to retrieve jsons
|
||||
// (except when it's null.. ?)
|
||||
if (j.is_null())
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
if (not std::is_same<T, BasicJsonType>::value)
|
||||
{
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
}
|
||||
|
||||
for (auto it = j.rbegin(), end = j.rend(); it != end; ++it)
|
||||
{
|
||||
l.push_front(it->template get<T>());
|
||||
|
@ -747,8 +740,8 @@ auto from_json_array_impl(const BasicJsonType& j, CompatibleArrayType& arr, prio
|
|||
using std::end;
|
||||
|
||||
arr.reserve(j.size());
|
||||
std::transform(
|
||||
j.begin(), j.end(), std::inserter(arr, end(arr)), [](const BasicJsonType & i)
|
||||
std::transform(j.begin(), j.end(),
|
||||
std::inserter(arr, end(arr)), [](const BasicJsonType & i)
|
||||
{
|
||||
// get<BasicJsonType>() returns *this, this won't call a from_json
|
||||
// method when value_type is BasicJsonType
|
||||
|
@ -758,22 +751,15 @@ auto from_json_array_impl(const BasicJsonType& j, CompatibleArrayType& arr, prio
|
|||
|
||||
template<typename BasicJsonType, typename CompatibleArrayType,
|
||||
enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value and
|
||||
std::is_convertible<BasicJsonType, typename CompatibleArrayType::value_type>::value and
|
||||
not std::is_same<typename BasicJsonType::array_t, CompatibleArrayType>::value, int> = 0>
|
||||
void from_json(const BasicJsonType& j, CompatibleArrayType& arr)
|
||||
{
|
||||
if (j.is_null())
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
|
||||
// when T == BasicJsonType, do not check if value_t is correct
|
||||
if (not std::is_same<typename CompatibleArrayType::value_type, BasicJsonType>::value)
|
||||
{
|
||||
if (not j.is_array())
|
||||
{
|
||||
JSON_THROW(std::domain_error("type must be array, but is " + j.type_name()));
|
||||
}
|
||||
}
|
||||
from_json_array_impl(j, arr, priority_tag<1> {});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue