You've already forked libart-json
Add utility for accessing private JSON mappings
All checks were successful
on-push / build-and-test (push) Successful in 21s
All checks were successful
on-push / build-and-test (push) Successful in 21s
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user