static Archive& save(Archive& ar, const std::variant<Types...> &v) { const std::size_t idx = v.index(); __YAS_CONSTEXPR_IF ( F & yas::json ) { ar.write("[", 1); ar & YAS_OBJECT(nullptr, idx); ar.write(",", 1); std_variant_switch<F>(ar, idx, __YAS_CCAST(std::variant<Types...> &, v)); ar.write("]", 1); } else {
bool compacted_storage_size_test(std::ostream &log, const char *archive_type, const char *test_name) { typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type); constexpr auto ok = (archive_traits::oarchive_type::flags() & yas::binary) && (archive_traits::oarchive_type::flags() & yas::compacted) ; if ( ok ) { std::uint32_t in1 = std::numeric_limits<std::uint32_t>::max(); std::uint16_t in2 = 1; std::uint16_t out1{}; std::uint16_t out2{}; auto o0 = YAS_OBJECT( nullptr ,in1 ,in2 ); oa & o0; { typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type); auto i0 = YAS_OBJECT_NVP( nullptr ,("in1", out1) ,("in2", out2) ); bool catchedException = false; try { ia & i0; } catch (const ::yas::io_exception& e) { catchedException = true; } if ( !catchedException ) { YAS_TEST_REPORT(log, archive_type, test_name); return false; } } } return true; }
bool yas_object_test(const char* archive_type, const char* io_type) { { int i0 = 3, i1 = 0; auto o0 = YAS_OBJECT("object0", i0); auto o1 = YAS_OBJECT("object1", i1); typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type, io_type); oa & o0; typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type, io_type); ia & o1; if ( i0 != i1 ) { std::cout << "YAS_OBJECT deserialization error! [1]" << std::endl; return false; } } { const int i0 = 4; int i1 = 0; auto o0 = YAS_OBJECT("object0", i0); auto o1 = YAS_OBJECT("object1", i1); typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type, io_type); oa & o0; typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type, io_type); ia & o1; if ( i0 != i1 ) { std::cout << "YAS_OBJECT deserialization error! [2]" << std::endl; return false; } } { int i0 = 3, i1 = 0; typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type, io_type); oa & YAS_OBJECT("object0", i0); typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type, io_type); ia & YAS_OBJECT("object1", i1); if ( i0 != i1 ) { std::cout << "YAS_OBJECT deserialization error! [3]" << std::endl; return false; } } { _yas_object_test_::type0 t0(3), t1(0); typename archive_traits::oarchive oa; archive_traits::ocreate(oa, archive_type, io_type); oa & t0; typename archive_traits::iarchive ia; archive_traits::icreate(ia, oa, archive_type, io_type); ia & t1; if ( t0.v != t1.v ) { std::cout << "YAS_OBJECT deserialization error! [4]" << std::endl; return false; } } return true; }
void serialize(Archive &ar) { ar & YAS_OBJECT("type0", v); }