Skip to content

Commit a76d283

Browse files
committed
Fix RawMessage decoder
1 parent 9395f05 commit a76d283

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

modules/core/src/main/scala/jsonrpclib/internals/RawMessage.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,10 @@ private[jsonrpclib] object RawMessage {
8484
error <- c.downField("error").as[Option[ErrorPayload]]
8585
id <- c.downField("id").as[Option[CallId]]
8686
resultOpt <-
87-
if (c.downField("result").succeeded)
88-
c.downField("result").as[Option[Payload]].map(res => Some(res))
89-
else Right(None)
87+
c.downField("result")
88+
.success
89+
.map(_.as[Option[Payload]].map(Some(_)))
90+
.getOrElse(Right(None))
9091
} yield RawMessage(jsonrpc, method, resultOpt, error, params, id)
9192
}
9293
}

modules/core/src/test/scala/jsonrpclib/RawMessageSpec.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ object RawMessageSpec extends FunSuite {
5757
assert(result == expected, s"Expected: $expected, got: $result")
5858
}
5959

60+
test("response message serialization with nested results") {
61+
val input: Message =
62+
OutputMessage.ResponseMessage(CallId.NumberId(1), Payload(Json.obj("result" -> Json.fromInt(1))))
63+
val expected = """{"jsonrpc":"2.0","id":1,"result":{"result":1}}"""
64+
val result = writeToString(input.asJson)
65+
66+
assert(result == expected, s"Expected: $expected, got: $result")
67+
}
68+
6069
test("error message serialization") {
6170
val input: Message = OutputMessage.ErrorMessage(
6271
CallId.NumberId(1),

0 commit comments

Comments
 (0)