summary refs log tree commit diff stats
path: root/tests/stdlib
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@gmail.com>2017-04-08 20:55:32 +0200
committerDominik Picheta <dominikpicheta@gmail.com>2017-04-08 20:55:32 +0200
commit12aafb25cc51488a99d6d73a7fd3965eb73b0bf5 (patch)
tree7dda4c9333ab293d3cd3c0daeceb5dcdb0b2c7fa /tests/stdlib
parentcdfcc12529d716786683c997f1f673bd423432b6 (diff)
downloadNim-12aafb25cc51488a99d6d73a7fd3965eb73b0bf5.tar.gz
First implementation of JSON unmarshal macro.
Diffstat (limited to 'tests/stdlib')
-rw-r--r--tests/stdlib/tjsonmacro.nim40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/stdlib/tjsonmacro.nim b/tests/stdlib/tjsonmacro.nim
new file mode 100644
index 000000000..7dbbf6b51
--- /dev/null
+++ b/tests/stdlib/tjsonmacro.nim
@@ -0,0 +1,40 @@
+import json, macros, strutils
+
+type
+  Point[T] = object
+    x, y: T
+
+  ReplayEventKind* = enum
+    FoodAppeared, FoodEaten, DirectionChanged
+
+  ReplayEvent* = object
+    time*: float
+    case kind*: ReplayEventKind
+    of FoodAppeared, FoodEaten:
+      foodPos*: Point[float]
+    of DirectionChanged:
+      playerPos*: float
+
+  Replay* = ref object
+    events*: seq[ReplayEvent]
+
+var x = Replay(
+  events: @[
+    ReplayEvent(
+      time: 1.2345,
+      kind: FoodEaten,
+      foodPos: Point[float](x: 5.0, y: 1.0)
+    )
+  ]
+)
+
+let node = %x
+
+echo(node)
+
+let y = to(node, Replay)
+doAssert y.events[0].time == 1.2345
+doAssert y.events[0].kind == FoodEaten
+doAssert y.events[0].foodPos.x == 5.0
+doAssert y.events[0].foodPos.y == 1.0
+echo(y.repr)
\ No newline at end of file