mirror of
https://github.com/status-im/nim-json-serialization.git
synced 2025-02-19 13:34:19 +00:00
Address review comments; Passing test suite
This commit is contained in:
parent
6e92113a06
commit
463a0cf1b7
@ -52,7 +52,7 @@ func valueStr(err: ref IntOverflowError): string =
|
|||||||
|
|
||||||
template tryFmt(expr: untyped): string =
|
template tryFmt(expr: untyped): string =
|
||||||
try: expr
|
try: expr
|
||||||
except CatchableError: ""
|
except CatchableError as err: err.msg
|
||||||
|
|
||||||
method formatMsg*(err: ref JsonReaderError, filename: string): string =
|
method formatMsg*(err: ref JsonReaderError, filename: string): string =
|
||||||
tryFmt: fmt"{filename}({err.line}, {err.col}) Error while reading json file"
|
tryFmt: fmt"{filename}({err.line}, {err.col}) Error while reading json file"
|
||||||
@ -191,8 +191,8 @@ proc isNotNilCheck[T](x: ptr T not nil) {.compileTime.} = discard
|
|||||||
template isCharArray[N](v: array[N, char]): bool = true
|
template isCharArray[N](v: array[N, char]): bool = true
|
||||||
template isCharArray(v: auto): bool = false
|
template isCharArray(v: auto): bool = false
|
||||||
|
|
||||||
proc readValue*(r: var JsonReader, value: var auto)
|
proc readValue*[T](r: var JsonReader, value: var T)
|
||||||
{.raises: [SerializationError, IOError, Defect].} =
|
{.raises: [SerializationError, IOError, Defect].} =
|
||||||
mixin readValue
|
mixin readValue
|
||||||
|
|
||||||
let tok {.used.} = r.lexer.tok
|
let tok {.used.} = r.lexer.tok
|
||||||
@ -237,8 +237,11 @@ proc readValue*(r: var JsonReader, value: var auto)
|
|||||||
elif value is enum:
|
elif value is enum:
|
||||||
case tok
|
case tok
|
||||||
of tkString:
|
of tkString:
|
||||||
# TODO: don't proprage the `parseEnum` exception
|
try:
|
||||||
value.setParsed(r.lexer.strVal)
|
value.setParsed(r.lexer.strVal)
|
||||||
|
except ValueError as err:
|
||||||
|
const typeName = typetraits.name(T)
|
||||||
|
r.raiseUnexpectedValue("Expected valid '" & typeName & "' value")
|
||||||
of tkInt:
|
of tkInt:
|
||||||
# TODO: validate that the value is in range
|
# TODO: validate that the value is in range
|
||||||
value = type(value)(r.lexer.absIntVal)
|
value = type(value)(r.lexer.absIntVal)
|
||||||
@ -328,5 +331,5 @@ proc readValue*(r: var JsonReader, value: var auto)
|
|||||||
r.skipToken tkCurlyRi
|
r.skipToken tkCurlyRi
|
||||||
|
|
||||||
else:
|
else:
|
||||||
const typeName = typetraits.name(value.type)
|
const typeName = typetraits.name(T)
|
||||||
{.error: "Failed to convert to JSON an unsupported type: " & typeName.}
|
{.error: "Failed to convert to JSON an unsupported type: " & typeName.}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user