diff --git a/json/json.go b/json/json.go index 028fd1f..ae4c451 100644 --- a/json/json.go +++ b/json/json.go @@ -533,7 +533,7 @@ func (enc *Encoder) Encode(v any) error { b = enc.buffer.Bytes() } - if _, err := enc.writer.Write(b); err != nil { + if _, err = enc.writer.Write(b); err != nil { enc.err = err } diff --git a/json/json_test.go b/json/json_test.go index 8256be2..e1ba9fe 100644 --- a/json/json_test.go +++ b/json/json_test.go @@ -1839,6 +1839,19 @@ func TestSetAppendNewline(t *testing.T) { } } +type errWriter struct{ err error } + +func (w *errWriter) Write(p []byte) (int, error) { return 0, w.err } + +func TestEncoderEncodeReturnsWriterError(t *testing.T) { + want := errors.New("boom") + enc := NewEncoder(&errWriter{err: want}) + + if err := enc.Encode("v"); !errors.Is(err, want) { + t.Errorf("expected writer error to surface, got %v", err) + } +} + func TestEscapeString(t *testing.T) { b := Escape(`value`) x := []byte(`"value"`)