func ByteSliceCopy(in *[]byte, out *[]byte, s Scope) error {
	*out = make([]byte, len(*in))
	copy(*out, *in)
	return nil
}
ByteSliceCopy prevents recursing into every byte
package conversion
import (
	"fmt"
	"reflect"
)
type typePair struct {
	source reflect.Type
	dest   reflect.Type
}
type typeNamePair struct {
	fieldType reflect.Type
	fieldName string
}
type DebugLogger interface {
	Logf(format string, args ...interface{})
}
type NameFunc func(t reflect.Type) string
var DefaultNameFunc = func(t reflect.Type) string { return t.Name() }
type Converter struct {
	conversionFuncs          ConversionFuncs
	generatedConversionFuncs ConversionFuncs
	ignoredConversions map[typePair]struct{}
	structFieldDests map[typeNamePair][]typeNamePair
	structFieldSources map[typeNamePair][]typeNamePair
	defaultingFuncs map[reflect.Type]reflect.Value
	defaultingInterfaces map[reflect.Type]interface{}
	inputFieldMappingFuncs map[reflect.Type]FieldMappingFunc
	inputDefaultFlags map[reflect.Type]FieldMatchingFlags
	Debug DebugLogger
	nameFunc func(t reflect.Type) string
}
func NewConverter(nameFn NameFunc) *Converter {
	c := &Converter{
		conversionFuncs:          NewConversionFuncs(),
		generatedConversionFuncs: NewConversionFuncs(),
		ignoredConversions:       make(map[typePair]struct{}),
		defaultingFuncs:          make(map[reflect.Type]reflect.Value),
		defaultingInterfaces:     make(map[reflect.Type]interface{}),
		nameFunc:                 nameFn,
		structFieldDests:         make(map[typeNamePair][]typeNamePair),
		structFieldSources:       make(map[typeNamePair][]typeNamePair),
		inputFieldMappingFuncs: make(map[reflect.Type]FieldMappingFunc),
		inputDefaultFlags:      make(map[reflect.Type]FieldMatchingFlags),
	}
	c.RegisterConversionFunc(ByteSliceCopy)
	return c
}
func (c *Converter) WithConversions(fns ConversionFuncs) *Converter {
	copied := *c
	copied.conversionFuncs = c.conversionFuncs.Merge(fns)
	return &copied
}
func (c *Converter) DefaultMeta(t reflect.Type) (FieldMatchingFlags, *Meta) {
	return c.inputDefaultFlags[t], &Meta{
		KeyNameMapping: c.inputFieldMappingFuncs[t],
	}
}