Skip to content

Commit 34c8394

Browse files
author
roman.tarasov
committed
extract common part from ArrayEncode and SliceEncode into function
1 parent cff3e9a commit 34c8394

File tree

1 file changed

+23
-36
lines changed

1 file changed

+23
-36
lines changed

bson/bsoncodec/default_value_encoders.go

Lines changed: 23 additions & 36 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,27 +325,10 @@ 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)
328+
err = encodeElement(ec, dw, e)
308329
if err != nil {
309330
return err
310331
}
311-
312-
if e.Value == nil {
313-
err = vw.WriteNull()
314-
if err != nil {
315-
return err
316-
}
317-
} else {
318-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
319-
if err != nil {
320-
return err
321-
}
322-
323-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
324-
if err != nil {
325-
return err
326-
}
327-
}
328332
}
329333

330334
return dw.WriteDocumentEnd()
@@ -374,27 +378,10 @@ func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.Val
374378
}
375379

376380
for _, e := range d {
377-
vw, err := dw.WriteDocumentElement(e.Key)
381+
err = encodeElement(ec, dw, e)
378382
if err != nil {
379383
return err
380384
}
381-
382-
if e.Value == nil {
383-
err = vw.WriteNull()
384-
if err != nil {
385-
return err
386-
}
387-
} else {
388-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
389-
if err != nil {
390-
return err
391-
}
392-
393-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
394-
if err != nil {
395-
return err
396-
}
397-
}
398385
}
399386

400387
return dw.WriteDocumentEnd()

0 commit comments

Comments
 (0)