Etan Kissling 85b7ea093c
add {.raises.} annotation to writeValue (#64)
Tag `writeValue` overrides with `{.raises: [IOError].}`.

The override in `writer.nim` also needs `gcsafe` to support recursion
in Nim 2.0.
2023-08-19 13:47:32 +02:00

32 lines
818 B
Nim

import std/options, ../../json_serialization/[reader, writer, lexer]
export options
template writeObjectField*(w: var JsonWriter,
record: auto,
fieldName: static string,
field: Option): bool =
mixin writeObjectField
if field.isSome:
writeObjectField(w, record, fieldName, field.get)
else:
false
proc writeValue*(writer: var JsonWriter, value: Option) {.raises: [IOError].} =
mixin writeValue
if value.isSome:
writer.writeValue value.get
else:
writer.writeValue JsonString("null")
proc readValue*[T](reader: var JsonReader, value: var Option[T]) =
mixin readValue
let tok = reader.lexer.lazyTok
if tok == tkNull:
reset value
reader.lexer.next()
else:
value = some reader.readValue(T)