2026-07-16 14:02:17 -03:00
|
|
|
import std/[json, strutils]
|
2024-12-10 13:52:21 -04:00
|
|
|
import results
|
|
|
|
|
|
2026-07-16 14:02:17 -03:00
|
|
|
proc getProtoInt64*(node: JsonNode, key: string): Result[Opt[int64], string] =
|
2024-12-10 13:52:21 -04:00
|
|
|
try:
|
|
|
|
|
let (value, ok) =
|
|
|
|
|
if node.hasKey(key):
|
|
|
|
|
if node[key].kind == JString:
|
|
|
|
|
(parseBiggestInt(node[key].getStr()), true)
|
|
|
|
|
else:
|
|
|
|
|
(node[key].getBiggestInt(), true)
|
|
|
|
|
else:
|
|
|
|
|
(0, false)
|
|
|
|
|
|
|
|
|
|
if ok:
|
2026-07-16 14:02:17 -03:00
|
|
|
return ok(Opt.some(value))
|
2024-12-10 13:52:21 -04:00
|
|
|
|
2026-07-16 14:02:17 -03:00
|
|
|
return ok(Opt.none(int64))
|
2024-12-10 13:52:21 -04:00
|
|
|
except CatchableError:
|
|
|
|
|
return err("Invalid int64 value in `" & key & "`")
|