Add utility for accessing private JSON mappings
All checks were successful
on-push / build-and-test (push) Successful in 21s

This commit is contained in:
2025-12-05 14:52:59 +01:00
parent 50418b02e4
commit e147f7fcba

View File

@@ -26,6 +26,21 @@
namespace art::json
{
struct access
{
template<typename T>
using json = T::json;
template<typename T>
static
T
create()
{
return T{};
}
};
class marshaling_context_t
{
protected:
@@ -208,7 +223,7 @@ namespace art::json
T
unmarshal(variant const& v, marshaling_context_t* context)
{
T instance;
auto instance = access::create<T>();
do_unmarshal(instance, v, context);
return instance;
}
@@ -222,7 +237,7 @@ namespace art::json
void
do_marshal(variant& v, T const& instance, marshaling_context_t* context)
{
((Bases::json::do_marshal(v, instance, context)), ...);
((access::json<Bases>::do_marshal(v, instance, context)), ...);
First::marshal(v, instance, context);
((Members::marshal(v, instance, context)), ...);
}
@@ -240,7 +255,7 @@ namespace art::json
void
do_unmarshal(T& instance, variant const& v, marshaling_context_t* context)
{
((Bases::json::do_unmarshal(instance, v, context)), ...);
((access::json<Bases>::do_unmarshal(instance, v, context)), ...);
First::unmarshal(instance, v, context);
((Members::unmarshal(instance, v, context)), ...);
@@ -253,7 +268,7 @@ namespace art::json
T
unmarshal(variant const& v, marshaling_context_t* context)
{
T instance;
auto instance = access::create<T>();
do_unmarshal(instance, v, context);
return instance;
}
@@ -309,14 +324,14 @@ namespace art::json
variant
marshal(T const& instance, marshaling_context_t* context)
{
return T::json::marshal(instance, context);
return access::json<T>::marshal(instance, context);
}
static
T
unmarshal(variant const& v, marshaling_context_t* context)
{
return T::json::unmarshal(v, context);
return access::json<T>::unmarshal(v, context);
}
};