1- import jsony/ objvar, strutils, tables, sets, unicode, json, options, parseutils
1+ import jsony/ objvar, strutils, tables, sets, unicode, json, options, parseutils, typetraits
22
33type JsonError * = object of ValueError
44
@@ -20,6 +20,7 @@ proc parseHook*[T: array](s: string, i: var int, v: var T)
2020proc parseHook * [T: not object ](s: string , i: var int , v: var ref T)
2121proc parseHook * (s: string , i: var int , v: var JsonNode )
2222proc parseHook * (s: string , i: var int , v: var char )
23+ proc parseHook * [T: distinct ](s: string , i: var int , v: var T)
2324
2425template error (msg: string , i: int ) =
2526 # # Shortcut to raise an exception.
@@ -525,6 +526,11 @@ proc parseHook*(s: string, i: var int, v: var JsonNode) =
525526 else :
526527 error (" Unexpected." , i)
527528
529+ proc parseHook * [T: distinct ](s: string , i: var int , v: var T) =
530+ var x: T.distinctBase
531+ parseHook (s, i, x)
532+ v = cast [T](x)
533+
528534proc fromJson * [T](s: string , x: typedesc [T]): T =
529535 # # Takes json and outputs the object it represents.
530536 # # * Extra json fields are ignored.
@@ -549,6 +555,11 @@ proc dumpHook*[N, T](s: var string, v: array[N, T])
549555proc dumpHook * [T](s: var string , v: seq [T])
550556proc dumpHook * (s: var string , v: object )
551557proc dumpHook * (s: var string , v: ref )
558+ proc dumpHook * [T: distinct ](s: var string , v: T)
559+
560+ proc dumpHook * [T: distinct ](s: var string , v: T) =
561+ var x = cast [T.distinctBase](v)
562+ s.dumpHook (x)
552563
553564proc dumpHook * (s: var string , v: bool ) =
554565 if v:
0 commit comments