Skip to content

Commit c9f19e6

Browse files
committed
Don't rely on exceptions when parsing
1 parent 5e355f1 commit c9f19e6

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

core/src/jsonrpclib/CallId.scala

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jsonrpclib
22

33
import com.github.plokhotnyuk.jsoniter_scala.core._
4+
import scala.annotation.switch
45

56
sealed trait CallId
67
object CallId {
@@ -10,17 +11,13 @@ object CallId {
1011

1112
implicit val callIdRW: JsonValueCodec[CallId] = new JsonValueCodec[CallId] {
1213
def decodeValue(in: JsonReader, default: CallId): CallId = {
13-
try {
14-
NumberId(in.readLong())
15-
} catch {
16-
case _: JsonReaderException =>
17-
in.rollbackToken()
18-
try {
19-
StringId(in.readString(null))
20-
} catch {
21-
case _: JsonReaderException =>
22-
in.readNullOrError(default, "expected null")
23-
}
14+
val nt = in.nextToken()
15+
16+
(nt: @switch) match {
17+
case 'n' => in.readNullOrError(default, "expected null")
18+
case '"' => in.rollbackToken(); StringId(in.readString(null))
19+
case _ => in.rollbackToken(); NumberId(in.readLong())
20+
2421
}
2522
}
2623

0 commit comments

Comments
 (0)