Commit 5b71bf09 authored by Niels Lohmann's avatar Niels Lohmann Committed by GitHub

Merge pull request #708 from theodelrieu/fix/from_json_tuple_pair

fix from_json implementation for pair/tuple
parents e45eaf6e bb1b4c93
...@@ -1235,16 +1235,16 @@ void from_json(const BasicJsonType& j, ArithmeticType& val) ...@@ -1235,16 +1235,16 @@ void from_json(const BasicJsonType& j, ArithmeticType& val)
} }
} }
template<typename BasicJsonType, typename... Args> template<typename BasicJsonType, typename A1, typename A2>
void from_json(const BasicJsonType& j, std::pair<Args...>& p) void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
{ {
p = {j.at(0), j.at(1)}; p = {j.at(0).template get<A1>(), j.at(1).template get<A2>()};
} }
template<typename BasicJsonType, typename Tuple, std::size_t... Idx> template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence<Idx...>) void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence<Idx...>)
{ {
t = std::make_tuple(j.at(Idx)...); t = std::make_tuple(j.at(Idx).template get<typename std::tuple_element<Idx, Tuple>::type>()...);
} }
template<typename BasicJsonType, typename... Args> template<typename BasicJsonType, typename... Args>
......
...@@ -246,6 +246,7 @@ TEST_CASE("constructors") ...@@ -246,6 +246,7 @@ TEST_CASE("constructors")
json j(p); json j(p);
CHECK(j.type() == json::value_t::array); CHECK(j.type() == json::value_t::array);
CHECK(j.get<decltype(p)>() == p);
REQUIRE(j.size() == 2); REQUIRE(j.size() == 2);
CHECK(j[0] == std::get<0>(p)); CHECK(j[0] == std::get<0>(p));
CHECK(j[1] == std::get<1>(p)); CHECK(j[1] == std::get<1>(p));
...@@ -262,11 +263,12 @@ TEST_CASE("constructors") ...@@ -262,11 +263,12 @@ TEST_CASE("constructors")
SECTION("std::tuple") SECTION("std::tuple")
{ {
const auto t = std::make_tuple(1.0, "string", 42, std::vector<int> {0, 1}); const auto t = std::make_tuple(1.0, std::string{"string"}, 42, std::vector<int> {0, 1});
json j(t); json j(t);
CHECK(j.type() == json::value_t::array); CHECK(j.type() == json::value_t::array);
REQUIRE(j.size() == 4); REQUIRE(j.size() == 4);
CHECK(j.get<decltype(t)>() == t);
CHECK(j[0] == std::get<0>(t)); CHECK(j[0] == std::get<0>(t));
CHECK(j[1] == std::get<1>(t)); CHECK(j[1] == std::get<1>(t));
CHECK(j[2] == std::get<2>(t)); CHECK(j[2] == std::get<2>(t));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment