Basic support for serialization flavours without default object serialization

This commit is contained in:
Zahary Karadjov 2023-12-18 15:10:26 +02:00
parent 7cb0c31cb2
commit 68722b14fc
No known key found for this signature in database
GPG Key ID: C1F42EAFF38D570F
2 changed files with 25 additions and 4 deletions

View File

@ -1,5 +1,8 @@
import
std/typetraits
std/[typetraits, macros]
type
DefaultFlavor* = object
template serializationFormatImpl(Name: untyped,
mimeTypeName: static string = "") {.dirty.} =
@ -28,7 +31,7 @@ template setWriter*(Format, FormatWriter, PreferredOutput: distinct type) =
else:
template WriterType*(T: type Format): type = FormatWriter
template Writer*(T: type Format): type = FormatWriter
template PreferredOutputType*(T: type Format): type = PreferredOutput
template createFlavor*(ModifiedFormat, FlavorName: untyped) =
@ -38,3 +41,19 @@ template createFlavor*(ModifiedFormat, FlavorName: untyped) =
template PreferredOutputType*(T: type FlavorName): type = PreferredOutputType(ModifiedFormat)
template mimeType*(T: type FlavorName): string = mimeType(ModifiedFormat)
template useDefaultSerializationIn*(T: untyped, Flavor: type) =
mixin Reader, Writer
template readValue*(r: var Reader(Flavor), value: var T) =
mixin readRecordValue
readRecordValue(r, value)
template writeValue*(w: var Writer(Flavor), value: T) =
mixin writeRecordValue
writeRecordValue(w, value)
macro useDefaultSerializationFor*(Flavor: type, types: varargs[untyped])=
result = newStmtList()
for T in types:
result.add newCall(bindSym "useDefaultSerializationIn", T, Flavor)

View File

@ -1,12 +1,14 @@
import
std/typetraits,
stew/shims/macros, stew/objects,
./errors
./errors, ./formats
type
DefaultFlavor* = object
FieldTag*[RecordType: object; fieldName: static string] = distinct void
export
DefaultFlavor
let
# Identifiers affecting the public interface of the library:
valueSym {.compileTime.} = ident "value"