58 lines
3.1 KiB
Go
58 lines
3.1 KiB
Go
// Copyright (C) MongoDB, Inc. 2022-present.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License. You may obtain
|
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
// Package mgocompat provides Registry, a BSON registry compatible with globalsign/mgo's BSON,
|
|
// with some remaining differences. It also provides RegistryRespectNilValues for compatibility
|
|
// with mgo's BSON with RespectNilValues set to true. A registry can be configured on a
|
|
// mongo.Client with the SetRegistry option. See the bsoncodec docs for more details on registries.
|
|
//
|
|
// Registry supports Getter and Setter equivalents by registering hooks. Note that if a value
|
|
// matches the hook for bsoncodec.Marshaler, bsoncodec.ValueMarshaler, or bsoncodec.Proxy, that
|
|
// hook will take priority over the Getter hook. The same is true for the hooks for
|
|
// bsoncodec.Unmarshaler and bsoncodec.ValueUnmarshaler and the Setter hook.
|
|
//
|
|
// The functional differences between Registry and globalsign/mgo's BSON library are:
|
|
//
|
|
// 1) Registry errors instead of silently skipping mismatched types when decoding.
|
|
//
|
|
// 2) Registry does not have special handling for marshaling array ops ("$in", "$nin", "$all").
|
|
//
|
|
// The driver uses different types than mgo's bson. The differences are:
|
|
//
|
|
// 1. The driver's bson.RawValue is equivalent to mgo's bson.Raw, but uses Value instead of Data and uses Type,
|
|
// which is a bsontype.Type object that wraps a byte, instead of bson.Raw's Kind, a byte.
|
|
//
|
|
// 2. The driver uses primitive.ObjectID, which is a [12]byte instead of mgo's
|
|
// bson.ObjectId, a string. Due to this, the zero value marshals and unmarshals differently
|
|
// for Extended JSON, with the driver marshaling as {"ID":"000000000000000000000000"} and
|
|
// mgo as {"Id":""}. The driver can unmarshal {"ID":""} to a primitive.ObjectID.
|
|
//
|
|
// 3. The driver's primitive.Symbol is equivalent to mgo's bson.Symbol.
|
|
//
|
|
// 4. The driver uses primitive.Timestamp instead of mgo's bson.MongoTimestamp. While
|
|
// MongoTimestamp is an int64, primitive.Timestamp stores the time and counter as two separate
|
|
// uint32 values, T and I respectively.
|
|
//
|
|
// 5. The driver uses primitive.MinKey and primitive.MaxKey, which are struct{}, instead
|
|
// of mgo's bson.MinKey and bson.MaxKey, which are int64.
|
|
//
|
|
// 6. The driver's primitive.Undefined is equivalent to mgo's bson.Undefined.
|
|
//
|
|
// 7. The driver's primitive.Binary is equivalent to mgo's bson.Binary, with variables named Subtype
|
|
// and Data instead of Kind and Data.
|
|
//
|
|
// 8. The driver's primitive.Regex is equivalent to mgo's bson.RegEx.
|
|
//
|
|
// 9. The driver's primitive.JavaScript is equivalent to mgo's bson.JavaScript with no
|
|
// scope and primitive.CodeWithScope is equivalent to mgo's bson.JavaScript with scope.
|
|
//
|
|
// 10. The driver's primitive.DBPointer is equivalent to mgo's bson.DBPointer, with variables
|
|
// named DB and Pointer instead of Namespace and Id.
|
|
//
|
|
// 11. When implementing the Setter interface, mgocompat.ErrSetZero is equivalent to mgo's
|
|
// bson.ErrSetZero.
|
|
package mgocompat
|