2019-06-24 17:38:37 +03:00
|
|
|
import std/options, ../../json_serialization/[reader, writer, lexer]
|
|
|
|
export options
|
|
|
|
|
2022-06-16 17:14:00 +03:00
|
|
|
template writeField*(w: var JsonWriter,
|
2022-06-18 13:34:04 +03:00
|
|
|
record: auto,
|
2022-06-16 17:14:00 +03:00
|
|
|
fieldName: static string,
|
2022-06-18 13:34:04 +03:00
|
|
|
field: Option) =
|
|
|
|
mixin writeField
|
|
|
|
|
2022-06-16 17:14:00 +03:00
|
|
|
if field.isSome:
|
2022-06-18 13:34:04 +03:00
|
|
|
writeField(w, record, fieldName, field.get)
|
2022-06-16 17:14:00 +03:00
|
|
|
|
2019-06-24 17:38:37 +03:00
|
|
|
proc writeValue*(writer: var JsonWriter, value: Option) =
|
2022-06-18 13:34:04 +03:00
|
|
|
mixin writeValue
|
|
|
|
|
2019-06-24 17:38:37 +03:00
|
|
|
if value.isSome:
|
|
|
|
writer.writeValue value.get
|
|
|
|
else:
|
|
|
|
writer.writeValue JsonString("null")
|
|
|
|
|
|
|
|
proc readValue*[T](reader: var JsonReader, value: var Option[T]) =
|
2022-06-18 13:34:04 +03:00
|
|
|
mixin readValue
|
|
|
|
|
2022-05-05 17:33:40 +01:00
|
|
|
let tok = reader.lexer.lazyTok
|
2019-06-24 17:38:37 +03:00
|
|
|
if tok == tkNull:
|
|
|
|
reset value
|
|
|
|
reader.lexer.next()
|
|
|
|
else:
|
|
|
|
value = some reader.readValue(T)
|