aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLexi Winter <lexi@hemlock.eden.le-fay.org>2025-03-26 15:39:07 +0000
committerLexi Winter <lexi@hemlock.eden.le-fay.org>2025-03-26 15:39:07 +0000
commit63ae632ca5471dd43873d61eccf553e1e1a0e546 (patch)
tree1b85d4249b35df0812937b1bdad3a2a0ca91b0d8
parente3f8075b7ff82215d92c495d015526eb56b124a7 (diff)
downloadlibnvxx-63ae632ca5471dd43873d61eccf553e1e1a0e546.tar.gz
libnvxx-63ae632ca5471dd43873d61eccf553e1e1a0e546.tar.bz2
nv_deserialize() should take the target object by reference
this avoids the need to write the type name when calling it, and makes it easier to deserialize into an existing object.
-rw-r--r--README4
-rw-r--r--libnvxx/nvxx_serialize.h8
-rw-r--r--libnvxx/tests/nvxx_basic.cc3
-rw-r--r--libnvxx/tests/nvxx_serialize.cc3
4 files changed, 9 insertions, 9 deletions
diff --git a/README b/README
index ca208b1..9ca353c 100644
--- a/README
+++ b/README
@@ -60,7 +60,9 @@ serialization interface:
object obj{};
nv_list nvl = bsd::nv_serialize(obj);
- object obj2 = bsd::nv_deserialize<object>(nvl);
+
+ object obj2{};
+ bsd::nv_deserialize(nvl, obj);
infrequently asked questions:
diff --git a/libnvxx/nvxx_serialize.h b/libnvxx/nvxx_serialize.h
index 37deab6..45f92be 100644
--- a/libnvxx/nvxx_serialize.h
+++ b/libnvxx/nvxx_serialize.h
@@ -365,15 +365,13 @@ auto nv_serialize(_T &&__o) -> nv_list
return __nvl;
}
-template<typename _T>
-auto nv_deserialize(const_nv_list const &__nvl) -> _T
+template<typename _Object>
+void nv_deserialize(const_nv_list const &__nvl, _Object &__obj)
{
- using __schema_type = nv_schema<std::remove_cvref_t<_T>>;
+ using __schema_type = nv_schema<std::remove_cvref_t<_Object>>;
auto __schema = __schema_type{}.get();
- auto __obj = _T();
__schema.deserialize(__nvl, __obj);
- return __obj;
}
} // namespace bsd
diff --git a/libnvxx/tests/nvxx_basic.cc b/libnvxx/tests/nvxx_basic.cc
index fa17397..8f9ea19 100644
--- a/libnvxx/tests/nvxx_basic.cc
+++ b/libnvxx/tests/nvxx_basic.cc
@@ -921,8 +921,7 @@ TEST_CASE(nvxx_add_binary_error)
auto nvl = bsd::nv_list();
nvl.set_error(EINVAL);
- ATF_REQUIRE_THROW(bsd::nv_error_state,
- nvl.add_binary("test_binary", value));
+ ATF_REQUIRE_THROW(bsd::nv_error_state, nvl.add_binary(key, value));
}
TEST_CASE(nvxx_add_duplicate_binary)
diff --git a/libnvxx/tests/nvxx_serialize.cc b/libnvxx/tests/nvxx_serialize.cc
index 8ce5a21..93dadf8 100644
--- a/libnvxx/tests/nvxx_serialize.cc
+++ b/libnvxx/tests/nvxx_serialize.cc
@@ -216,7 +216,8 @@ TEST_CASE(nv_serialize)
auto obj = object{42, "quux", {42, 666, 1024}};
auto nvl = bsd::nv_serialize(obj);
- auto obj2 = bsd::nv_deserialize<object>(nvl);
+ auto obj2 = object{};
+ bsd::nv_deserialize(nvl, obj2);
ATF_REQUIRE_EQ(42, obj2.int_value);
ATF_REQUIRE_EQ("quux", obj2.string_value);
ATF_REQUIRE_EQ(true, std::ranges::equal(obj2.array_value,