@@ -33,6 +33,27 @@ var sliceWriterPool = sync.Pool{
33
33
},
34
34
}
35
35
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
+
36
57
// DefaultValueEncoders is a namespace type for the default ValueEncoders used
37
58
// when creating a registry.
38
59
type DefaultValueEncoders struct {}
@@ -304,27 +325,10 @@ func (dve DefaultValueEncoders) ArrayEncodeValue(ec EncodeContext, vw bsonrw.Val
304
325
305
326
for idx := 0 ; idx < val .Len (); idx ++ {
306
327
e := val .Index (idx ).Interface ().(primitive.E )
307
- vw , err := dw . WriteDocumentElement ( e . Key )
328
+ err = encodeElement ( ec , dw , e )
308
329
if err != nil {
309
330
return err
310
331
}
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
- }
328
332
}
329
333
330
334
return dw .WriteDocumentEnd ()
@@ -374,27 +378,10 @@ func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.Val
374
378
}
375
379
376
380
for _ , e := range d {
377
- vw , err := dw . WriteDocumentElement ( e . Key )
381
+ err = encodeElement ( ec , dw , e )
378
382
if err != nil {
379
383
return err
380
384
}
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
- }
398
385
}
399
386
400
387
return dw .WriteDocumentEnd ()
0 commit comments