Documentation
¶
Index ¶
- Variables
- func BuildDefaultRegistry()
- func BuildRegistry() *bson.Registry
- func Dump(t *testing.T, title string, bytes []byte)
- func IsAlreadyRegistered(registrar Registrar) bool
- func MarshalWithRegistry(registry *bson.Registry, value interface{}) ([]byte, error)
- func Register(registrar Registrar)
- func UnmarshalWithRegistry(registry *bson.Registry, bs []byte, value interface{}) error
- type BsonCodecsRegistrant
- type BsonRegistryBuilder
- func (b *BsonRegistryBuilder) Build()
- func (b *BsonRegistryBuilder) Register(registrant BsonCodecsRegistrant) *BsonRegistryBuilder
- func (b *BsonRegistryBuilder) RegisterAll(registrants ...BsonCodecsRegistrant) *BsonRegistryBuilder
- func (b *BsonRegistryBuilder) RegisterInterfaceDecoder(t reflect.Type, dec bson.ValueDecoder)
- func (b *BsonRegistryBuilder) RegisterInterfaceEncoder(t reflect.Type, enc bson.ValueEncoder)
- func (b *BsonRegistryBuilder) RegisterTypeDecoder(t reflect.Type, dec bson.ValueDecoder)
- func (b *BsonRegistryBuilder) RegisterTypeEncoder(t reflect.Type, enc bson.ValueEncoder)
- func (b *BsonRegistryBuilder) Registry() *bson.Registry
- type EncoderDecoder
- type GetType
- type Registrant
- type Registrar
- type TypedGenericCodex
- func (t *TypedGenericCodex[Typed]) DecodeValue(ctx bson.DecodeContext, reader bson.ValueReader, value reflect.Value) error
- func (t *TypedGenericCodex[Typed]) EncodeValue(ctx bson.EncodeContext, writer bson.ValueWriter, value reflect.Value) error
- func (t *TypedGenericCodex[Typed]) Register(builder Registrant)
- func (t *TypedGenericCodex[Typed]) RegisterType(factory func() Typed, toDto func(Typed) interface{}, ...)
Constants ¶
This section is empty.
Variables ¶
var DefaultBsonRegistryBuilder = NewBsonRegistryBuilder()
var ( // DefaultRegistry holds the registry produced by BuildDefaultRegistry. In // mongo-driver v2 there is no global default registry on the bson package; // consumers must pass this registry explicitly via // options.Client().SetRegistry(...) or options.Database().SetRegistry(...). DefaultRegistry *bson.Registry )
Functions ¶
func BuildDefaultRegistry ¶
func BuildDefaultRegistry()
BuildDefaultRegistry builds the registry and stores it in xbson.DefaultRegistry. In mongo-driver v2 there is no settable global default registry, so consumers must pass xbson.DefaultRegistry explicitly to their mongo client/database.
func BuildRegistry ¶
BuildRegistry creates a new registry configured with the default encoders and decoders, plus all registered registrars.
func IsAlreadyRegistered ¶
IsAlreadyRegistered checks if a Registrar is already registered.
func MarshalWithRegistry ¶
Types ¶
type BsonCodecsRegistrant ¶
type BsonCodecsRegistrant func(builder *BsonRegistryBuilder)
type BsonRegistryBuilder ¶
type BsonRegistryBuilder struct {
// contains filtered or unexported fields
}
BsonRegistryBuilder wraps a *bson.Registry to ease registration of custom codecs.
Note: in mongo-driver v2 there is no longer a settable global default registry, nor a registry-level option to honor JSON struct tags. JSON-tag fallback is configured per encoder/decoder via *bson.Encoder.UseJSONStructTags() and *bson.Decoder.UseJSONStructTags(). Build() stores the registry in xbson.DefaultRegistry — consumers must pass it explicitly to their mongo client/database via options.Client().SetRegistry(...).
func NewBsonRegistryBuilder ¶
func NewBsonRegistryBuilder() *BsonRegistryBuilder
func (*BsonRegistryBuilder) Build ¶
func (b *BsonRegistryBuilder) Build()
Build stores the registry in xbson.DefaultRegistry. Mongo-driver v2 has no settable global default registry, so consumers must pass xbson.DefaultRegistry explicitly via options.Client().SetRegistry(...) or options.Database().SetRegistry(...).
func (*BsonRegistryBuilder) Register ¶
func (b *BsonRegistryBuilder) Register(registrant BsonCodecsRegistrant) *BsonRegistryBuilder
Register a custom codec to the BSON registry
func (*BsonRegistryBuilder) RegisterAll ¶
func (b *BsonRegistryBuilder) RegisterAll(registrants ...BsonCodecsRegistrant) *BsonRegistryBuilder
RegisterAll register all the custom codecs to the BSON registry
func (*BsonRegistryBuilder) RegisterInterfaceDecoder ¶ added in v2.7.0
func (b *BsonRegistryBuilder) RegisterInterfaceDecoder(t reflect.Type, dec bson.ValueDecoder)
func (*BsonRegistryBuilder) RegisterInterfaceEncoder ¶ added in v2.7.0
func (b *BsonRegistryBuilder) RegisterInterfaceEncoder(t reflect.Type, enc bson.ValueEncoder)
func (*BsonRegistryBuilder) RegisterTypeDecoder ¶
func (b *BsonRegistryBuilder) RegisterTypeDecoder(t reflect.Type, dec bson.ValueDecoder)
func (*BsonRegistryBuilder) RegisterTypeEncoder ¶
func (b *BsonRegistryBuilder) RegisterTypeEncoder(t reflect.Type, enc bson.ValueEncoder)
func (*BsonRegistryBuilder) Registry ¶ added in v2.7.0
func (b *BsonRegistryBuilder) Registry() *bson.Registry
Registry returns the underlying *bson.Registry for direct use.
type EncoderDecoder ¶
type EncoderDecoder interface {
Registrar
bson.ValueDecoder
bson.ValueEncoder
}
EncoderDecoder is a bson.ValueDecoder and bson.ValueEncoder for a given type
func NewDecoderEncoder ¶
func NewDecoderEncoder[Entity, Dto, Base any](toDto func(Entity) Dto, fromDto func(Dto) Entity) EncoderDecoder
NewDecoderEncoder creates a new decoderEncoder backed by the provided conversion functions
type GetType ¶
GetType provides the type for a family of types that can be encoded/decoded to/from a bson document. It allows a generic type to be encoded/decoded to/from a bson document.
type Registrant ¶
type Registrant interface {
RegisterTypeEncoder(valueType reflect.Type, enc bson.ValueEncoder)
RegisterTypeDecoder(valueType reflect.Type, enc bson.ValueDecoder)
RegisterInterfaceEncoder(t reflect.Type, enc bson.ValueEncoder)
RegisterInterfaceDecoder(t reflect.Type, enc bson.ValueDecoder)
}
type Registrar ¶
type Registrar interface {
Register(builder Registrant)
}
type TypedGenericCodex ¶
type TypedGenericCodex[Typed any] struct { // contains filtered or unexported fields }
TypedGenericCodex is a generic encoder/decoder for a family of types that implement the Typed interface It allows a generic type to be encoded/decoded to/from a bson document. The getType function is used to determine the type of the underlying value.
func NewTypedGenericCodex ¶
func NewTypedGenericCodex[Typed any](getType GetType[Typed]) *TypedGenericCodex[Typed]
func (*TypedGenericCodex[Typed]) DecodeValue ¶
func (t *TypedGenericCodex[Typed]) DecodeValue(ctx bson.DecodeContext, reader bson.ValueReader, value reflect.Value) error
DecodeValue implements the bson.ValueDecoder interface
func (*TypedGenericCodex[Typed]) EncodeValue ¶
func (t *TypedGenericCodex[Typed]) EncodeValue(ctx bson.EncodeContext, writer bson.ValueWriter, value reflect.Value) error
EncodeValue implements the bson.ValueEncoder interface
func (*TypedGenericCodex[Typed]) Register ¶
func (t *TypedGenericCodex[Typed]) Register(builder Registrant)
Register implements the Registrar interface. It allows the decoderEncoder to be registered with a bson.Registry.
func (*TypedGenericCodex[Typed]) RegisterType ¶
func (t *TypedGenericCodex[Typed]) RegisterType( factory func() Typed, toDto func(Typed) interface{}, fromDto func(interface{}) Typed, )
RegisterType registers a factory function for a given type name