Revert "removed corpix/reflect, use github.com/corpix/reflect"

This reverts commit c06889aa8c
This commit is contained in:
Park Byung Jun 2019-01-07 14:28:24 +00:00
parent 5954c92d80
commit 86193d253b
5 changed files with 1309 additions and 0 deletions

1153
reflect/convert.go Normal file

File diff suppressed because it is too large Load Diff

41
reflect/error.go Normal file
View File

@ -0,0 +1,41 @@
package reflect
import (
"fmt"
"reflect"
"strings"
)
type ErrCanNotConvertType struct {
value interface{}
from reflect.Type
to reflect.Type
reason []string
}
func (e ErrCanNotConvertType) Error() string {
var (
reason = strings.Join(e.reason, ", ")
)
if reason != "" {
reason = ", reason: " + reason
}
return fmt.Sprintf(
"Can not convert '%#v' of type '%s' to '%s'%s",
e.value,
e.from,
e.to,
reason,
)
}
func NewErrCanNotConvertType(value interface{}, from reflect.Type, to reflect.Type, reason ...string) ErrCanNotConvertType {
return ErrCanNotConvertType{
value: value,
from: from,
to: to,
reason: reason,
}
}

31
reflect/indirect.go Normal file
View File

@ -0,0 +1,31 @@
package reflect
import (
"reflect"
)
func Indirect(v interface{}) interface{} {
if v == nil {
return nil
}
return IndirectValue(reflect.ValueOf(v)).Interface()
}
func IndirectValue(reflectValue reflect.Value) reflect.Value {
if reflectValue.Kind() == reflect.Ptr {
return reflectValue.Elem()
}
return reflectValue
}
func IndirectType(reflectType reflect.Type) reflect.Type {
if reflectType == TypeInvalid {
return TypeInvalid
}
if reflectType.Kind() == reflect.Ptr {
return reflectType.Elem()
}
return reflectType
}

35
reflect/kind.go Normal file
View File

@ -0,0 +1,35 @@
package reflect
import (
"reflect"
)
const (
Invalid = reflect.Invalid
Bool = reflect.Bool
Int = reflect.Int
Int8 = reflect.Int8
Int16 = reflect.Int16
Int32 = reflect.Int32
Int64 = reflect.Int64
Uint = reflect.Uint
Uint8 = reflect.Uint8
Uint16 = reflect.Uint16
Uint32 = reflect.Uint32
Uint64 = reflect.Uint64
Uintptr = reflect.Uintptr
Float32 = reflect.Float32
Float64 = reflect.Float64
Complex64 = reflect.Complex64
Complex128 = reflect.Complex128
Array = reflect.Array
Chan = reflect.Chan
Func = reflect.Func
Interface = reflect.Interface
Map = reflect.Map
Ptr = reflect.Ptr
Slice = reflect.Slice
String = reflect.String
Struct = reflect.Struct
UnsafePointer = reflect.UnsafePointer
)

View File

@ -4,6 +4,51 @@ import (
"reflect" "reflect"
) )
var (
TypeOf = reflect.TypeOf
)
var (
Types = []reflect.Type{
TypeBool,
TypeInt,
TypeInt8,
TypeInt16,
TypeInt32,
TypeInt64,
TypeUint,
TypeUint8,
TypeUint16,
TypeUint32,
TypeUint64,
TypeFloat32,
TypeFloat64,
TypeComplex64,
TypeComplex128,
TypeUintptr,
TypeString,
}
TypeInvalid = reflect.Type(nil)
TypeBool = reflect.TypeOf(false)
TypeInt = reflect.TypeOf(int(0))
TypeInt8 = reflect.TypeOf(int8(0))
TypeInt16 = reflect.TypeOf(int16(0))
TypeInt32 = reflect.TypeOf(int32(0))
TypeInt64 = reflect.TypeOf(int64(0))
TypeUint = reflect.TypeOf(uint(0))
TypeUint8 = reflect.TypeOf(uint8(0))
TypeUint16 = reflect.TypeOf(uint16(0))
TypeUint32 = reflect.TypeOf(uint32(0))
TypeUint64 = reflect.TypeOf(uint64(0))
TypeFloat32 = reflect.TypeOf(float32(0))
TypeFloat64 = reflect.TypeOf(float64(0))
TypeComplex64 = reflect.TypeOf(complex64(0))
TypeComplex128 = reflect.TypeOf(complex128(0))
TypeUintptr = reflect.TypeOf(uintptr(0))
TypeString = reflect.TypeOf(string(""))
)
func IsTypeKind(t reflect.Type, kind reflect.Kind, removePtr bool) bool { func IsTypeKind(t reflect.Type, kind reflect.Kind, removePtr bool) bool {
if reflect.Ptr == t.Kind() { if reflect.Ptr == t.Kind() {
if removePtr { if removePtr {
@ -21,3 +66,7 @@ func GetTypeInfo(t reflect.Type) (realType reflect.Type, pkgName string, name st
return t, t.PkgPath(), t.Name() return t, t.PkgPath(), t.Name()
} }
func ConvertStringToType() {
}