mirror of
https://github.com/logos-storage/nim-json-rpc.git
synced 2026-01-08 08:33:14 +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) =
|
proc fromJson[T: object](n: JsonNode, argName: string, result: var T) =
|
||||||
n.kind.expect(JObject, argName)
|
n.kind.expect(JObject, argName)
|
||||||
for k, v in fieldPairs(result):
|
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]) =
|
proc fromJson[T](n: JsonNode, argName: string, result: var Option[T]) =
|
||||||
# Allow JNull for options
|
# Allow JNull for options
|
||||||
|
|||||||
@ -105,6 +105,19 @@ s.rpc("rpc.optionalArgNotBuiltin") do(obj: Option[MyOptionalNotBuiltin]) -> stri
|
|||||||
if val.isSome:
|
if val.isSome:
|
||||||
result = obj.get.val.get.y
|
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
|
# Tests
|
||||||
suite "Server types":
|
suite "Server types":
|
||||||
test "On macro registration":
|
test "On macro registration":
|
||||||
@ -118,6 +131,9 @@ suite "Server types":
|
|||||||
check s.hasMethod("rpc.testreturns")
|
check s.hasMethod("rpc.testreturns")
|
||||||
check s.hasMethod("rpc.multivarsofonetype")
|
check s.hasMethod("rpc.multivarsofonetype")
|
||||||
check s.hasMethod("rpc.optionalArg")
|
check s.hasMethod("rpc.optionalArg")
|
||||||
|
check s.hasMethod("rpc.mixedOptionalArg")
|
||||||
|
check s.hasMethod("rpc.optionalArgNotBuiltin")
|
||||||
|
check s.hasMethod("rpc.traceTransaction")
|
||||||
|
|
||||||
test "Simple paths":
|
test "Simple paths":
|
||||||
let r = waitFor rpcSimplePath(%[])
|
let r = waitFor rpcSimplePath(%[])
|
||||||
@ -216,6 +232,12 @@ suite "Server types":
|
|||||||
var r3 = waitFor rpcOptionalArgNotBuiltin(%[%testOpts2])
|
var r3 = waitFor rpcOptionalArgNotBuiltin(%[%testOpts2])
|
||||||
check r3 == %"Empty2"
|
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()
|
s.stop()
|
||||||
waitFor s.closeWait()
|
waitFor s.closeWait()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user