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