Skip to content

Commit ebee42e

Browse files
committed
A little cleanup around set types.
1 parent ea62683 commit ebee42e

File tree

3 files changed

+73
-107
lines changed

3 files changed

+73
-107
lines changed

src/jsony.nim

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ const whiteSpace = {' ', '\n', '\t', '\r'}
77
when defined(release):
88
{.push checks: off, inline.}
99

10-
type SomeTable*[K, V] = Table[K, V] | OrderedTable[K, V] |
11-
TableRef[K, V] | OrderedTableRef[K, V]
10+
type
11+
SomeTable*[K, V] = Table[K, V] | OrderedTable[K, V] |
12+
TableRef[K, V] | OrderedTableRef[K, V]
13+
14+
SomeSet*[A] = HashSet[A] | OrderedSet[A] | set[A]
1215

1316
proc parseHook*[T](s: string, i: var int, v: var seq[T])
1417
proc parseHook*[T: enum](s: string, i: var int, v: var T)
1518
proc parseHook*[T: object|ref object](s: string, i: var int, v: var T)
1619
proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T])
17-
proc parseHook*[T](s: string, i: var int, v: var (SomeSet[T]|set[T]))
20+
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T])
1821
proc parseHook*[T: tuple](s: string, i: var int, v: var T)
1922
proc parseHook*[T: array](s: string, i: var int, v: var T)
2023
proc parseHook*[T: not object](s: string, i: var int, v: var ref T)
@@ -450,8 +453,8 @@ proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T]) =
450453
break
451454
eatChar(s, i, '}')
452455

453-
proc parseHook*[T](s: string, i: var int, v: var (SomeSet[T]|set[T])) =
454-
## Parse HashSet or set type.
456+
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T]) =
457+
## Parse a set type.
455458
eatSpace(s, i)
456459
eatChar(s, i, '[')
457460
while true:
@@ -756,7 +759,7 @@ proc dumpHook*(s: var string, v: ref) =
756759
else:
757760
s.dumpHook(v[])
758761

759-
proc dumpHook*[T](s: var string, v: HashSet[T]|OrderedSet[T]|set[T]) =
762+
proc dumpHook*[T](s: var string, v: SomeSet[T]) =
760763
s.add '['
761764
var i = 0
762765
for e in v:

tests/test_set.nim

Lines changed: 0 additions & 101 deletions
This file was deleted.

tests/test_sets.nim

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,67 @@ block:
1010

1111
doAssert s1.toJson.fromJson(type(s1)) == s1
1212
doAssert s2.toJson.fromJson(type(s2)) == s2
13+
14+
block:
15+
let
16+
s1: set[int8] = {1'i8, 2, 3}
17+
s2: set[int16] = {1'i16, 2, 3}
18+
19+
doAssert s1.toJson() == "[1,2,3]"
20+
doAssert s2.toJson() == "[1,2,3]"
21+
22+
doAssert s1.toJson.fromJson(set[int8]) == s1
23+
doAssert s2.toJson.fromJson(set[int16]) == s2
24+
25+
block:
26+
let
27+
s1: set[uint8] = {1'u8, 2, 3}
28+
s2: set[uint16] = {1'u16, 2, 3}
29+
30+
doAssert s1.toJson() == "[1,2,3]"
31+
doAssert s2.toJson() == "[1,2,3]"
32+
33+
doAssert s1.toJson.fromJson(set[uint8]) == s1
34+
doAssert s2.toJson.fromJson(set[uint16]) == s2
35+
36+
block:
37+
let
38+
s1: set[char] = {'0'..'9'}
39+
40+
doAssert s1.toJson() == """["0","1","2","3","4","5","6","7","8","9"]"""
41+
42+
doAssert s1.toJson.fromJson(set[char]) == s1
43+
44+
block:
45+
type
46+
E1 = enum
47+
e1Elem1, e1Elem2, e1Elem3
48+
E2 = enum
49+
e2Elem1 = "custString1", e2Elem2 = "custString2", e2Elem3 = "custString3"
50+
E3 = enum
51+
e3Elem1 = 10, e3Elem2 = 20, e3Elem3 = 30
52+
53+
let
54+
s1: set[E1] = {e1Elem1, e1Elem2, e1Elem3}
55+
s2: set[E2] = {e2Elem1, e2Elem2, e2Elem3}
56+
s3: set[E3] = {e3Elem1, e3Elem2, e3Elem3}
57+
58+
doAssert s1.toJson() == """["e1Elem1","e1Elem2","e1Elem3"]"""
59+
doAssert s2.toJson() == """["custString1","custString2","custString3"]"""
60+
doAssert s3.toJson() == """["e3Elem1","e3Elem2","e3Elem3"]"""
61+
62+
doAssert s1.toJson.fromJson(set[E1]) == s1
63+
doAssert s2.toJson.fromJson(set[E2]) == s2
64+
doAssert s3.toJson.fromJson(set[E3]) == s3
65+
66+
block:
67+
type
68+
E1 = enum
69+
e1Elem1, e1Elem2, e1Elem3
70+
S1 = set[E1]
71+
72+
let
73+
s1: S1 = {e1Elem1, e1Elem2, e1Elem3}
74+
75+
doAssert s1.toJson() == """["e1Elem1","e1Elem2","e1Elem3"]"""
76+
doAssert s1.toJson.fromJson(set[E1]) == s1

0 commit comments

Comments
 (0)