1package reflect2
2
3import (
4	"reflect"
5	"unsafe"
6)
7
8type safeField struct {
9	reflect.StructField
10}
11
12func (field *safeField) Offset() uintptr {
13	return field.StructField.Offset
14}
15
16func (field *safeField) Name() string {
17	return field.StructField.Name
18}
19
20func (field *safeField) PkgPath() string {
21	return field.StructField.PkgPath
22}
23
24func (field *safeField) Type() Type {
25	panic("not implemented")
26}
27
28func (field *safeField) Tag() reflect.StructTag {
29	return field.StructField.Tag
30}
31
32func (field *safeField) Index() []int {
33	return field.StructField.Index
34}
35
36func (field *safeField) Anonymous() bool {
37	return field.StructField.Anonymous
38}
39
40func (field *safeField) Set(obj interface{}, value interface{}) {
41	val := reflect.ValueOf(obj).Elem()
42	val.FieldByIndex(field.Index()).Set(reflect.ValueOf(value).Elem())
43}
44
45func (field *safeField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) {
46	panic("unsafe operation is not supported")
47}
48
49func (field *safeField) Get(obj interface{}) interface{} {
50	val := reflect.ValueOf(obj).Elem().FieldByIndex(field.Index())
51	ptr := reflect.New(val.Type())
52	ptr.Elem().Set(val)
53	return ptr.Interface()
54}
55
56func (field *safeField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer {
57	panic("does not support unsafe operation")
58}
59