Skip to content

Commit 6109bd1

Browse files
authored
GODRIVER-2719 Remove unnecessary errors from bson.Encoder/bson.Decoder. (#1525)
1 parent 7b9bf01 commit 6109bd1

31 files changed

+193
-377
lines changed

bson/bson_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,10 @@ func TestMapCodec(t *testing.T) {
184184
mapRegistry := NewRegistry()
185185
mapRegistry.RegisterKindEncoder(reflect.Map, mapCodec)
186186
buf := new(bytes.Buffer)
187-
vw, err := bsonrw.NewBSONValueWriter(buf)
188-
assert.Nil(t, err)
187+
vw := bsonrw.NewValueWriter(buf)
189188
enc := NewEncoder(vw)
190189
enc.SetRegistry(mapRegistry)
191-
err = enc.Encode(mapObj)
190+
err := enc.Encode(mapObj)
192191
assert.Nil(t, err, "Encode error: %v", err)
193192
str := buf.String()
194193
assert.True(t, strings.Contains(str, tc.key), "expected result to contain %v, got: %v", tc.key, str)

bson/bsoncodec/default_value_decoders_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2427,7 +2427,7 @@ func TestDefaultValueDecoders(t *testing.T) {
24272427
buildDocument(bsoncore.AppendNullElement(nil, "bar")),
24282428
),
24292429
)
2430-
dvr := bsonrw.NewBSONDocumentReader(b)
2430+
dvr := bsonrw.NewValueReader(b)
24312431
dr, err := dvr.ReadDocument()
24322432
noerr(t, err)
24332433
_, vr, err := dr.ReadElement()
@@ -2488,7 +2488,7 @@ func TestDefaultValueDecoders(t *testing.T) {
24882488
noerr(t, err)
24892489
doc, err = bsoncore.AppendDocumentEnd(doc, idx)
24902490
noerr(t, err)
2491-
dvr := bsonrw.NewBSONDocumentReader(doc)
2491+
dvr := bsonrw.NewValueReader(doc)
24922492
noerr(t, err)
24932493
dr, err := dvr.ReadDocument()
24942494
noerr(t, err)
@@ -3132,7 +3132,7 @@ func TestDefaultValueDecoders(t *testing.T) {
31323132
t.Run("Decode", func(t *testing.T) {
31333133
for _, tc := range testCases {
31343134
t.Run(tc.name, func(t *testing.T) {
3135-
vr := bsonrw.NewBSONDocumentReader(tc.b)
3135+
vr := bsonrw.NewValueReader(tc.b)
31363136
reg := buildDefaultRegistry()
31373137
vtype := reflect.TypeOf(tc.value)
31383138
dec, err := reg.LookupDecoder(vtype)
@@ -3181,7 +3181,7 @@ func TestDefaultValueDecoders(t *testing.T) {
31813181

31823182
for _, tc := range testCases {
31833183
t.Run(tc.name, func(t *testing.T) {
3184-
vr := bsonrw.NewBSONDocumentReader(tc.b)
3184+
vr := bsonrw.NewValueReader(tc.b)
31853185
reg := buildDefaultRegistry()
31863186
vtype := reflect.TypeOf(tc.value)
31873187
dec, err := reg.LookupDecoder(vtype)
@@ -3403,7 +3403,7 @@ func TestDefaultValueDecoders(t *testing.T) {
34033403
})
34043404
t.Run("top level document", func(t *testing.T) {
34053405
data := bsoncore.BuildDocument(nil, bsoncore.AppendDoubleElement(nil, "pi", 3.14159))
3406-
vr := bsonrw.NewBSONDocumentReader(data)
3406+
vr := bsonrw.NewValueReader(data)
34073407
want := primitive.D{{"pi", 3.14159}}
34083408
var got interface{}
34093409
val := reflect.ValueOf(&got).Elem()
@@ -3451,7 +3451,7 @@ func TestDefaultValueDecoders(t *testing.T) {
34513451
}
34523452
for _, tc := range testCases {
34533453
var got interface{}
3454-
vr := bsonrw.NewBSONDocumentReader(doc)
3454+
vr := bsonrw.NewValueReader(doc)
34553455
val := reflect.ValueOf(&got).Elem()
34563456

34573457
err := defaultEmptyInterfaceCodec.DecodeValue(DecodeContext{Registry: tc.registry}, vr, val)
@@ -3487,7 +3487,7 @@ func TestDefaultValueDecoders(t *testing.T) {
34873487
}
34883488

34893489
var got primitive.D
3490-
vr := bsonrw.NewBSONDocumentReader(doc)
3490+
vr := bsonrw.NewValueReader(doc)
34913491
val := reflect.ValueOf(&got).Elem()
34923492
err := defaultSliceCodec.DecodeValue(DecodeContext{Registry: reg}, vr, val)
34933493
noerr(t, err)
@@ -3577,7 +3577,7 @@ func TestDefaultValueDecoders(t *testing.T) {
35773577
// DecodeValue error when decoding into a primitive.D.
35783578
"primitive.D slice",
35793579
primitive.D{},
3580-
bsonrw.NewBSONDocumentReader(docBytes),
3580+
bsonrw.NewValueReader(docBytes),
35813581
emptyInterfaceErrorRegistry,
35823582
defaultSliceCodec,
35833583
docEmptyInterfaceErr,
@@ -3600,7 +3600,7 @@ func TestDefaultValueDecoders(t *testing.T) {
36003600
// the decodeD helper function.
36013601
"primitive.D array",
36023602
[1]primitive.E{},
3603-
bsonrw.NewBSONDocumentReader(docBytes),
3603+
bsonrw.NewValueReader(docBytes),
36043604
emptyInterfaceErrorRegistry,
36053605
ValueDecoderFunc(dvd.ArrayDecodeValue),
36063606
docEmptyInterfaceErr,
@@ -3623,7 +3623,7 @@ func TestDefaultValueDecoders(t *testing.T) {
36233623
// DecodeValue error when decoding into a map.
36243624
"map",
36253625
map[string]interface{}{},
3626-
bsonrw.NewBSONDocumentReader(docBytes),
3626+
bsonrw.NewValueReader(docBytes),
36273627
emptyInterfaceErrorRegistry,
36283628
defaultMapCodec,
36293629
docEmptyInterfaceErr,
@@ -3632,7 +3632,7 @@ func TestDefaultValueDecoders(t *testing.T) {
36323632
// DecodeValue error when decoding into a struct.
36333633
"struct - DecodeValue error",
36343634
emptyInterfaceStruct{},
3635-
bsonrw.NewBSONDocumentReader(docBytes),
3635+
bsonrw.NewValueReader(docBytes),
36363636
emptyInterfaceErrorRegistry,
36373637
defaultTestStructCodec,
36383638
emptyInterfaceStructErr,
@@ -3643,15 +3643,15 @@ func TestDefaultValueDecoders(t *testing.T) {
36433643
// no decoder for strings.
36443644
"struct - no decoder found",
36453645
stringStruct{},
3646-
bsonrw.NewBSONDocumentReader(docBytes),
3646+
bsonrw.NewValueReader(docBytes),
36473647
NewRegistryBuilder().Build(),
36483648
defaultTestStructCodec,
36493649
stringStructErr,
36503650
},
36513651
{
36523652
"deeply nested struct",
36533653
outer{},
3654-
bsonrw.NewBSONDocumentReader(outerDoc),
3654+
bsonrw.NewValueReader(outerDoc),
36553655
nestedRegistry,
36563656
defaultTestStructCodec,
36573657
nestedErr,
@@ -3681,7 +3681,7 @@ func TestDefaultValueDecoders(t *testing.T) {
36813681
type outer struct{ Foo inner }
36823682

36833683
dc := DecodeContext{Registry: buildDefaultRegistry()}
3684-
vr := bsonrw.NewBSONDocumentReader(outerBytes)
3684+
vr := bsonrw.NewValueReader(outerBytes)
36853685
val := reflect.New(reflect.TypeOf(outer{})).Elem()
36863686
err := defaultTestStructCodec.DecodeValue(dc, vr, val)
36873687

@@ -3714,7 +3714,7 @@ func TestDefaultValueDecoders(t *testing.T) {
37143714
reg := rb.RegisterTypeMapEntry(bsontype.Boolean, reflect.TypeOf(mybool(true))).Build()
37153715

37163716
dc := DecodeContext{Registry: reg}
3717-
vr := bsonrw.NewBSONDocumentReader(docBytes)
3717+
vr := bsonrw.NewValueReader(docBytes)
37183718
val := reflect.New(tD).Elem()
37193719
err := defaultValueDecoders.DDecodeValue(dc, vr, val)
37203720
assert.Nil(t, err, "DDecodeValue error: %v", err)
@@ -3733,7 +3733,7 @@ func TestDefaultValueDecoders(t *testing.T) {
37333733

37343734
type myMap map[string]mybool
37353735
dc := DecodeContext{Registry: buildDefaultRegistry()}
3736-
vr := bsonrw.NewBSONDocumentReader(docBytes)
3736+
vr := bsonrw.NewValueReader(docBytes)
37373737
val := reflect.New(reflect.TypeOf(myMap{})).Elem()
37383738
err := defaultMapCodec.DecodeValue(dc, vr, val)
37393739
assert.Nil(t, err, "DecodeValue error: %v", err)

bson/bsoncodec/default_value_encoders_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,8 +1770,7 @@ func TestDefaultValueEncoders(t *testing.T) {
17701770
for _, tc := range testCases {
17711771
t.Run(tc.name, func(t *testing.T) {
17721772
b := make(bsonrw.SliceWriter, 0, 512)
1773-
vw, err := bsonrw.NewBSONValueWriter(&b)
1774-
noerr(t, err)
1773+
vw := bsonrw.NewValueWriter(&b)
17751774
reg := buildDefaultRegistry()
17761775
enc, err := reg.LookupEncoder(reflect.TypeOf(tc.value))
17771776
noerr(t, err)
@@ -1821,8 +1820,7 @@ func TestDefaultValueEncoders(t *testing.T) {
18211820
for _, tc := range testCases {
18221821
t.Run(tc.name, func(t *testing.T) {
18231822
b := make(bsonrw.SliceWriter, 0, 512)
1824-
vw, err := bsonrw.NewBSONValueWriter(&b)
1825-
noerr(t, err)
1823+
vw := bsonrw.NewValueWriter(&b)
18261824
reg := buildDefaultRegistry()
18271825
enc, err := reg.LookupEncoder(reflect.TypeOf(tc.value))
18281826
noerr(t, err)

bson/bsoncodec/registry_examples_test.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,10 @@ func ExampleRegistry_customEncoder() {
6868
// Marshal the document as BSON. Expect that the int field is encoded to the
6969
// same value and that the negatedInt field is encoded as the negated value.
7070
buf := new(bytes.Buffer)
71-
vw, err := bsonrw.NewBSONValueWriter(buf)
72-
if err != nil {
73-
panic(err)
74-
}
71+
vw := bsonrw.NewValueWriter(buf)
7572
enc := bson.NewEncoder(vw)
7673
enc.SetRegistry(reg)
77-
err = enc.Encode(doc)
74+
err := enc.Encode(doc)
7875
if err != nil {
7976
panic(err)
8077
}
@@ -209,13 +206,10 @@ func ExampleRegistry_RegisterKindEncoder() {
209206
// Marshal the document as BSON. Expect that all fields are encoded as BSON
210207
// int64 (represented as "$numberLong" when encoded as Extended JSON).
211208
buf := new(bytes.Buffer)
212-
vw, err := bsonrw.NewBSONValueWriter(buf)
213-
if err != nil {
214-
panic(err)
215-
}
209+
vw := bsonrw.NewValueWriter(buf)
216210
enc := bson.NewEncoder(vw)
217211
enc.SetRegistry(reg)
218-
err = enc.Encode(doc)
212+
err := enc.Encode(doc)
219213
if err != nil {
220214
panic(err)
221215
}

bson/bsonrw/extjson_writer.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,11 @@ type extJSONValueWriter struct {
9292
}
9393

9494
// NewExtJSONValueWriter creates a ValueWriter that writes Extended JSON to w.
95-
func NewExtJSONValueWriter(w io.Writer, canonical, escapeHTML bool) (ValueWriter, error) {
96-
if w == nil {
97-
return nil, errNilWriter
98-
}
99-
95+
func NewExtJSONValueWriter(w io.Writer, canonical, escapeHTML bool) ValueWriter {
10096
// Enable newlines for all Extended JSON value writers created by NewExtJSONValueWriter. We
10197
// expect these value writers to be used with an Encoder, which should add newlines after
10298
// encoded Extended JSON documents.
103-
return newExtJSONWriter(w, canonical, escapeHTML, true), nil
99+
return newExtJSONWriter(w, canonical, escapeHTML, true)
104100
}
105101

106102
func newExtJSONWriter(w io.Writer, canonical, escapeHTML, newlines bool) *extJSONValueWriter {

bson/bsonrw/extjson_writer_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package bsonrw
88

99
import (
1010
"fmt"
11-
"io/ioutil"
11+
"io"
1212
"reflect"
1313
"strings"
1414
"testing"
@@ -139,7 +139,7 @@ func TestExtJSONValueWriter(t *testing.T) {
139139
t.Fatalf("fn must have one return value and it must be an error.")
140140
}
141141
params := make([]reflect.Value, 1, len(tc.params)+1)
142-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
142+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
143143
params[0] = reflect.ValueOf(ejvw)
144144
for _, param := range tc.params {
145145
params = append(params, reflect.ValueOf(param))
@@ -162,7 +162,7 @@ func TestExtJSONValueWriter(t *testing.T) {
162162
}
163163

164164
t.Run("WriteArray", func(t *testing.T) {
165-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
165+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
166166
ejvw.push(mArray)
167167
want := TransitionError{current: mArray, destination: mArray, parent: mTopLevel,
168168
name: "WriteArray", modes: []mode{mElement, mValue}, action: "write"}
@@ -172,7 +172,7 @@ func TestExtJSONValueWriter(t *testing.T) {
172172
}
173173
})
174174
t.Run("WriteCodeWithScope", func(t *testing.T) {
175-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
175+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
176176
ejvw.push(mArray)
177177
want := TransitionError{current: mArray, destination: mCodeWithScope, parent: mTopLevel,
178178
name: "WriteCodeWithScope", modes: []mode{mElement, mValue}, action: "write"}
@@ -182,7 +182,7 @@ func TestExtJSONValueWriter(t *testing.T) {
182182
}
183183
})
184184
t.Run("WriteDocument", func(t *testing.T) {
185-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
185+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
186186
ejvw.push(mArray)
187187
want := TransitionError{current: mArray, destination: mDocument, parent: mTopLevel,
188188
name: "WriteDocument", modes: []mode{mElement, mValue, mTopLevel}, action: "write"}
@@ -192,7 +192,7 @@ func TestExtJSONValueWriter(t *testing.T) {
192192
}
193193
})
194194
t.Run("WriteDocumentElement", func(t *testing.T) {
195-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
195+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
196196
ejvw.push(mElement)
197197
want := TransitionError{current: mElement,
198198
destination: mElement,
@@ -206,7 +206,7 @@ func TestExtJSONValueWriter(t *testing.T) {
206206
}
207207
})
208208
t.Run("WriteDocumentEnd", func(t *testing.T) {
209-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
209+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
210210
ejvw.push(mElement)
211211
want := fmt.Errorf("incorrect mode to end document: %s", mElement)
212212
got := ejvw.WriteDocumentEnd()
@@ -215,7 +215,7 @@ func TestExtJSONValueWriter(t *testing.T) {
215215
}
216216
})
217217
t.Run("WriteArrayElement", func(t *testing.T) {
218-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
218+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
219219
ejvw.push(mElement)
220220
want := TransitionError{current: mElement,
221221
destination: mValue,
@@ -229,7 +229,7 @@ func TestExtJSONValueWriter(t *testing.T) {
229229
}
230230
})
231231
t.Run("WriteArrayEnd", func(t *testing.T) {
232-
ejvw := newExtJSONWriter(ioutil.Discard, true, true, false)
232+
ejvw := newExtJSONWriter(io.Discard, true, true, false)
233233
ejvw.push(mElement)
234234
want := fmt.Errorf("incorrect mode to end array: %s", mElement)
235235
got := ejvw.WriteArrayEnd()

bson/bsonrw/value_reader.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ type valueReader struct {
9292
frame int64
9393
}
9494

95-
// NewBSONDocumentReader returns a ValueReader using b for the underlying BSON
95+
// NewValueReader returns a ValueReader using b for the underlying BSON
9696
// representation. Parameter b must be a BSON Document.
97-
func NewBSONDocumentReader(b []byte) ValueReader {
97+
func NewValueReader(b []byte) ValueReader {
9898
// TODO(skriptble): There's a lack of symmetry between the reader and writer, since the reader takes a []byte while the
9999
// TODO writer takes an io.Writer. We should have two versions of each, one that takes a []byte and one that takes an
100100
// TODO io.Reader or io.Writer. The []byte version will need to return a thing that can return the finished []byte since

bson/bsonrw/value_writer.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,6 @@ func (bvwp *BSONValueWriterPool) Put(vw ValueWriter) (ok bool) {
9595
// allocating a 4GB slice.
9696
var maxSize = math.MaxInt32
9797

98-
var errNilWriter = errors.New("cannot create a ValueWriter from a nil io.Writer")
99-
10098
type errMaxDocumentSizeExceeded struct {
10199
size int64
102100
}
@@ -188,15 +186,12 @@ func (vw *valueWriter) pop() {
188186
}
189187
}
190188

191-
// NewBSONValueWriter creates a ValueWriter that writes BSON to w.
189+
// NewValueWriter creates a ValueWriter that writes BSON to w.
192190
//
193191
// This ValueWriter will only write entire documents to the io.Writer and it
194192
// will buffer the document as it is built.
195-
func NewBSONValueWriter(w io.Writer) (ValueWriter, error) {
196-
if w == nil {
197-
return nil, errNilWriter
198-
}
199-
return newValueWriter(w), nil
193+
func NewValueWriter(w io.Writer) ValueWriter {
194+
return newValueWriter(w)
200195
}
201196

202197
func newValueWriter(w io.Writer) *valueWriter {

0 commit comments

Comments
 (0)