1
- import jsony/ objvar, strutils, tables, sets, unicode, json, options, parseutils
1
+ import jsony/ objvar, strutils, tables, sets, unicode, json, options, parseutils, typetraits
2
2
3
3
type JsonError * = object of ValueError
4
4
@@ -20,6 +20,7 @@ proc parseHook*[T: array](s: string, i: var int, v: var T)
20
20
proc parseHook * [T: not object ](s: string , i: var int , v: var ref T)
21
21
proc parseHook * (s: string , i: var int , v: var JsonNode )
22
22
proc parseHook * (s: string , i: var int , v: var char )
23
+ proc parseHook * [T: distinct ](s: string , i: var int , v: var T)
23
24
24
25
template error (msg: string , i: int ) =
25
26
# # Shortcut to raise an exception.
@@ -525,6 +526,11 @@ proc parseHook*(s: string, i: var int, v: var JsonNode) =
525
526
else :
526
527
error (" Unexpected." , i)
527
528
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
+
528
534
proc fromJson * [T](s: string , x: typedesc [T]): T =
529
535
# # Takes json and outputs the object it represents.
530
536
# # * Extra json fields are ignored.
@@ -549,6 +555,11 @@ proc dumpHook*[N, T](s: var string, v: array[N, T])
549
555
proc dumpHook * [T](s: var string , v: seq [T])
550
556
proc dumpHook * (s: var string , v: object )
551
557
proc 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)
552
563
553
564
proc dumpHook * (s: var string , v: bool ) =
554
565
if v:
0 commit comments