Mercurial > code
changeset 641:3d8fae8e4447
json_util: rename parser to document
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 04 May 2018 17:32:00 +0200 |
parents | 7e40ed196bb0 |
children | 18aa7181e0c3 |
files | cpp/json_util/json_util.hpp cpp/json_util/test/main.cpp |
diffstat | 2 files changed, 41 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/cpp/json_util/json_util.hpp Mon Apr 30 17:26:41 2018 +0200 +++ b/cpp/json_util/json_util.hpp Fri May 04 17:32:00 2018 +0200 @@ -258,35 +258,27 @@ * This class helps destructuring insecure JSON input by returning optional * values if they are not present or invalid. */ -class parser { -private: - nlohmann::json& json_; - +class document : public nlohmann::json { public: /** - * Construct the parser. - * - * \param document the document + * Inherited constructor. */ - inline parser(nlohmann::json& document) noexcept - : json_(document) - { - } + using nlohmann::json::json; /** * Get a value from the document object. * * \param key the property key - * \return the value or boost::none if not found + * \return the value or boost::none if not found or not convertible */ template <typename Type> inline boost::optional<Type> get(const std::string& key) const noexcept { static_assert(parser_type_traits<Type>::value, "type not supported"); - const auto it = json_.find(key); + const auto it = find(key); - if (it == json_.end()) + if (it == end()) return boost::none; return parser_type_traits<Type>::get(*it); @@ -307,9 +299,9 @@ { static_assert(parser_type_traits<Type>::value, "type not supported"); - const auto it = json_.find(key); + const auto it = find(key); - if (it == json_.end()) + if (it == end()) return boost::optional<Type>(std::forward<DefaultValue>(def)); return parser_type_traits<Type>::get(*it);
--- a/cpp/json_util/test/main.cpp Mon Apr 30 17:26:41 2018 +0200 +++ b/cpp/json_util/test/main.cpp Fri May 04 17:32:00 2018 +0200 @@ -26,14 +26,12 @@ class test_fixture { protected: - nlohmann::json json_{ + document document_{ { "boolean", true }, { "int", -1234 }, { "uint", 1234U }, { "string", "str" } }; - - parser parser_{json_}; }; BOOST_FIXTURE_TEST_SUITE(test_fixture_suite, test_fixture) @@ -42,46 +40,46 @@ BOOST_AUTO_TEST_CASE(boolean) { - const auto v = parser_.get<bool>("boolean"); + const auto v = document_.get<bool>("boolean"); BOOST_TEST(v); BOOST_TEST(*v); - BOOST_TEST(!parser_.get<bool>("int")); - BOOST_TEST(!parser_.get<bool>("int")); - BOOST_TEST(!parser_.get<bool>("uint")); - BOOST_TEST(!parser_.get<bool>("string")); + BOOST_TEST(!document_.get<bool>("int")); + BOOST_TEST(!document_.get<bool>("int")); + BOOST_TEST(!document_.get<bool>("uint")); + BOOST_TEST(!document_.get<bool>("string")); } BOOST_AUTO_TEST_CASE(integer) { - const auto v = parser_.get<int>("int"); + const auto v = document_.get<int>("int"); BOOST_TEST(v); BOOST_TEST(*v == -1234); - BOOST_TEST(!parser_.get<int>("bool")); - BOOST_TEST(!parser_.get<int>("string")); + BOOST_TEST(!document_.get<int>("bool")); + BOOST_TEST(!document_.get<int>("string")); } BOOST_AUTO_TEST_CASE(unsigned_integer) { - const auto v = parser_.get<unsigned>("uint"); + const auto v = document_.get<unsigned>("uint"); BOOST_TEST(v); BOOST_TEST(*v == 1234U); - BOOST_TEST(!parser_.get<unsigned>("bool")); - BOOST_TEST(!parser_.get<unsigned>("int")); - BOOST_TEST(!parser_.get<unsigned>("string")); + BOOST_TEST(!document_.get<unsigned>("bool")); + BOOST_TEST(!document_.get<unsigned>("int")); + BOOST_TEST(!document_.get<unsigned>("string")); } BOOST_AUTO_TEST_CASE(string) { - const auto v = parser_.get<std::string>("string"); + const auto v = document_.get<std::string>("string"); BOOST_TEST(v); BOOST_TEST(*v == "str"); - BOOST_TEST(!parser_.get<std::string>("bool")); - BOOST_TEST(!parser_.get<std::string>("int")); - BOOST_TEST(!parser_.get<std::string>("uint")); + BOOST_TEST(!document_.get<std::string>("bool")); + BOOST_TEST(!document_.get<std::string>("int")); + BOOST_TEST(!document_.get<std::string>("uint")); } BOOST_AUTO_TEST_SUITE_END() @@ -90,23 +88,23 @@ BOOST_AUTO_TEST_CASE(boolean) { - BOOST_TEST(*parser_.optional<bool>("undefined", true)); - BOOST_TEST(!*parser_.optional<bool>("undefined", false)); + BOOST_TEST(*document_.optional<bool>("undefined", true)); + BOOST_TEST(!*document_.optional<bool>("undefined", false)); } BOOST_AUTO_TEST_CASE(integer) { - BOOST_TEST(*parser_.optional<int>("undefined", 1234) == 1234); + BOOST_TEST(*document_.optional<int>("undefined", 1234) == 1234); } BOOST_AUTO_TEST_CASE(unsigned_integer) { - BOOST_TEST(*parser_.optional<unsigned>("undefined", 1234U) == 1234U); + BOOST_TEST(*document_.optional<unsigned>("undefined", 1234U) == 1234U); } BOOST_AUTO_TEST_CASE(string) { - BOOST_TEST(*parser_.optional<std::string>("undefined", "foo") == "foo"); + BOOST_TEST(*document_.optional<std::string>("undefined", "foo") == "foo"); } BOOST_AUTO_TEST_SUITE_END() @@ -115,29 +113,29 @@ BOOST_AUTO_TEST_CASE(boolean) { - BOOST_TEST(!parser_.optional<bool>("int", true)); - BOOST_TEST(!parser_.optional<bool>("uint", true)); - BOOST_TEST(!parser_.optional<bool>("string", true)); + BOOST_TEST(!document_.optional<bool>("int", true)); + BOOST_TEST(!document_.optional<bool>("uint", true)); + BOOST_TEST(!document_.optional<bool>("string", true)); } BOOST_AUTO_TEST_CASE(integer) { - BOOST_TEST(!parser_.optional<int>("boolean", 1234)); - BOOST_TEST(!parser_.optional<int>("string", 1234)); + BOOST_TEST(!document_.optional<int>("boolean", 1234)); + BOOST_TEST(!document_.optional<int>("string", 1234)); } BOOST_AUTO_TEST_CASE(unsigned_integer) { - BOOST_TEST(!parser_.optional<unsigned>("boolean", 1234)); - BOOST_TEST(!parser_.optional<unsigned>("int", 1234)); - BOOST_TEST(!parser_.optional<unsigned>("string", 1234)); + BOOST_TEST(!document_.optional<unsigned>("boolean", 1234)); + BOOST_TEST(!document_.optional<unsigned>("int", 1234)); + BOOST_TEST(!document_.optional<unsigned>("string", 1234)); } BOOST_AUTO_TEST_CASE(string) { - BOOST_TEST(!parser_.optional<std::string>("boolean", "foo")); - BOOST_TEST(!parser_.optional<std::string>("int", "foo")); - BOOST_TEST(!parser_.optional<std::string>("uint", "foo")); + BOOST_TEST(!document_.optional<std::string>("boolean", "foo")); + BOOST_TEST(!document_.optional<std::string>("int", "foo")); + BOOST_TEST(!document_.optional<std::string>("uint", "foo")); } BOOST_AUTO_TEST_SUITE_END()