73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
// Copyright (C) MongoDB, Inc. 2017-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 bson
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func ExampleValueEncoder() {
|
|
var _ ValueEncoderFunc = func(_ EncodeContext, vw ValueWriter, val reflect.Value) error {
|
|
if val.Kind() != reflect.String {
|
|
return ValueEncoderError{Name: "StringEncodeValue", Kinds: []reflect.Kind{reflect.String}, Received: val}
|
|
}
|
|
|
|
return vw.WriteString(val.String())
|
|
}
|
|
}
|
|
|
|
func ExampleValueDecoder() {
|
|
var _ ValueDecoderFunc = func(_ DecodeContext, vr ValueReader, val reflect.Value) error {
|
|
if !val.CanSet() || val.Kind() != reflect.String {
|
|
return ValueDecoderError{Name: "StringDecodeValue", Kinds: []reflect.Kind{reflect.String}, Received: val}
|
|
}
|
|
|
|
if vr.Type() != TypeString {
|
|
return fmt.Errorf("cannot decode %v into a string type", vr.Type())
|
|
}
|
|
|
|
str, err := vr.ReadString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
val.SetString(str)
|
|
return nil
|
|
}
|
|
}
|
|
|
|
type llCodec struct {
|
|
t *testing.T
|
|
decodeval interface{}
|
|
encodeval interface{}
|
|
err error
|
|
}
|
|
|
|
func (llc *llCodec) EncodeValue(_ EncodeContext, _ ValueWriter, i interface{}) error {
|
|
if llc.err != nil {
|
|
return llc.err
|
|
}
|
|
|
|
llc.encodeval = i
|
|
return nil
|
|
}
|
|
|
|
func (llc *llCodec) DecodeValue(_ DecodeContext, _ ValueReader, val reflect.Value) error {
|
|
if llc.err != nil {
|
|
return llc.err
|
|
}
|
|
|
|
if !reflect.TypeOf(llc.decodeval).AssignableTo(val.Type()) {
|
|
llc.t.Errorf("decodeval must be assignable to val provided to DecodeValue, but is not. decodeval %T; val %T", llc.decodeval, val)
|
|
return nil
|
|
}
|
|
|
|
val.Set(reflect.ValueOf(llc.decodeval))
|
|
return nil
|
|
}
|