forked from github/multus-cni
gomodule is still in progress to migrate for now, hence multus team decide to keep vendor directory to support build without gomodule.
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package reflect2
|
|
|
|
import (
|
|
"reflect"
|
|
"unsafe"
|
|
)
|
|
|
|
type safeField struct {
|
|
reflect.StructField
|
|
}
|
|
|
|
func (field *safeField) Offset() uintptr {
|
|
return field.StructField.Offset
|
|
}
|
|
|
|
func (field *safeField) Name() string {
|
|
return field.StructField.Name
|
|
}
|
|
|
|
func (field *safeField) PkgPath() string {
|
|
return field.StructField.PkgPath
|
|
}
|
|
|
|
func (field *safeField) Type() Type {
|
|
panic("not implemented")
|
|
}
|
|
|
|
func (field *safeField) Tag() reflect.StructTag {
|
|
return field.StructField.Tag
|
|
}
|
|
|
|
func (field *safeField) Index() []int {
|
|
return field.StructField.Index
|
|
}
|
|
|
|
func (field *safeField) Anonymous() bool {
|
|
return field.StructField.Anonymous
|
|
}
|
|
|
|
func (field *safeField) Set(obj interface{}, value interface{}) {
|
|
val := reflect.ValueOf(obj).Elem()
|
|
val.FieldByIndex(field.Index()).Set(reflect.ValueOf(value).Elem())
|
|
}
|
|
|
|
func (field *safeField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) {
|
|
panic("unsafe operation is not supported")
|
|
}
|
|
|
|
func (field *safeField) Get(obj interface{}) interface{} {
|
|
val := reflect.ValueOf(obj).Elem().FieldByIndex(field.Index())
|
|
ptr := reflect.New(val.Type())
|
|
ptr.Elem().Set(val)
|
|
return ptr.Interface()
|
|
}
|
|
|
|
func (field *safeField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer {
|
|
panic("does not support unsafe operation")
|
|
}
|