Support int, string and bool fields in unmarshal json macro.
This commit is contained in:
parent
12aafb25cc
commit
cc223ff7d8
2 changed files with 55 additions and 17 deletions
|
|
@ -1,3 +1,7 @@
|
|||
discard """
|
||||
file: "tjsonmacro.nim"
|
||||
output: ""
|
||||
"""
|
||||
import json, macros, strutils
|
||||
|
||||
type
|
||||
|
|
@ -17,24 +21,39 @@ type
|
|||
|
||||
Replay* = ref object
|
||||
events*: seq[ReplayEvent]
|
||||
test: int
|
||||
test2: string
|
||||
test3: bool
|
||||
testNil: string
|
||||
|
||||
var x = Replay(
|
||||
events: @[
|
||||
ReplayEvent(
|
||||
time: 1.2345,
|
||||
kind: FoodEaten,
|
||||
foodPos: Point[float](x: 5.0, y: 1.0)
|
||||
)
|
||||
]
|
||||
)
|
||||
when isMainModule:
|
||||
# Tests inspired by own use case (with some additional tests).
|
||||
# This should succeed.
|
||||
var x = Replay(
|
||||
events: @[
|
||||
ReplayEvent(
|
||||
time: 1.2345,
|
||||
kind: FoodEaten,
|
||||
foodPos: Point[float](x: 5.0, y: 1.0)
|
||||
)
|
||||
],
|
||||
test: 18827361,
|
||||
test2: "hello world",
|
||||
test3: true,
|
||||
testNil: nil
|
||||
)
|
||||
|
||||
let node = %x
|
||||
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
|
||||
doAssert y.test == 18827361
|
||||
doAssert y.test2 == "hello world"
|
||||
doAssert y.test3
|
||||
doAssert y.testNil == nil
|
||||
|
||||
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)
|
||||
# Tests that verify the error messages for invalid data.
|
||||
# TODO:
|
||||
Loading…
Add table
Add a link
Reference in a new issue