Skip to content

Commit 120742f

Browse files
committed
Merge branch 'pr/115'
GODRIVER-691 Change-Id: Iab74c96aa5caae87f9e206acbc6c0919b61a01ba
2 parents bab29e4 + 34c8394 commit 120742f

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

bson/bsoncodec/default_value_encoders.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,27 @@ var sliceWriterPool = sync.Pool{
3333
},
3434
}
3535

36+
func encodeElement(ec EncodeContext, dw bsonrw.DocumentWriter, e primitive.E) error {
37+
vw, err := dw.WriteDocumentElement(e.Key)
38+
if err != nil {
39+
return err
40+
}
41+
42+
if e.Value == nil {
43+
return vw.WriteNull()
44+
}
45+
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
46+
if err != nil {
47+
return err
48+
}
49+
50+
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
51+
if err != nil {
52+
return err
53+
}
54+
return nil
55+
}
56+
3657
// DefaultValueEncoders is a namespace type for the default ValueEncoders used
3758
// when creating a registry.
3859
type DefaultValueEncoders struct{}
@@ -304,17 +325,7 @@ func (dve DefaultValueEncoders) ArrayEncodeValue(ec EncodeContext, vw bsonrw.Val
304325

305326
for idx := 0; idx < val.Len(); idx++ {
306327
e := val.Index(idx).Interface().(primitive.E)
307-
vw, err := dw.WriteDocumentElement(e.Key)
308-
if err != nil {
309-
return err
310-
}
311-
312-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
313-
if err != nil {
314-
return err
315-
}
316-
317-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
328+
err = encodeElement(ec, dw, e)
318329
if err != nil {
319330
return err
320331
}
@@ -367,17 +378,7 @@ func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.Val
367378
}
368379

369380
for _, e := range d {
370-
vw, err := dw.WriteDocumentElement(e.Key)
371-
if err != nil {
372-
return err
373-
}
374-
375-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
376-
if err != nil {
377-
return err
378-
}
379-
380-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
381+
err = encodeElement(ec, dw, e)
381382
if err != nil {
382383
return err
383384
}

bson/bsoncodec/default_value_encoders_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,14 @@ func TestDefaultValueEncoders(t *testing.T) {
304304
bsonrwtest.WriteDocumentEnd,
305305
nil,
306306
},
307+
{
308+
"[1]primitive.E/success",
309+
[1]primitive.E{{"hello", nil}},
310+
&EncodeContext{Registry: buildDefaultRegistry()},
311+
nil,
312+
bsonrwtest.WriteDocumentEnd,
313+
nil,
314+
},
307315
},
308316
},
309317
{
@@ -358,6 +366,14 @@ func TestDefaultValueEncoders(t *testing.T) {
358366
bsonrwtest.WriteDocumentEnd,
359367
nil,
360368
},
369+
{
370+
"D/success",
371+
primitive.D{{"hello", nil}},
372+
&EncodeContext{Registry: buildDefaultRegistry()},
373+
nil,
374+
bsonrwtest.WriteDocumentEnd,
375+
nil,
376+
},
361377
},
362378
},
363379
{

0 commit comments

Comments
 (0)