Skip to content

Commit 51543f9

Browse files
authored
Flavor automatic serialization (#241)
* Flavor automatic serialization * Fix * Fix tests
1 parent b125983 commit 51543f9

File tree

6 files changed

+28
-8
lines changed

6 files changed

+28
-8
lines changed

json_rpc.nimble

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ requires "nim >= 1.6.0",
2525
"httputils >= 0.3.0 & < 0.4.0",
2626
"chronicles",
2727
"websock >= 0.2.0 & < 0.3.0",
28-
"json_serialization",
28+
"serialization >= 0.4.4",
29+
"json_serialization >= 0.4.2",
2930
"unittest2"
3031

3132
let nimc = getEnv("NIMC", "nim") # Which nim compiler to use

json_rpc/jsonmarshal.nim

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ createJsonFlavor JrpcConv,
2020
requireAllFields = false,
2121
omitOptionalFields = false, # Don't skip optional fields==none in Writer
2222
allowUnknownFields = true,
23-
skipNullFields = true # Skip optional fields==null in Reader
23+
skipNullFields = true, # Skip optional fields==null in Reader
24+
automaticPrimitivesSerialization = false
2425

2526
# JrpcConv is a namespace/flavor for encoding and decoding
2627
# parameters and return value of a rpc method.
28+
29+
when declared(json_serialization.automaticSerialization):
30+
# Nim 1.6 cannot use this new feature
31+
JrpcConv.automaticSerialization(JsonNode, true)

json_rpc/private/jrpc_sys.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import
1313
std/hashes,
1414
results,
1515
json_serialization,
16-
json_serialization/stew/results as jser_results
16+
json_serialization/pkg/results as jser_results
1717

1818
export
1919
results,

json_rpc/private/server_handler_wrapper.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import
1414
stew/[byteutils, objects],
1515
json_serialization,
1616
json_serialization/std/[options],
17-
json_serialization/stew/results,
17+
json_serialization/pkg/results,
1818
../errors,
1919
./jrpc_sys,
2020
./shared_wrapper,

tests/test_router_rpc.nim

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ import
1111
unittest2,
1212
../json_rpc/router,
1313
json_serialization/std/options,
14-
json_serialization/stew/results
14+
json_serialization/pkg/results
1515

1616
var server = RpcRouter()
1717

1818
type
1919
OptAlias[T] = results.Opt[T]
20-
20+
2121
server.rpc("std_option") do(A: int, B: Option[int], C: string, D: Option[int], E: Option[string]) -> string:
2222
var res = "A: " & $A
2323
res.add ", B: " & $B.get(99)
@@ -49,7 +49,7 @@ server.rpc("alias_opt") do(A: int, B: OptAlias[int], C: string, D: Option[int],
4949
res.add ", D: " & $D.get(77)
5050
res.add ", E: " & E.get("none")
5151
return res
52-
52+
5353
server.rpc("noParams") do() -> int:
5454
return 123
5555

@@ -93,7 +93,7 @@ template test_optional(meth: static[string]) =
9393
check res == """{"jsonrpc":"2.0","id":0,"error":{"code":-32000,"message":"`mixed_opt` raised an exception","data":"Parameter [D] of type 'Option[system.int]' could not be decoded: number expected"}}"""
9494
else:
9595
check res == """{"jsonrpc":"2.0","id":0,"error":{"code":-32000,"message":"`alias_opt` raised an exception","data":"Parameter [D] of type 'Option[system.int]' could not be decoded: number expected"}}"""
96-
96+
9797
test meth & " D extra, positional":
9898
let n = req(meth, "[44, 567, \"apple\", 999, \"banana\", true]")
9999
let res = waitFor server.route(n)

tests/testrpcmacro.nim

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,20 @@ MyOptional.useDefaultSerializationIn JrpcConv
5050
MyOptionalNotBuiltin.useDefaultSerializationIn JrpcConv
5151
MuscleCar.useDefaultSerializationIn JrpcConv
5252

53+
when declared(json_serialization.automaticSerialization):
54+
# Nim 1.6 cannot use this new feature
55+
JrpcConv.automaticSerialization(int, true)
56+
JrpcConv.automaticSerialization(string, true)
57+
JrpcConv.automaticSerialization(array, true)
58+
JrpcConv.automaticSerialization(byte, true)
59+
JrpcConv.automaticSerialization(seq, true)
60+
JrpcConv.automaticSerialization(float, true)
61+
JrpcConv.automaticSerialization(JsonString, true)
62+
JrpcConv.automaticSerialization(bool, true)
63+
JrpcConv.automaticSerialization(int64, true)
64+
JrpcConv.automaticSerialization(ref, true)
65+
JrpcConv.automaticSerialization(enum, true)
66+
5367
proc readValue*(r: var JsonReader[JrpcConv], val: var MyEnum)
5468
{.gcsafe, raises: [IOError, SerializationError].} =
5569
let intVal = r.parseInt(int)

0 commit comments

Comments
 (0)