diff --git a/include/json.hpp b/include/json.hpp index af17cc9..aebc573 100644 --- a/include/json.hpp +++ b/include/json.hpp @@ -271,6 +271,9 @@ class basic_value explicit operator long double() const { return as_long_double(); } explicit operator string_t() const { return as_string(); } + explicit operator basic_array() const { return as_array(); } + explicit operator basic_object() const { return as_object(); } + template typename collection_t = std::vector, typename _ = std::enable_if_t>>> explicit operator collection_t() const @@ -334,8 +337,8 @@ class basic_array basic_array(std::initializer_list init_list); basic_array(typename raw_array::size_type size); - explicit basic_array(const basic_value& val); - explicit basic_array(basic_value&& val); + // explicit basic_array(const basic_value& val); + // explicit basic_array(basic_value&& val); template >>> @@ -450,8 +453,10 @@ class basic_object basic_object(const basic_object& rhs) = default; basic_object(basic_object&& rhs) noexcept = default; basic_object(std::initializer_list init_list); - explicit basic_object(const basic_value& val); - explicit basic_object(basic_value&& val); + + // explicit basic_object(const basic_value& val); + // explicit basic_object(basic_value&& val); + template >>> basic_object(map_t map) : _object_data(std::make_move_iterator(map.begin()), std::make_move_iterator(map.end())) @@ -1428,14 +1433,14 @@ template inline basic_array::basic_array(typename raw_array::size_type size) : _array_data(size) {} -template -inline basic_array::basic_array(const basic_value& val) : basic_array(val.as_array()) -{} - -template -inline basic_array::basic_array(basic_value&& val) - : basic_array(std::move(val.as_array())) -{} +// template +// inline basic_array::basic_array(const basic_value& val) : basic_array(val.as_array()) +//{} +// +// template +// inline basic_array::basic_array(basic_value&& val) +// : basic_array(std::move(val.as_array())) +//{} template inline void basic_array::clear() noexcept @@ -1768,14 +1773,15 @@ inline basic_object::basic_object(std::initializer_list in : _object_data(std::make_move_iterator(init_list.begin()), std::make_move_iterator(init_list.end())) {} -template -inline basic_object::basic_object(const basic_value& val) : basic_object(val.as_object()) -{} - -template -inline basic_object::basic_object(basic_value&& val) - : basic_object(std::move(val.as_object())) -{} +// template +// inline basic_object::basic_object(const basic_value& val) : +// basic_object(val.as_object()) +//{} +// +// template +// inline basic_object::basic_object(basic_value&& val) +// : basic_object(std::move(val.as_object())) +//{} template inline bool basic_object::contains(const string_t& key) const diff --git a/sample/sample.cpp b/sample/sample.cpp index df4cf56..15a7a19 100644 --- a/sample/sample.cpp +++ b/sample/sample.cpp @@ -299,14 +299,41 @@ bool serializing() void test_jsonization() { - struct MyStruct : json::bind_helper + struct AAA { - int aaa = 100; + int a_i = 100; - MEO_JSONIZATION(aaa); + MEO_JSONIZATION(a_i); + }; + + struct MyStruct + { + std::vector vec; + std::map map; + + int i = 0; + double d = 0; + + AAA aaa; + + MEO_JSONIZATION(vec, map, MEO_OPTIONAL i, MEO_OPTIONAL d, aaa); }; MyStruct a; - auto j1 = a.operator json::object(); - auto j2 = (json::object)a; // error + a.vec = { 1, 2, 3 }; + a.map = { { "key", 5 } }; + a.i = 100; + a.d = 0.5; + + json::object j = a.dump_to_json(); + std::cout << j << std::endl; + + // for test MEO_OPTIONAL + j.erase("i"); + + MyStruct b; + bool loaded = b.load_from_json(j); + + std::cout << "loaded: " << loaded << std::endl; + std::cout << b.dump_to_json() << std::endl; }