mirror of
https://github.com/status-im/nim-json-serialization.git
synced 2025-02-17 20:46:29 +00:00
* Proper error handling when parsed number exceeds uint64 details: Returns an "errNonPortableInt" error * need legacy flag for unit tests * lazy numeric token parser why: Numeric data may have a custom format. In particular,numeric data may be Uint256 which is not a JSON standard and might lead to an overflow. details: Numeric values are assigned a preliminary token type tkNumeric without being fully parsed. This can be used to insert a custom parser. Otherwise the value is parsed implicitly when querying/fetching the token type. + tok: replaced by getter tok() resolving lazy stuff (if necessary) + tokKind: current type without auto-resolving This lazy scheme could be extended to other custom types as long as the first token letter determines the custom type. * activate lazy parsing in reader howto: + no code change if a custom reader refers to an existing reader type FancyInt = distinct int proc readValue(reader: var JsonReader, value: var FancyInt) = value = reader.readValue(int).FancyInt + bespoke reader for cusom parsing type FancyUint = distinct uint proc readValue(reader: var JsonReader, value: var FancyUint) = if reader.lexer.lazyTok == tkNumeric: var accu: FancyUint reader.lexer.customIntValueIt: accu = accu * 10 + it.u256 value = accu elif reader.lexer.tok == tkString: value = reader.lexer.strVal.parseUint.FancyUint ... reader.lexer.next + full code explanation at json_serialisation/reader.readValue() * Add lazy parsing for customised string objects why: This allows parsing large or specialised strings without storing it in the lexer state descriptor. details: Similar logic applies as for the cusomised number parser. For mostly all practical cases, a DSL template is available serving as wrapper around the character/byte item processor code. * fix typo in unit test
25 lines
750 B
Nim
25 lines
750 B
Nim
mode = ScriptMode.Verbose
|
|
|
|
packageName = "json_serialization"
|
|
version = "0.1.0"
|
|
author = "Status Research & Development GmbH"
|
|
description = "Flexible JSON serialization not relying on run-time type information"
|
|
license = "Apache License 2.0"
|
|
skipDirs = @["tests"]
|
|
|
|
requires "nim >= 0.17.0",
|
|
"serialization",
|
|
"stew"
|
|
|
|
proc test(args, path: string) =
|
|
if not dirExists "build":
|
|
mkDir "build"
|
|
|
|
exec "nim " & getEnv("TEST_LANG", "c") & " " & getEnv("NIMFLAGS") & " " & args &
|
|
" -d:nimOldCaseObjects " &
|
|
" -r --hints:off --skipParentCfg --styleCheck:usages --styleCheck:error " & path
|
|
|
|
task test, "Run all tests":
|
|
test "--threads:off", "tests/test_all"
|
|
test "--threads:on", "tests/test_all"
|