Skip to content

Commit eb68a72

Browse files
authored
simplify unmarshal (#191)
* simplify unmarshal * simplify unmarshalError * rename errorAccumulate -> defaultErrorAccumulator * update converage
1 parent a5a945a commit eb68a72

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

error_accumulator.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
type errorAccumulator interface {
1010
write(p []byte) error
11-
unmarshalError() (*ErrorResponse, error)
11+
unmarshalError() *ErrorResponse
1212
}
1313

1414
type errorBuffer interface {
@@ -17,35 +17,35 @@ type errorBuffer interface {
1717
Bytes() []byte
1818
}
1919

20-
type errorAccumulate struct {
20+
type defaultErrorAccumulator struct {
2121
buffer errorBuffer
2222
unmarshaler unmarshaler
2323
}
2424

2525
func newErrorAccumulator() errorAccumulator {
26-
return &errorAccumulate{
26+
return &defaultErrorAccumulator{
2727
buffer: &bytes.Buffer{},
2828
unmarshaler: &jsonUnmarshaler{},
2929
}
3030
}
3131

32-
func (e *errorAccumulate) write(p []byte) error {
32+
func (e *defaultErrorAccumulator) write(p []byte) error {
3333
_, err := e.buffer.Write(p)
3434
if err != nil {
3535
return fmt.Errorf("error accumulator write error, %w", err)
3636
}
3737
return nil
3838
}
3939

40-
func (e *errorAccumulate) unmarshalError() (*ErrorResponse, error) {
41-
var err error
42-
if e.buffer.Len() > 0 {
43-
var errRes ErrorResponse
44-
err = e.unmarshaler.unmarshal(e.buffer.Bytes(), &errRes)
45-
if err != nil {
46-
return nil, err
47-
}
48-
return &errRes, nil
40+
func (e *defaultErrorAccumulator) unmarshalError() (errResp *ErrorResponse) {
41+
if e.buffer.Len() == 0 {
42+
return
4943
}
50-
return nil, err
44+
45+
err := e.unmarshaler.unmarshal(e.buffer.Bytes(), &errResp)
46+
if err != nil {
47+
errResp = nil
48+
}
49+
50+
return
5151
}

error_accumulator_test.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,29 @@ func (*failingUnMarshaller) unmarshal(_ []byte, _ any) error {
3636
}
3737

3838
func TestErrorAccumulatorReturnsUnmarshalerErrors(t *testing.T) {
39-
accumulator := &errorAccumulate{
39+
accumulator := &defaultErrorAccumulator{
4040
buffer: &bytes.Buffer{},
4141
unmarshaler: &failingUnMarshaller{},
4242
}
4343

44+
respErr := accumulator.unmarshalError()
45+
if respErr != nil {
46+
t.Fatalf("Did not return nil with empty buffer: %v", respErr)
47+
}
48+
4449
err := accumulator.write([]byte("{"))
4550
if err != nil {
4651
t.Fatalf("%+v", err)
4752
}
48-
_, err = accumulator.unmarshalError()
49-
if !errors.Is(err, errTestUnmarshalerFailed) {
50-
t.Fatalf("Did not return error when unmarshaler failed: %v", err)
53+
54+
respErr = accumulator.unmarshalError()
55+
if respErr != nil {
56+
t.Fatalf("Did not return nil when unmarshaler failed: %v", respErr)
5157
}
5258
}
5359

5460
func TestErrorByteWriteErrors(t *testing.T) {
55-
accumulator := &errorAccumulate{
61+
accumulator := &defaultErrorAccumulator{
5662
buffer: &failingErrorBuffer{},
5763
unmarshaler: &jsonUnmarshaler{},
5864
}
@@ -78,7 +84,7 @@ func TestErrorAccumulatorWriteErrors(t *testing.T) {
7884
if err != nil {
7985
t.Fatal(err)
8086
}
81-
stream.errAccumulator = &errorAccumulate{
87+
stream.errAccumulator = &defaultErrorAccumulator{
8288
buffer: &failingErrorBuffer{},
8389
unmarshaler: &jsonUnmarshaler{},
8490
}

stream_reader.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ func (stream *streamReader[T]) Recv() (response T, err error) {
3333
waitForData:
3434
line, err := stream.reader.ReadBytes('\n')
3535
if err != nil {
36-
if errRes, _ := stream.errAccumulator.unmarshalError(); errRes != nil {
37-
err = fmt.Errorf("error, %w", errRes.Error)
36+
respErr := stream.errAccumulator.unmarshalError()
37+
if respErr != nil {
38+
err = fmt.Errorf("error, %w", respErr.Error)
3839
}
3940
return
4041
}

0 commit comments

Comments
 (0)