diff --git a/json_rpc/jsonmarshal.nim b/json_rpc/jsonmarshal.nim index ede3f3c..9aa7834 100644 --- a/json_rpc/jsonmarshal.nim +++ b/json_rpc/jsonmarshal.nim @@ -34,6 +34,7 @@ proc fromJson*[T](n: JsonNode, argName: string, result: var seq[T]) proc fromJson*[N, T](n: JsonNode, argName: string, result: var array[N, T]) proc fromJson*(n: JsonNode, argName: string, result: var int64) proc fromJson*(n: JsonNode, argName: string, result: var uint64) +proc fromJson*(n: JsonNode, argName: string, result: var uint32) proc fromJson*(n: JsonNode, argName: string, result: var ref int64) proc fromJson*(n: JsonNode, argName: string, result: var ref int) proc fromJson*[T](n: JsonNode, argName: string, result: var Option[T]) @@ -94,6 +95,16 @@ proc fromJson*(n: JsonNode, argName: string, result: var uint64) = ValueError, "JSON-RPC input is an unexpected negative value") result = uint64(asInt) +proc fromJson*(n: JsonNode, argName: string, result: var uint32) = + n.kind.expect(JInt, argName) + let asInt = n.getBiggestInt() + # signed -> unsigned conversions are unchecked + # https://github.com/nim-lang/RFCs/issues/175 + if asInt < 0: + raise newException( + ValueError, "JSON-RPC input is an unexpected negative value") + result = uint32(asInt) + proc fromJson*(n: JsonNode, argName: string, result: var ref int64) = n.kind.expect(JInt, argName) new result