Skip to content

Commit d9b795a

Browse files
authored
results: Fix Headers encoding (#507)
* Revert "results: Faster JSON encoding and decoding (#506)" This reverts commit 3629602. * results: Fix headers encoding
1 parent 3629602 commit d9b795a

File tree

7 files changed

+304
-302
lines changed

7 files changed

+304
-302
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,3 @@ vendor
3232
*.lz
3333

3434
.DS_Store
35-
.idea

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ require (
2323
github.com/miekg/dns v1.1.17
2424
github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25
2525
github.com/tsenart/go-tsz v0.0.0-20180814232043-cdeb9e1e981e
26-
github.com/valyala/fastjson v1.5.0
2726
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
27+
pgregory.net/rapid v0.3.3
2828
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25 h1:7z3LSn867ex6
3838
github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU=
3939
github.com/tsenart/go-tsz v0.0.0-20180814232043-cdeb9e1e981e h1:bB5SXzQmSUsJCmjPDN9fKYx3SSDER5diSjlN6TefTCc=
4040
github.com/tsenart/go-tsz v0.0.0-20180814232043-cdeb9e1e981e/go.mod h1:SWZznP1z5Ki7hDT2ioqiFKEse8K9tU2OUvaRI0NeGQo=
41-
github.com/valyala/fastjson v1.5.0 h1:DGrb4wEYso2HdGLyLmNoyNCQnCWfjd8yhghPv5/5YQg=
42-
github.com/valyala/fastjson v1.5.0/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
4341
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
4442
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM=
4543
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -59,3 +57,5 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
5957
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6058
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
6159
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
60+
pgregory.net/rapid v0.3.3 h1:jCjBsY4ln4Atz78QoBWxUEvAHaFyNDQg9+WU62aCn1U=
61+
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=

lib/results.go

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import (
1313
"strconv"
1414
"strings"
1515
"time"
16+
17+
"github.com/mailru/easyjson/jlexer"
18+
"github.com/mailru/easyjson/jwriter"
1619
)
1720

1821
func init() {
@@ -252,15 +255,48 @@ func NewCSVDecoder(r io.Reader) Decoder {
252255
r.Method = rec[9]
253256
r.URL = rec[10]
254257

255-
pr := textproto.NewReader(bufio.NewReader(
256-
base64.NewDecoder(base64.StdEncoding, strings.NewReader(rec[11]))))
257-
hdr, err := pr.ReadMIMEHeader()
258-
if err != nil {
259-
return err
258+
if rec[11] != "" {
259+
pr := textproto.NewReader(bufio.NewReader(
260+
base64.NewDecoder(base64.StdEncoding, strings.NewReader(rec[11]))))
261+
hdr, err := pr.ReadMIMEHeader()
262+
if err != nil {
263+
return err
264+
}
265+
r.Headers = http.Header(hdr)
260266
}
261-
r.Headers = http.Header(hdr)
262267

263268
return err
264269
}
265270
}
266271

272+
//go:generate easyjson -no_std_marshalers -output_filename results_easyjson.go results.go
273+
//easyjson:json
274+
type jsonResult Result
275+
276+
// NewJSONEncoder returns an Encoder that dumps the given *Results as a JSON
277+
// object.
278+
func NewJSONEncoder(w io.Writer) Encoder {
279+
var jw jwriter.Writer
280+
return func(r *Result) error {
281+
(*jsonResult)(r).MarshalEasyJSON(&jw)
282+
if jw.Error != nil {
283+
return jw.Error
284+
}
285+
jw.RawByte('\n')
286+
_, err := jw.DumpTo(w)
287+
return err
288+
}
289+
}
290+
291+
// NewJSONDecoder returns a Decoder that decodes JSON encoded Results.
292+
func NewJSONDecoder(r io.Reader) Decoder {
293+
rd := bufio.NewReader(r)
294+
return func(r *Result) (err error) {
295+
var jl jlexer.Lexer
296+
if jl.Data, err = rd.ReadBytes('\n'); err != nil {
297+
return err
298+
}
299+
(*jsonResult)(r).UnmarshalEasyJSON(&jl)
300+
return jl.Error()
301+
}
302+
}

lib/results_easyjson.go

Lines changed: 223 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)