I've got this working with std/marshal, but would rather use json for the
portability and compatibility with object structure additions in the future
I'm trying to serialize the SaveSlotEntity type. Using this code:
type
LevelProgressEntity* = ref object of RootObj
levelId: string
bestTime: Option[float]
hasCollectedStar: bool
SaveSlotEntity* = ref object of RootObj
progress: Table[string, LevelProgressEntity]
modelVersion: int
proc saveJson*[T](value: T, path: string) {.raises:[].} =
let testObj = SaveSlotEntity(progress: initTable[string,
LevelProgressEntity](), modelVersion: 1)
let jsonNode = %testObj
let jsonStr = $jsonNode
let bytes: seq[byte] = cast[seq[byte]](jsonStr)
[..] more code to write file
Run
Crashes with the following:
/Users/ninovanhooff/PlaydateProjects/wheelsprung.worktrees/level-data/src/data_store/configuration.nim(14,
11) template/generic instantiation of `saveJson` from here
/Users/ninovanhooff/PlaydateProjects/wheelsprung.worktrees/level-data/src/common/json_utils.nim(23,
18) template/generic instantiation of `%` from here
/Users/ninovanhooff/.choosenim/toolchains/nim-1.6.16/lib/pure/json.nim(404,
14) template/generic instantiation of `%` from here
/Users/ninovanhooff/.choosenim/toolchains/nim-1.6.16/lib/pure/json.nim(397,
41) template/generic instantiation of `%` from here
/Users/ninovanhooff/.choosenim/toolchains/nim-1.6.16/lib/pure/json.nim(369,
15) Error: type mismatch: got <Table[system.string,
json_utils.LevelProgressEntity]>
but expected one of:
iterator pairs(a: cstring): tuple[key: int, val: char]
first type mismatch at position: 1
required type for a: cstring
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs(a: string): tuple[key: int, val: char]
first type mismatch at position: 1
required type for a: string
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs(node: JsonNode): tuple[key: string, val: JsonNode]
first type mismatch at position: 1
required type for node: JsonNode
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs[IX, T](a: array[IX, T]): tuple[key: IX, val: T]
first type mismatch at position: 1
required type for a: array[IX, T]
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs[T](a: openArray[T]): tuple[key: int, val: T]
first type mismatch at position: 1
required type for a: openArray[T]
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs[T](a: seq[T]): tuple[key: int, val: T]
first type mismatch at position: 1
required type for a: seq[T]
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
iterator pairs[T](this: SDKArray[T]): tuple[key: int, val: T]
first type mismatch at position: 1
required type for this: SDKArray[pairs.T]
but expression 'table' is of type: Table[system.string,
json_utils.LevelProgressEntity]
expression: pairs(table)
Error: Build failed for package: wheelsprung
... Execution failed with exit code 256
... Command: /Users/ninovanhooff/.nimble/bin/nim c --colors:on
--noNimblePath -d:simulator -d:debug -d:NimblePkgVersion=0.2.0
--path:'/Users/ninovanhooff/.nimble/pkgs/playdate-#main'
--path:/Users/ninovanhooff/.nimble/pkgs/chipmunk7-7.0.3
-o:/Users/ninovanhooff/PlaydateProjects/wheelsprung.worktrees/level-data/wheelsprung
/Users/ninovanhooff/PlaydateProjects/wheelsprung.worktrees/level-data/src/wheelsprung.nim
stack trace: (most recent call last)
/private/var/folders/ww/sx_qg7z51jz6bgr15k4_5y8m0000gn/T/nimblecache-3905360933/nimscriptapi_3772293278.nim(187,
16)
/Users/ninovanhooff/PlaydateProjects/playdate-nim/src/playdate/build/nimble.nim(74,
16) simulatorTask
/Users/ninovanhooff/PlaydateProjects/playdate-nim/src/playdate/build/utils.nim(22,
10) nimble
/Users/ninovanhooff/.choosenim/toolchains/nim-1.6.16/lib/system/nimscript.nim(273,
7) exec
/Users/ninovanhooff/.choosenim/toolchains/nim-1.6.16/lib/system/nimscript.nim(273,
7) Error: unhandled exception: FAILED: nimble -d:simulator -d:debug build
--verbose [OSError]
Error: Exception raised during nimble script execution
Run
Should I write some custom hooks that tell json how to transform
LevelPropgressEntity to JSONNode? I could use some help with that