Skip to content

Commit

Permalink
A little cleanup around set types.
Browse files Browse the repository at this point in the history
  • Loading branch information
treeform committed Oct 1, 2021
1 parent ea62683 commit ebee42e
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 107 deletions.
15 changes: 9 additions & 6 deletions src/jsony.nim
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@ const whiteSpace = {' ', '\n', '\t', '\r'}
when defined(release):
{.push checks: off, inline.}

type SomeTable*[K, V] = Table[K, V] | OrderedTable[K, V] |
TableRef[K, V] | OrderedTableRef[K, V]
type
SomeTable*[K, V] = Table[K, V] | OrderedTable[K, V] |
TableRef[K, V] | OrderedTableRef[K, V]

SomeSet*[A] = HashSet[A] | OrderedSet[A] | set[A]

proc parseHook*[T](s: string, i: var int, v: var seq[T])
proc parseHook*[T: enum](s: string, i: var int, v: var T)
proc parseHook*[T: object|ref object](s: string, i: var int, v: var T)
proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T])
proc parseHook*[T](s: string, i: var int, v: var (SomeSet[T]|set[T]))
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T])
proc parseHook*[T: tuple](s: string, i: var int, v: var T)
proc parseHook*[T: array](s: string, i: var int, v: var T)
proc parseHook*[T: not object](s: string, i: var int, v: var ref T)
Expand Down Expand Up @@ -450,8 +453,8 @@ proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T]) =
break
eatChar(s, i, '}')

proc parseHook*[T](s: string, i: var int, v: var (SomeSet[T]|set[T])) =
## Parse HashSet or set type.
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T]) =
## Parse a set type.
eatSpace(s, i)
eatChar(s, i, '[')
while true:
Expand Down Expand Up @@ -756,7 +759,7 @@ proc dumpHook*(s: var string, v: ref) =
else:
s.dumpHook(v[])

proc dumpHook*[T](s: var string, v: HashSet[T]|OrderedSet[T]|set[T]) =
proc dumpHook*[T](s: var string, v: SomeSet[T]) =
s.add '['
var i = 0
for e in v:
Expand Down
101 changes: 0 additions & 101 deletions tests/test_set.nim

This file was deleted.

64 changes: 64 additions & 0 deletions tests/test_sets.nim
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,67 @@ block:

doAssert s1.toJson.fromJson(type(s1)) == s1
doAssert s2.toJson.fromJson(type(s2)) == s2

block:
let
s1: set[int8] = {1'i8, 2, 3}
s2: set[int16] = {1'i16, 2, 3}

doAssert s1.toJson() == "[1,2,3]"
doAssert s2.toJson() == "[1,2,3]"

doAssert s1.toJson.fromJson(set[int8]) == s1
doAssert s2.toJson.fromJson(set[int16]) == s2

block:
let
s1: set[uint8] = {1'u8, 2, 3}
s2: set[uint16] = {1'u16, 2, 3}

doAssert s1.toJson() == "[1,2,3]"
doAssert s2.toJson() == "[1,2,3]"

doAssert s1.toJson.fromJson(set[uint8]) == s1
doAssert s2.toJson.fromJson(set[uint16]) == s2

block:
let
s1: set[char] = {'0'..'9'}

doAssert s1.toJson() == """["0","1","2","3","4","5","6","7","8","9"]"""

doAssert s1.toJson.fromJson(set[char]) == s1

block:
type
E1 = enum
e1Elem1, e1Elem2, e1Elem3
E2 = enum
e2Elem1 = "custString1", e2Elem2 = "custString2", e2Elem3 = "custString3"
E3 = enum
e3Elem1 = 10, e3Elem2 = 20, e3Elem3 = 30

let
s1: set[E1] = {e1Elem1, e1Elem2, e1Elem3}
s2: set[E2] = {e2Elem1, e2Elem2, e2Elem3}
s3: set[E3] = {e3Elem1, e3Elem2, e3Elem3}

doAssert s1.toJson() == """["e1Elem1","e1Elem2","e1Elem3"]"""
doAssert s2.toJson() == """["custString1","custString2","custString3"]"""
doAssert s3.toJson() == """["e3Elem1","e3Elem2","e3Elem3"]"""

doAssert s1.toJson.fromJson(set[E1]) == s1
doAssert s2.toJson.fromJson(set[E2]) == s2
doAssert s3.toJson.fromJson(set[E3]) == s3

block:
type
E1 = enum
e1Elem1, e1Elem2, e1Elem3
S1 = set[E1]

let
s1: S1 = {e1Elem1, e1Elem2, e1Elem3}

doAssert s1.toJson() == """["e1Elem1","e1Elem2","e1Elem3"]"""
doAssert s1.toJson.fromJson(set[E1]) == s1

0 comments on commit ebee42e

Please sign in to comment.