From a5436d56527515549098fe82c3296bb4c27fedc2 Mon Sep 17 00:00:00 2001 From: Jan Jurzitza Date: Thu, 26 May 2022 09:51:52 +0200 Subject: [PATCH] add `@serdeProxyCast`, `@serdeEnumProxy` UDAs Implementation is needed on the mir-ion side for use though --- source/mir/serde.d | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/mir/serde.d b/source/mir/serde.d index bcd5c7f0..f7cd58c1 100644 --- a/source/mir/serde.d +++ b/source/mir/serde.d @@ -13,6 +13,7 @@ module mir.serde; import mir.functional: naryFun; import mir.reflection; +import std.meta: AliasSeq; import std.traits: TemplateArgsOf, EnumMembers, hasUDA, isAggregateType; version (D_Exceptions) @@ -653,6 +654,13 @@ version(mir_test) unittest +/ alias serdeGetProxy(alias symbol) = TemplateArgsOf!(getUDA!(symbol, serdeProxy))[0]; +/// Can be applied to @serdeProxy types to make (de)serialization use +/// underlying type through casting. Useful for enums. +enum serdeProxyCast; + +/// Equivalent to @serdeProxy!T @serdeProxyCast +alias serdeEnumProxy(T) = AliasSeq!(serdeProxy!T, serdeProxyCast); + /++ Attributes to conditional ignore field during serialization.