From e147f7fcba5b817e67f86ae59bdd54af06250ef2 Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 5 Dec 2025 14:52:59 +0100 Subject: [PATCH] Add utility for accessing private JSON mappings --- art/json/marshaling.hxx | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/art/json/marshaling.hxx b/art/json/marshaling.hxx index 1f084ed..62a06b8 100644 --- a/art/json/marshaling.hxx +++ b/art/json/marshaling.hxx @@ -26,6 +26,21 @@ namespace art::json { + struct access + { + template + using json = T::json; + + template + 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(); 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::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::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(); 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::marshal(instance, context); } static T unmarshal(variant const& v, marshaling_context_t* context) { - return T::json::unmarshal(v, context); + return access::json::unmarshal(v, context); } };