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()