mirror of
https://github.com/logos-storage/nim-json-rpc.git
synced 2026-01-04 06:33:10 +00:00
Cover optional cases within objects
This commit is contained in:
parent
0160295743
commit
798e86112c
@ -44,7 +44,10 @@ proc fromJson[T: enum](n: JsonNode, argName: string, result: var T) =
|
||||
proc fromJson[T: object](n: JsonNode, argName: string, result: var T) =
|
||||
n.kind.expect(JObject, argName)
|
||||
for k, v in fieldPairs(result):
|
||||
fromJson(n[k], k, v)
|
||||
if v is Option and not n.hasKey(k):
|
||||
fromJson(newJNull(), k, v)
|
||||
else:
|
||||
fromJson(n[k], k, v)
|
||||
|
||||
proc fromJson[T](n: JsonNode, argName: string, result: var Option[T]) =
|
||||
# Allow JNull for options
|
||||
|
||||
@ -105,6 +105,19 @@ s.rpc("rpc.optionalArgNotBuiltin") do(obj: Option[MyOptionalNotBuiltin]) -> stri
|
||||
if val.isSome:
|
||||
result = obj.get.val.get.y
|
||||
|
||||
type
|
||||
MaybeOptions = object
|
||||
o1: Option[bool]
|
||||
o2: Option[bool]
|
||||
o3: Option[bool]
|
||||
|
||||
s.rpc("rpc.optInObj") do(data: string, options: Option[MaybeOptions]) -> int:
|
||||
if options.isSome:
|
||||
let o = options.get
|
||||
if o.o1.isSome: result += 1
|
||||
if o.o2.isSome: result += 2
|
||||
if o.o3.isSome: result += 4
|
||||
|
||||
# Tests
|
||||
suite "Server types":
|
||||
test "On macro registration":
|
||||
@ -118,6 +131,9 @@ suite "Server types":
|
||||
check s.hasMethod("rpc.testreturns")
|
||||
check s.hasMethod("rpc.multivarsofonetype")
|
||||
check s.hasMethod("rpc.optionalArg")
|
||||
check s.hasMethod("rpc.mixedOptionalArg")
|
||||
check s.hasMethod("rpc.optionalArgNotBuiltin")
|
||||
check s.hasMethod("rpc.traceTransaction")
|
||||
|
||||
test "Simple paths":
|
||||
let r = waitFor rpcSimplePath(%[])
|
||||
@ -216,6 +232,12 @@ suite "Server types":
|
||||
var r3 = waitFor rpcOptionalArgNotBuiltin(%[%testOpts2])
|
||||
check r3 == %"Empty2"
|
||||
|
||||
test "Manually set up JSON for optionals":
|
||||
# Check manual set up json with optionals
|
||||
let opts = parseJson("""{"o2": true}""")
|
||||
var r = waitFor rpcOptInObj(%[%"0x31ded", opts])
|
||||
check r == %2
|
||||
|
||||
s.stop()
|
||||
waitFor s.closeWait()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user