Skip to content

Commit 48fa5ad

Browse files
committed
Saving and loading with archives for immer-types without wrapping them in archivable
1 parent c29e7ff commit 48fa5ad

8 files changed

+1139
-63
lines changed

immer/extra/archive/json/archivable.hpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <immer/extra/archive/errors.hpp>
44
#include <immer/extra/archive/json/json_immer.hpp>
5+
#include <immer/extra/archive/json/json_immer_auto.hpp>
56
#include <immer/extra/archive/json/json_with_archive.hpp>
67
#include <immer/extra/archive/traits.hpp>
78

@@ -98,6 +99,13 @@ auto save_minimal(
9899
return id.value;
99100
}
100101

102+
template <class Archive, class WrapF, class Container>
103+
auto save_minimal(const json_immer_auto_output_archive<Archive, WrapF>& ar,
104+
const archivable<Container>& value)
105+
{
106+
return save_minimal(ar.previous, value);
107+
}
108+
101109
// This function must exist because cereal does some checks and it's not
102110
// possible to have only load_minimal for a type without having save_minimal.
103111
template <class Storage, class Names, class Container>
@@ -140,7 +148,8 @@ template <class Archive, class Container>
140148
auto save_minimal(const Archive& ar, const archivable<Container>& value) ->
141149
typename container_traits<Container>::container_id::rep_t
142150
{
143-
throw std::logic_error{"Should never be called"};
151+
throw std::logic_error{
152+
"Should never be called. save_minimal(const Archive& ar..."};
144153
}
145154

146155
template <class Archive, class Container>

immer/extra/archive/json/json_immer.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ class json_immer_output_archive
4646
archive.saveValue(value);
4747
}
4848

49-
ImmerArchives& get_output_archives() { return archives; }
49+
ImmerArchives& get_output_archives() & { return archives; }
50+
51+
ImmerArchives&& get_output_archives() && { return std::move(archives); }
5052

5153
void finalize()
5254
{

0 commit comments

Comments
 (0)