@@ -39,9 +39,9 @@ import (
39
39
"testing"
40
40
"time"
41
41
42
- "go.mongodb.org/mongo-driver/bson/bsontype"
43
-
44
42
"github.com/joomcode/mgo/bson"
43
+ "go.mongodb.org/mongo-driver/bson/bsontype"
44
+ "go.mongodb.org/mongo-driver/x/bsonx/bsoncore"
45
45
. "gopkg.in/check.v1"
46
46
)
47
47
@@ -462,15 +462,19 @@ func (s *S) Test64bitInt(c *C) {
462
462
type prefixPtr string
463
463
type prefixVal string
464
464
465
- func (t * prefixPtr ) GetBSON () (interface {} , error ) {
465
+ func (t * prefixPtr ) MarshalBSONValue () (bsontype. Type , [] byte , error ) {
466
466
if t == nil {
467
- return nil , nil
467
+ return bsontype . Null , nil , nil
468
468
}
469
- return "foo-" + string (* t ), nil
469
+ return bsontype . String , bsoncore . AppendString ( nil , "foo-" + string (* t ) ), nil
470
470
}
471
471
472
- func (t * prefixPtr ) SetBSON ( raw bson. Raw ) error {
472
+ func (t * prefixPtr ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
473
473
var s string
474
+ raw := bson.Raw {
475
+ Type : btype ,
476
+ Value : data ,
477
+ }
474
478
if raw .Type == 0x0A {
475
479
return bson .ErrSetZero
476
480
}
@@ -484,12 +488,16 @@ func (t *prefixPtr) SetBSON(raw bson.Raw) error {
484
488
return nil
485
489
}
486
490
487
- func (t prefixVal ) GetBSON () (interface {} , error ) {
488
- return "foo-" + string (t ), nil
491
+ func (t prefixVal ) MarshalBSONValue () (bsontype. Type , [] byte , error ) {
492
+ return bsontype . String , bsoncore . AppendString ( nil , "foo-" + string (t ) ), nil
489
493
}
490
494
491
- func (t * prefixVal ) SetBSON ( raw bson. Raw ) error {
495
+ func (t * prefixVal ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
492
496
var s string
497
+ raw := bson.Raw {
498
+ Type : btype ,
499
+ Value : data ,
500
+ }
493
501
if raw .Type == 0x0A {
494
502
return bson .ErrSetZero
495
503
}
@@ -902,8 +910,8 @@ type setterType struct {
902
910
received interface {}
903
911
}
904
912
905
- func (o * setterType ) SetBSON ( raw bson. Raw ) error {
906
- err := bson .RawUnmarshal (raw , & o .received )
913
+ func (o * setterType ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
914
+ err := bson .RawUnmarshal (bson. Raw { Type : btype , Value : data } , & o .received )
907
915
if err != nil {
908
916
panic ("The panic:" + err .Error ())
909
917
}
@@ -1032,11 +1040,21 @@ type typeWithGetter struct {
1032
1040
err error
1033
1041
}
1034
1042
1035
- func (t * typeWithGetter ) GetBSON () (interface {} , error ) {
1043
+ func (t * typeWithGetter ) MarshalBSONValue () (bsontype. Type , [] byte , error ) {
1036
1044
if t == nil {
1037
- return "<value is nil>" , nil
1045
+ return bsontype .String , bsoncore .AppendString (nil , "<value is nil>" ), nil
1046
+ }
1047
+
1048
+ doc , err := bson .Marshal (struct {
1049
+ V interface {} `bson:"v"`
1050
+ }{
1051
+ V : t .result ,
1052
+ })
1053
+ if err != nil {
1054
+ panic (err )
1038
1055
}
1039
- return t .result , t .err
1056
+ element , _ , _ := bsoncore .ReadElement (doc [4 :])
1057
+ return element .Value ().Type , element .Value ().Data , t .err
1040
1058
}
1041
1059
1042
1060
type docWithGetterField struct {
@@ -1081,8 +1099,8 @@ func (s *S) TestGetterErrors(c *C) {
1081
1099
1082
1100
type intGetter int64
1083
1101
1084
- func (t intGetter ) GetBSON () (interface {} , error ) {
1085
- return int64 ( t ), nil
1102
+ func (t intGetter ) MarshalBSONValue () (bsontype. Type , [] byte , error ) {
1103
+ return bsontype . Int32 , bsoncore . AppendInt32 ( nil , int32 ( t ) ), nil
1086
1104
}
1087
1105
1088
1106
type typeWithIntGetter struct {
@@ -1226,30 +1244,46 @@ type unexported struct {
1226
1244
1227
1245
type getterSetterD bson.D
1228
1246
1229
- func (s getterSetterD ) GetBSON () (interface {}, error ) {
1230
- if len (s ) == 0 {
1231
- return bson.D {}, nil
1247
+ func (s getterSetterD ) MarshalBSONValue () (bsontype.Type , []byte , error ) {
1248
+ var d bson.D
1249
+ if len (s ) != 0 {
1250
+ d = bson .D (s [:len (s )- 1 ])
1251
+ }
1252
+ data , err := bson .Marshal (d )
1253
+ if err != nil {
1254
+ panic (err )
1232
1255
}
1233
- return bson . D ( s [: len ( s ) - 1 ]) , nil
1256
+ return bsontype . EmbeddedDocument , data , nil
1234
1257
}
1235
1258
1236
- func (s * getterSetterD ) SetBSON ( raw bson. Raw ) error {
1259
+ func (s * getterSetterD ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
1237
1260
var doc bson.D
1238
- err := bson .RawUnmarshal (raw , & doc )
1261
+ err := bson .RawUnmarshal (bson.Raw {
1262
+ Type : btype ,
1263
+ Value : data ,
1264
+ }, & doc )
1239
1265
doc = append (doc , bson.DocElem {Key : "suffix" , Value : true })
1240
1266
* s = getterSetterD (doc )
1241
1267
return err
1242
1268
}
1243
1269
1244
1270
type getterSetterInt int
1245
1271
1246
- func (i getterSetterInt ) GetBSON () (interface {}, error ) {
1247
- return bson.D {{Key : "a" , Value : int (i )}}, nil
1272
+ func (i getterSetterInt ) MarshalBSONValue () (bsontype.Type , []byte , error ) {
1273
+ d := bson.D {{Key : "a" , Value : int (i )}}
1274
+ data , err := bson .Marshal (d )
1275
+ if err != nil {
1276
+ panic (err )
1277
+ }
1278
+ return bsontype .EmbeddedDocument , data , nil
1248
1279
}
1249
1280
1250
- func (i * getterSetterInt ) SetBSON ( raw bson. Raw ) error {
1281
+ func (i * getterSetterInt ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
1251
1282
var doc struct { A int }
1252
- err := bson .RawUnmarshal (raw , & doc )
1283
+ err := bson .RawUnmarshal (bson.Raw {
1284
+ Type : btype ,
1285
+ Value : data ,
1286
+ }, & doc )
1253
1287
* i = getterSetterInt (doc .A )
1254
1288
return err
1255
1289
}
@@ -1260,17 +1294,24 @@ type ifaceType interface {
1260
1294
1261
1295
type ifaceSlice []ifaceType
1262
1296
1263
- func (s * ifaceSlice ) SetBSON ( raw bson. Raw ) error {
1297
+ func (s * ifaceSlice ) UnmarshalBSONValue ( btype bsontype. Type , data [] byte ) error {
1264
1298
var ns []int
1265
- if err := bson .RawUnmarshal (raw , & ns ); err != nil {
1299
+ if err := bson .RawUnmarshal (bson.Raw {
1300
+ Type : btype ,
1301
+ Value : data ,
1302
+ }, & ns ); err != nil {
1266
1303
return err
1267
1304
}
1268
1305
* s = make (ifaceSlice , ns [0 ])
1269
1306
return nil
1270
1307
}
1271
1308
1272
- func (s ifaceSlice ) GetBSON () (interface {}, error ) {
1273
- return []int {len (s )}, nil
1309
+ func (s ifaceSlice ) MarshalBSONValue () (bsontype.Type , []byte , error ) {
1310
+ var data []byte
1311
+ idx , data := bsoncore .AppendArrayStart (data )
1312
+ data = bsoncore .AppendInt32Element (data , "1" , int32 (len (s )))
1313
+ data , _ = bsoncore .AppendArrayEnd (data , idx )
1314
+ return bsontype .Array , data , nil
1274
1315
}
1275
1316
1276
1317
type omitEmptyAware struct {
0 commit comments