Skip to content

Commit dca6b40

Browse files
authored
module: upgrade to segmentio/[email protected] (#19)
* module: upgrade to segmentio/[email protected] * all: use ZeroCopy on decoder
1 parent 2442446 commit dca6b40

File tree

6 files changed

+36
-13
lines changed

6 files changed

+36
-13
lines changed

conn.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package jsonrpc2
55

66
import (
7+
"bytes"
78
"context"
89
"fmt"
910
"sync"
@@ -141,7 +142,9 @@ func (c *conn) Call(ctx context.Context, method string, params, result interface
141142
return id, nil
142143
}
143144

144-
if err := json.Unmarshal(resp.result, result); err != nil {
145+
dec := json.NewDecoder(bytes.NewReader(resp.result))
146+
dec.ZeroCopy()
147+
if err := dec.Decode(result); err != nil {
145148
return id, fmt.Errorf("unmarshaling result: %w", err)
146149
}
147150

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module go.lsp.dev/jsonrpc2
22

3-
go 1.15
3+
go 1.16
44

55
require (
6-
github.com/segmentio/encoding v0.2.7
6+
github.com/segmentio/encoding v0.2.17
77
go.lsp.dev/pkg v0.0.0-20210125030640-b6310ac75a91
88
)

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
github.com/segmentio/encoding v0.2.7 h1:TKxEiKbernCFCTFW5wnSlE21kIQpqcY/ABXjhc9YeJU=
2-
github.com/segmentio/encoding v0.2.7/go.mod h1:MJjRE6bMDocliO2FyFC2Dusp+uYdBfHWh5Bw7QyExto=
1+
github.com/klauspost/cpuid/v2 v2.0.5 h1:qnfhwbFriwDIX51QncuNU5mEMf+6KE3t7O8V2KQl3Dg=
2+
github.com/klauspost/cpuid/v2 v2.0.5/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
3+
github.com/segmentio/encoding v0.2.17 h1:cgfmPc44u1po1lz5bSgF00gLCROBjDNc7h+H7I20zpc=
4+
github.com/segmentio/encoding v0.2.17/go.mod h1:7E68jTSWMnNoYhHi1JbLd7NBSB6XfE4vzqhR88hDBQc=
35
go.lsp.dev/pkg v0.0.0-20210125030640-b6310ac75a91 h1:JPKNt/RzBcOc89rhZ4Vl6U05Y1nN37FAc8PTKE3hssk=
46
go.lsp.dev/pkg v0.0.0-20210125030640-b6310ac75a91/go.mod h1:gtSHRuYfbCT0qnbLnovpie/WEmqyJ7T4n6VXiFMBtcw=

jsonrpc2_test.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package jsonrpc2_test
55

66
import (
7+
"bytes"
78
"context"
89
"fmt"
910
"io"
@@ -141,21 +142,27 @@ func testHandler() jsonrpc2.Handler {
141142

142143
case methodOneString:
143144
var v string
144-
if err := json.Unmarshal(req.Params(), &v); err != nil {
145+
dec := json.NewDecoder(bytes.NewReader(req.Params()))
146+
dec.ZeroCopy()
147+
if err := dec.Decode(&v); err != nil {
145148
return reply(ctx, nil, fmt.Errorf("%s: %w", jsonrpc2.ErrParse, err))
146149
}
147150
return reply(ctx, "got:"+v, nil)
148151

149152
case methodOneNumber:
150153
var v int
151-
if err := json.Unmarshal(req.Params(), &v); err != nil {
154+
dec := json.NewDecoder(bytes.NewReader(req.Params()))
155+
dec.ZeroCopy()
156+
if err := dec.Decode(&v); err != nil {
152157
return reply(ctx, nil, fmt.Errorf("%s: %w", jsonrpc2.ErrParse, err))
153158
}
154159
return reply(ctx, fmt.Sprintf("got:%d", v), nil)
155160

156161
case methodJoin:
157162
var v []string
158-
if err := json.Unmarshal(req.Params(), &v); err != nil {
163+
dec := json.NewDecoder(bytes.NewReader(req.Params()))
164+
dec.ZeroCopy()
165+
if err := dec.Decode(&v); err != nil {
159166
return reply(ctx, nil, fmt.Errorf("%s: %w", jsonrpc2.ErrParse, err))
160167
}
161168
return reply(ctx, path.Join(v...), nil)

message.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package jsonrpc2
55

66
import (
7+
"bytes"
78
"errors"
89
"fmt"
910

@@ -102,7 +103,9 @@ func (c Call) MarshalJSON() ([]byte, error) {
102103
// UnmarshalJSON implements json.Unmarshaler.
103104
func (c *Call) UnmarshalJSON(data []byte) error {
104105
var req wireRequest
105-
if err := json.Unmarshal(data, &req); err != nil {
106+
dec := json.NewDecoder(bytes.NewReader(data))
107+
dec.ZeroCopy()
108+
if err := dec.Decode(&req); err != nil {
106109
return fmt.Errorf("unmarshaling call: %w", err)
107110
}
108111

@@ -181,7 +184,9 @@ func (r Response) MarshalJSON() ([]byte, error) {
181184
// UnmarshalJSON implements json.Unmarshaler.
182185
func (r *Response) UnmarshalJSON(data []byte) error {
183186
var resp wireResponse
184-
if err := json.Unmarshal(data, &resp); err != nil {
187+
dec := json.NewDecoder(bytes.NewReader(data))
188+
dec.ZeroCopy()
189+
if err := dec.Decode(&resp); err != nil {
185190
return fmt.Errorf("unmarshaling jsonrpc response: %w", err)
186191
}
187192

@@ -276,7 +281,9 @@ func (n Notification) MarshalJSON() ([]byte, error) {
276281
// UnmarshalJSON implements json.Unmarshaler.
277282
func (n *Notification) UnmarshalJSON(data []byte) error {
278283
var req wireRequest
279-
if err := json.Unmarshal(data, &req); err != nil {
284+
dec := json.NewDecoder(bytes.NewReader(data))
285+
dec.ZeroCopy()
286+
if err := dec.Decode(&req); err != nil {
280287
return fmt.Errorf("unmarshaling notification: %w", err)
281288
}
282289

@@ -291,7 +298,9 @@ func (n *Notification) UnmarshalJSON(data []byte) error {
291298
// DecodeMessage decodes data to Message.
292299
func DecodeMessage(data []byte) (Message, error) {
293300
var msg combined
294-
if err := json.Unmarshal(data, &msg); err != nil {
301+
dec := json.NewDecoder(bytes.NewReader(data))
302+
dec.ZeroCopy()
303+
if err := dec.Decode(&msg); err != nil {
295304
return nil, fmt.Errorf("unmarshaling jsonrpc message: %w", err)
296305
}
297306

wire_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ func TestIDDecode(t *testing.T) {
8585
t.Parallel()
8686

8787
var got *jsonrpc2.ID
88-
if err := json.Unmarshal(tt.encoded, &got); err != nil {
88+
dec := json.NewDecoder(bytes.NewReader(tt.encoded))
89+
dec.ZeroCopy()
90+
if err := dec.Decode(&got); err != nil {
8991
t.Fatal(err)
9092
}
9193

0 commit comments

Comments
 (0)