Skip to content

Commit 382691e

Browse files
committed
ethrpc: embed error data in message
1 parent 25e48ae commit 382691e

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

ethrpc/jsonrpc/jsonrpc.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jsonrpc
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"fmt"
67
)
@@ -34,5 +35,15 @@ type Error struct {
3435

3536
// Error implements the error interface.
3637
func (e Error) Error() string {
37-
return fmt.Sprintf("jsonrpc error %d: %s", e.Code, e.Message)
38+
message := fmt.Sprintf("jsonrpc error %v: %v", e.Code, e.Message)
39+
if len(e.Data) == 0 {
40+
return message
41+
}
42+
43+
var data bytes.Buffer
44+
if err := json.Compact(&data, e.Data); err != nil {
45+
return fmt.Sprintf("%v, data: %q", message, string(e.Data))
46+
}
47+
48+
return fmt.Sprintf("%v, data: %v", message, data.String())
3849
}

ethrpc/jsonrpc/jsonrpc_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package jsonrpc
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
)
7+
8+
func TestErrorString(t *testing.T) {
9+
t.Run("without data", func(t *testing.T) {
10+
err := Error{
11+
Code: -32000,
12+
Message: "header not found",
13+
}
14+
15+
if got, want := err.Error(), "jsonrpc error -32000: header not found"; got != want {
16+
t.Fatalf("unexpected error string: got %q, want %q", got, want)
17+
}
18+
})
19+
20+
t.Run("with json data", func(t *testing.T) {
21+
err := Error{
22+
Code: 3,
23+
Message: "execution reverted",
24+
Data: json.RawMessage("{\n\t\"reason\": \"bad\",\n\t\"code\": 123\n}"),
25+
}
26+
27+
if got, want := err.Error(), `jsonrpc error 3: execution reverted, data: {"reason":"bad","code":123}`; got != want {
28+
t.Fatalf("unexpected error string: got %q, want %q", got, want)
29+
}
30+
})
31+
}

0 commit comments

Comments
 (0)