From b42502b5121b7cc4c50d03f41723b19488717abe Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Wed, 7 Aug 2019 01:19:32 +0300 Subject: [PATCH] Some needed support for custom field serialization in Json --- serialization/object_serialization.nim | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/serialization/object_serialization.nim b/serialization/object_serialization.nim index fb330ba..cb8a68a 100644 --- a/serialization/object_serialization.nim +++ b/serialization/object_serialization.nim @@ -2,7 +2,7 @@ import stew/shims/macros, stew/objects type - FieldTag[RecordType; fieldName: static string; FieldType] = distinct void + FieldTag*[RecordType; fieldName: static string; FieldType] = distinct void let # Identifiers affecting the public interface of the library: @@ -138,6 +138,13 @@ template readFieldIMPL[Reader](field: type FieldTag, mixin readValue reader.readValue(field.FieldType) +template writeFieldIMPL*[Writer](writer: var Writer, + fieldTag: type FieldTag, + fieldVal: auto, + holderObj: auto) = + mixin writeValue + writer.writeValue(fieldVal) + proc makeFieldReadersTable(RecordType, Reader: distinct type): seq[FieldReader[RecordType, Reader]] = mixin enumAllSerializedFields, readFieldIMPL @@ -281,8 +288,10 @@ proc genCustomSerializationForField(Format, field, if writeBody != nil: result.add quote do: type Writer = WriterType(`Format`) - proc writeFieldIMPL*(F: type FieldTag[`RecordType`, `fieldName`, auto], - `writerVar`: var Writer) = + proc writeFieldIMPL*(`writerVar`: var Writer, + F: type FieldTag[`RecordType`, `fieldName`, auto], + `valueVar`: auto, + `holderVar`: `RecordType`) = `writeBody` proc genCustomSerializationForType(Format, typ: NimNode,