func()

in gotype/unfold.go [152:188]


func (u *Unfolder) SetTarget(to interface{}) error {
	ctx := &u.unfoldCtx

	if to == nil {
		// reset internal states on nil
		u.unfolder.init(&unfolderNoTarget{})
		u.value.init(reflect.Value{})
		u.ptr.init()
		u.key.init()
		u.idx.init()
		u.baseType.init()
		u.valueBuffer.reset()

		return nil
	}

	if ptr, u := lookupGoTypeUnfolder(to); u != nil {
		u.initState(ctx, ptr)
		return nil
	}

	t := reflect.TypeOf(to)
	if t.Kind() != reflect.Ptr {
		return errRequiresPointer
	}

	ru, err := lookupReflUnfolder(&u.unfoldCtx, t, true)
	if err != nil {
		return err
	}
	if ru != nil {
		ru.initState(ctx, reflect.ValueOf(to))
		return nil
	}

	return errUnsupported
}